Wat is er nieuw in PHP 8.0

Onlangs is PHP 8.0 uitgekomen. Hier zijn de meest interesante nieuwtjes

Union Types

PHP is een dynamicaly typed programmeertaal, daardoor kan een variabele soms van een ander type zijn. Met union types kan je aanduiden dat een variabele van 1 van de toegestane types is

// Union type example
public function foo(Foo|Bar $var): float|int;

JIT

De JIT is weer aangepast, waardoor PHP nog sneller is.

De Match Expressie

De match expressie is een beetje zoals de `switch` expressie.

// match example
$result = match($input) {
0 => "Hallo"
1,2 => "Wereld" 
}

ext-json standaard

De JSON extentie is nu altijd deel van PHP.

Tiny Perl CMS

Ik heb een klein, basis CMS systeem gemaakt in perl. Voornamelijk om perl uit te testen.

Het is eenorm eenvoudig, het heeft ook geen admin interface, dus zoals het script nu is
moet je pagina’s meteen in de databank aanmaken.

Hieronder zie je de sourcecode.

#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use DBI;

my $driver = "mysql";
my $database = "database_naam";
my $dsn = "DBI:$driver:database=$database";
my $userid = "database_user";
my $password = "database_password";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;

my $cgi = CGI->new;
print $cgi->header;

# header
print <<'EOF';
<!DOCTYPE="html">
<html>
<head>
  <title>TinyPerlCMS</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta charset="UTF-8" />
</head>
<style>
  body {
    max-width: 800px;
    padding: 1em;
    border: 1px solid black;
    margin: 0 auto;
  }

  img {
    max-width: 100%;
  }
</style>
<body>
EOF

my $p = $cgi->param('p') || '1'; # default id 1, de homepage

