Smart Duck computeren en andere dingetjes ...

For loop performance in EGL

EGL is een 4GL taal die omgezet wordt naar Java, javascript of Cobol.

Case

Vaak zie je de volgende code:

for (i int from 1 to lijst.getSize())
// doe iets
end

Bij Java generatie maar ook naar javascript kun je het beste eerst het
bepalen van de lengte van de lijst in een variabele zetten. Met het bepalen in de loop
gaat ie elke keer de lengte bepalen per iteratie. EGL doet op de achtergrond geen slimme conversie naar Java of javascript dus hetzelfde gedrag blijft. Dus ook in EGL de lengte van de lijst bepalen buiten de loop.

Beter zo:

lengteLijst int = lijst.getSize();
for (i int from 1 to lengteLijst)
// doe iets
end

Tests

Maar een klein testje. Dit geeft wel een idee wat het verschil in performance is.

Java (server kant)
1000 x 1000 x string zetten in een array
10000 x 1000 x string zetten in een array
100000 x 1000 x string zetten in een array

JavaScript (web pagina)
100 x 100 x string zetten in een array
1000 x 100 x string zetten in een array
10000 x 100 x string zetten in een array

Elke meeting is een gemiddelde van 5 testresulataten.

Testresulaat lengte bepalen in de loop vs buiten de loop

Java:

Iteraties In loop Buiten de loop
1000 24 ms 20 ms
10000 174 ms 151 ms
100000 2400 ms 1800 ms

JavaScript:

Iteraties In loop Buiten de loop
100 72 ms 61 ms
1000 820 ms 600 ms
10000 5535 ms 5019 ms

 

Conclusie

Bij eenvoudige lussen zul je weinig performance verschillen ondervinden. Bij complexe geneste loops zou je het verschil kunnen gaan merken. Het is maar 1 regeltje extra typen. Dus mijn advies is buiten de loop de lengte bepalen.


Bronnen

https://stackoverflow.com/questions/2383422/java-for-loop-performance-question
https://stackoverflow.com/questions/13645890/javascript-for-in-vs-for-loop-performance

 

Bejeweled By Nathalie

Al een tijdje ben ik bezig met de webstek van mijn vrouw. Versie 2 heb ik vandaag gelanceerd.

De site is van nul af opgebouwd met vanilla PHP, javascript, HTML en CSS. Ik heb hierbij gebruik gemaakt van mijn eigen SwirlJS bibliotheek. De web site is responsive, deze past zich aan op een smart phone, tablet of op een pc/laptop.

De web versie:

undefined

De mobiele versie:

undefined

 

Frameworks

Frameworks worden te pas en te onpas gebruikt. Er lijkt wel een soort wildgroei van allerlei raamwerken te zijn voor de programmeur. Frameworks om sites te bouwen, denk aan Symphony voor PHP, Ruby on Rails, Django en template engines zoals Smarty. En op javascript gebaseerde frameworks zoals React en Angular. Ik ben hier op terug aan het komen en in eerste instantie not to framework.

Een framework lijkt in eerste instantie vaak een geweldige tool en bereik je in korte tijd een leuk resultaat. Echter moet je je er van bewust zijn dat het framework wat je toepast niet het eeuwige leven heeft. Je bent afhankelijk van de ontwikkelaars van het framework dat je toepast. De makers van deze frameworks en engines hebben een bepaald doel voor ogen gehad wat voor hun blijkbaar werkte en die filosofie moet ook werken voor jouw team en projecten. Sommige frameworks hebben daarnaast een best hoge leercurve. Kijk bijvoorbeeld naar Angular (2 en hoger). Je bent daar best een tijdje mee bezig voordat je alle facetten van het framework door hebt en productief bent. Je leert er eigenlijk een taal en werkwijze bij.

Nog even over template engines waarvan Smarty een mooi voorbeeld is. Niet echt een framework maar kan wel in dezelfde 'categorie' meegenomen worden. Je hebt PHP, een prima taal om dynamische websites te bouwen. Je maakt een HTML pagina en plaats op bepaalde plekken dynamisch informatie met PHP. Dus de HTML pagina kun je zien als template die je vult met een scripting taal PHP. Waarom dan Smarty (een template engine) gebruiken? Je hebt al een template engine en dat is je PHP. Met PHP maar ook in andere scripttalen kun je prima een scheiding maken tussen inhoud, opmaak en dynamische elementen. Template engines zijn in mijn ogen dan ook kul.

Mijn advies is, bij kleine projecten not to framework. Creeer je eigen structuur in welke taal je ook prettig vind. Met een framework voeg je onnodig complexiteit toe en dat is voor kleine websites overkill. Bij grote complexe projecten kan een framework voordeel bieden. Het dwingt jou en/of je team in een bepaalde structuur te werken. Hiermee kun je gemakkelijker afdwingen dat iedere ontwikkelaar op de zelfde manier nieuwe onderdelen in het project bouwt. Kies dan wel voor een framework dat zich al min of meer bewezen heeft in de laatste jaren en waar actief aan wordt ontwikkeld zodat je ook de komende jaren op het gekozen framework kunt bouwen.

Geany kleurenschema

Geany is al een tijdje mijn favoriete editor/IDE om code te schrijven voor o.a. PHP, HTML, javascript, CSS en Python.

Voor mezelf heb ik een kleurenschema gemaakt.
Deze is hier te downloaden; smartduck.conf

Na downloaden kunt u deze installeren in het geval u Linux gebruikt door het bestand te plaatsen in de directory (map):

~/.config/geany/colorschemes/

~ geeft uw eigen home directory aan.

Indien u windows gebruikt plaats het bestand dan in de directory:

C:\Users\{gebruikersnaam}\Geany 1.31\data\colorschemes

of in

C:\Program Files\Geany\data\colorschemes

Vervang {gebruikersnaam} door uw eigen gebruikersnaam.

Na het starten van Geany kunt het kleurenschema op de volgende manier wijzigen:

undefined

 

undefined

PhpMyAdmin 1045 - Access denied for user 'root'@'localhost' (using password: NO)

Deze foutmelding komt u tegen wanneer u PhpMyAdmin op een debian systeem wilt installeren met MariaDB.
Het betekend dat er geen wachtwoord in de database aanwezig is voor het root account waarmee u wilt inloggen in PhpMyAdmin.

De oplossing is vrij eenvoudig. Open een terminal en login in mysql/mariadb:

$ sudo mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 59
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Type:

MariaDB [(none)]> use mysql;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Kijk of er een wachtwoord is gezet:

MariaDB [mysql]> select user,password from user;
+------+----------+
| user | password |
+------+----------+
| root | |
+------+----------+
1 row in set (0.00 sec)

Vervolgens het root wachtwoord zetten met:

MariaDB [mysql]> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mijnwachtwoord';

of het volgende wanneer het vorige commando een foutmelding geeft, dit heeft met versies van mysql te maken

MariaDB [mysql]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mijnwachtwoord');

Query OK, 0 rows affected (0.00 sec)

Check of het wachtwoord is gezet:

MariaDB [mysql]> select user,password from user;
+------+-------------------------------------------+
| user | password |
+------+-------------------------------------------+
| root | *78103DC1A1BE5B4D964C09B9AED4310851B61B8E |
+------+-------------------------------------------+

Stop met mysql:

MariaDB [mysql]>quit;  (of exit;)

Denk er aan dat wanneer u in mysql op de terminal wilt inloggen nu een wachtwoord moet opgeven.

Inloggen gaat dan met:

$ sudo mysql -u root -p

Ga vervolgens naar de PhpMyAdmin site om in te loggen.

Home ← Oudere berichten