my $sth = $dbh->prepare("SELECT content, title
                        FROM pages
                        WHERE id = ? LIMIT 1"); #limit 1, voor de zekerheid
$sth->execute( $p ) or die $DBI::errstr;
if ($sth->rows == 0){
print "<h1>Error 404: Page not found</h1><p>The page you where looking for was not found. <a href='?p=1'>Go to the homepage</a></p>";
} else {
  while (my @row = $sth->fetchrow_array()) {
     my ($content, $title ) = @row;
     print "<h1>$title</h1>\n $content\n";
     if ($p != '1'){ # check als het niet de homepage is, om link naar homepage te tonen
     print '<a href="?p=1">Back</a>' 
     }
  }
}
$sth->finish();

#footer
print <<'EOF';
</body>
</html>
EOF

exit 0;

database structuur:

CREATE TABLE `pages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) NOT NULL, -- grote kan aangepast worden
  `content` varchar(10000) NOT NULL, -- grote kan aangepast worden
  PRIMARY KEY (`id`)
)

Skyz update 1

Ongeveer twee weken geleden heb ik de eerste Alpha versie van skyz gemaakt, en ik heb ondertussen al een hele boel verbeteringen gemaakt.

Meer kaarten

Voor Europa zijn er nu ook ook infra rood, regen en Sneeuwkaarten. In de toekomst gaan er ook nog kaarten voor de vs bijkomen.

Bewegende kaarten

Door deze kaarten kan je de evolutie zien van het weer.

In de toekomst ga ik nog kaarten voor Amerika toevoegen. En de zoekfunctie verbeteren.

Als er nog ideeën zijn, laat het me dan weten in de reacties.

Snelheid converter tutorial

Een paar posts geleden had ik een temperatuur convertor gemaakt, en nu heb ik een snelheid convertor gemaakt. Het principe is eigenlijk voor beide hetzelfde. Het zijn enkel de formules die verschillend zijn.

De basis

Eerst zul je een nieuw .html bestand moeten maken. Je kan deze bewerken in visual studio code of atom 

Eerst zullen we de basisstructuur van een html bestand moeten aanmaken. Hieronder staat een basis html document

<html>
    <head>
        <title>Snelheid convertor</title>
    </head>
    <body>

    </body>
</html>

Het script

Dan zul je tussen de </head> en de <body> tag een <script> tag moeten aanmaken. sluit deze af met </script> Daar gebeurt het omvormingswerk. Binnen de script tags kunnen we javascript gebruiken om de functies te maken. Ik ga voor deze tutorial een eenvoudige functie maken om kilometer per uur om te zetten in knopen. Hiervoor maak je best een functie. in dit geval gaat dit zo:

function temperatuurConvertorKphToKts(valNum) {

}

Waar valNum de waarde is die we gaan gebruiken voor de functie. Eerst moeten we er een decimaal getal van maken of een float. Dat kunnen we doen met parseFloat(valNum)

Dan is het eigenlijk enkel nog de formule die we moeten kennen. In dit geval is dat de snelheid in kph gedeeld door 1.852. En om deze waarde weer te geven in het html document gaan we document.getElementById("outputKnots").innerHTML = valNum / 1.852; gebruiken

function temperatuurConvertorKphToKts(valNum) {
  valNum = ParseFloat(valNum);
  document.getElementById("outputKnots").innerHTML = valNum / 1.852"
}

Deze stappen kun je herhalen voor andere conversies, waar je dus gewoon de formule moet aanpassen.

De invoer

Hiervoor gaan we een <input> tag gebruiken. plaats dit binnen de <body> tags:

<input id="inputKPH" type="number" placeholder="KPH" oninput="ConvertKPHToKnots(this.value)" onchange="ConvertKPHToKnots(this.value)">

de oninput en onchange argumenten zorgen dat de functie die we hierboven hebben aangeduid worden uitgevoerd vanaf er iets in ingevoerd, en vanaf het veranderd. Maar nu moeten we het resultaat nog weergeven. Dat kunnen we doen door simpelweg een <span> element met het id dat we hiervoor hebben gebruikt in het script, namelijk “outputKnots” namelijk zo:

<span id="outputKnots"></span>

Hier vind je voor de duidelijkheid de volledige code.

Skyz Weerapp

Hier ben ik al even aan bezig geweest, een weerapp genaamd Skyz. Er zijn nog veel dingen die moeten veranderd worden. Nu geeft het enkel een satalietkaart van de opgezochte plek. Maar ik ga er later nog functies aan toevoegen. Zoals weerkaarten, Voorspellingen en zo. Dus zie dit als een alpha versie.

Je kan het bekijken op https://skyz.vincentlammens.be/

Meme generator tutorial

Wil je eenvoudig je eigen memes maken volg dan deze tutorial

1. Maak de webpagina

Open een nieuw tekstdocument en sla het op als .html . De html code hieronder geeft je document de basisstructuur.

<html>
<head>
  <title>Cat meme generator</title>
</head>
<body>
  <h1>Het werkt!</h1>
</body>
</html>

Als je dit opent in een webbrowser zoals google chrome dan zou je “het werkt!” in het groot moeten zien

2. De foto en de tekst verkrijgen

Een meme bestaat meestal uit 2 onderdelen, een foto en tekst. Om deze te verzamelen gebruiken we een form.

In het form kun je Het volgende zetten:

<form>
Kies een foto: <input type="file" id="user_picture"><p>
Meme tekst: <input type="text" id="user_text" maxlength="70"><p>
</form>

3. De meme maken

We moeten een gebied maken waar de meme komt te staan waneer een afbeelding en tekst is opgegeven. De eerste voor de tekst, en de 2e voor de afbeelding. Hiervoor gebruiken we een <div> tag, deze zijn voor niet tekst elementen.

<div id="meme_text">Voorbeeldtekst</div>

En voeg er nu nog een aan toe voor de afbeelding, met een <img> tag erin.

<div id="meme_picture"><img src="" height="500" width="600"></div>

Sla op en open het document in een browser, nu zou je een wit kader moeten zien, met daarboven de “kies bestand” en “meme tekst” velden en dan “voorbeeldtekst”, maar zoals je ziet is die tekst nog niet het lettertype voor een meme

Tussen de <head> tags vanboven in je document zet daar

<style type="text/css">
</style>

Dat is om bepaalde elementen een uiterlijk te geven. Zet volgende code tussen de <style> en </style> tags om aanteduiden dat de code binnen deze tags css is. Deze zorgt dat het element met id ( aangeduid met een #) meme_text. Volgende specificaties krijgen

#meme_text {
    background-color: transparent;
    font-size: 40px;
    font-family: "Impact";
    color: white;
    text-shadow: black 0px 0px 10px;
    width: 600px;
    position: absolute;
    left: 15px;
    top: 400px;
}

de left: 15px; en top: 400px; elementen bepalen hoever de tekst van links en de bovenkant van de pagina is.

Vernieuw de pagina en je zult zien dat de voorbeeld tekst er nu beter uitziet.

3. De tekst weergeven

Tot nu hebben we de html code geschreven die zorgt hoe de pagina eruit ziet, nu moeten we zorgen dat de ingevoegde tekst word weergegeven dat gaan we doen met Javascript. Maak onder de <div> tags volgende code aan. Dat is om weer te geven dat de code binnen deze tags Javascript is.

<script type="text/javascript">
</script>

Binnen deze tags moeten we een eerste functie maken die zorgt dat de tekst word geupdate.

function update_text(){

}

Deze code zorgt ervoor dat alles tussen de { } haakjes word uitevoerd wanneer update_text(); word uitevoerd. Nu moeten we nog zorgen dat er werkelijk iets word uitgevoerd.

var user_text = document.getElementById("user_text");

Dit zorgt dat de variable user_text gelijk komt met de ingevoegde tekst

var meme_text = document.getElementById("memetext");
meme_text.innerHTML = user_text.value;

Dit zorgt ervoor dat  de tekst word weergegeven. Nu moet je het tekst invoegveld aanpassen door er oninput="update_text()" aan toe te voegen. Dat zorgt dat de functie word uitgevoerd zodra je er iets intypt, waardoor het ook direct aangepast word.

<p>meme tekst: <input type="text" id="user_text" maxlength="70" oninput="update_text()"><p>

Sla op en ververs de pagina. Nu zou je de tekst moeten zien veranderen zodra je er iets in begint te typen.

4. de afbeelding weergeven

Maak nu een nieuwe functie aan tussen de script tags genaamd update_image Net zoals in het vorige voorbeeld. In de functies, maak opnieuw twee variables

function update_image(){
  var img = document.querySelector('img');
  var file = document.querySelector('input[type=file]').files[0];
}

De eerste variable selecteert de eerste (en eenige) <img> tag. De tweede verwijst naar die afbeelding. Om te zorgen dat de afbeelding word weergegeven voeg volgende code toe aan de functie.

img.src = window.URL.createObjectURL(file);

Het totale script:

// Update image onto the screen
function update_image(){
    var img = document.querySelector('img'); // Returns the first img element
    var file = document.querySelector('input[type=file]').files[0]; // Returns the first file element found
    img.src =  window.URL.createObjectURL(file);

}

// Write the text onto the meme
function update_text(){
  var user_text = document.getElementById("user_text");
    var meme_text = document.getElementById("meme_text");
    meme_text.innerHTML = user_text.value;
}

Sla het nu op en herlaad de pagina. Nu zou alles moeten werken. en kan je memes maken.