abonnement Unibet Coolblue Bitvavo
  zondag 20 december 2015 @ 20:34:45 #201
230788 n8n
Pragmatisch
pi_158389596
quote:
5s.gif Op zondag 20 december 2015 20:26 schreef Swetsenegger het volgende:
Wat probeer je precies op te lossen dan?
ik wilde enkele quotes als key-name laten fungeren binnen de functie, en een dubbele quotes als string.

$value = ( 'string' ? $array['string'] : "string" ); kinda
Specialization is for insects”.—Robert Heinlein
  zondag 20 december 2015 @ 20:35:20 #202
230788 n8n
Pragmatisch
pi_158389616
quote:
7s.gif Op zondag 20 december 2015 20:29 schreef Aether het volgende:

[..]

Dat kun je niet achterhalen.
De functie die aangeroepen wordt krijgt "een" string binnen en weet niet hoe of waar deze vandaan komt (bijvoorbeeld uit een database of bestand).
Ja dacht ik al, net als dat je geen functie kan doorgeven maar alleen het resultaat. Helaas.
Specialization is for insects”.—Robert Heinlein
pi_158397080
quote:
7s.gif Op zondag 20 december 2015 20:35 schreef n8n het volgende:

[..]

Ja dacht ik al, net als dat je geen functie kan doorgeven maar alleen het resultaat. Helaas.
Niet helemaal waar, het is wel mogelijk om een functie door te geven aan een andere functie. Maar de manier waarop ziet er niet uit, en 't is geen mooie optie. Verder is er geen functie om te bepalen of een string als "string" of als 'string' gedefinieerd is. Er zit ook geen verschil in die definities, behalve bij het aanmaken van de string zelf.
  maandag 21 december 2015 @ 11:55:43 #204
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_158405576
Is er geen manier om daarvoor wat gewoonlijk een error zou zijn te gebruiken? Je invoerveld/script zodanig samenstellen met wat gewoonlijk een syntax-error zou geven, dat invoer met een " een bepaalde output geeft en invoer met een ' een andere.

Naïef voorbeeld dat allicht niet werkt om een idee te geven:
1
2
3
4
5
6
7
8
9
<script>
a = document.getElementById(id);
b = ' " ' + a + ' " ';
if (b) {
    //met enkele aanhalingstekens (want b = " ' value ' " --> geen error)
} else {
    // met dubbele aanhalingstekens (want b = " " value " " --> wel error)
}
</script>

It's not an error, it's a feature.
  maandag 21 december 2015 @ 12:11:53 #205
230788 n8n
Pragmatisch
pi_158405994
quote:
0s.gif Op maandag 21 december 2015 11:55 schreef Ser_Ciappelletto het volgende:
Is er geen manier om daarvoor wat gewoonlijk een error zou zijn te gebruiken? Je invoerveld/script zodanig samenstellen met wat gewoonlijk een syntax-error zou geven, dat invoer met een " een bepaalde output geeft en invoer met een ' een andere.

Naïef voorbeeld dat allicht niet werkt om een idee te geven:
[ code verwijderd ]

It's not an error, it's a feature.
dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.

En light idd, call_user_func() is niet echt ideaal in mijn use-case.
Specialization is for insects”.—Robert Heinlein
  maandag 21 december 2015 @ 12:13:41 #206
308438 Ser_Ciappelletto
Semi-professionele SJW
pi_158406034
quote:
1s.gif Op maandag 21 december 2015 12:11 schreef n8n het volgende:

[..]

dit is js lieverd (al ga ik deze functie later ook daarmee schrijven). Ik heb als 'hack' al geprobeerd een regex door te sturen maar ook dat moet als string. Ik zal zo even de functie neerplempen.
Ja, ik weet dat het JS is, maar zoals gezegd werkt dat niet met PHP omdat die strings niet opslaat met de eigen aanhalingstekens. Je kunt dat altijd ajax-en.

Ik weet in ieder geval dat ik het al vaak genoeg verneukt heb door input met de verkeerde aanhalingstekens te bewerken, dus ik dacht: je kunt daar wellicht gebruik van maken.
  maandag 21 december 2015 @ 13:13:19 #207
230788 n8n
Pragmatisch
pi_158407729
Laat het echte probleem wel ff zien met de functie. Het gaat voornamelijk om el(), de andere zijn helper functies. html() is om een lijst van element uit te poepen, attribute om een attribute te maken, en find() om waarden uit de optionele $item te vinden.

De PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
// create elements from array
function el(array $element null$item null){
    
    foreach (
$element as $key => $value){
        if (
$key === 0){ $tag $value; } // set tag
        
elseif (is_numeric($key)){ // text content and/or html element
            
if (gettype($value) === 'string' || is_numeric($value)) $content.= $value;
            else 
$content.= el($value$data);
        }
        else 
$attributes.= attribute($key$value$item); // element attributes
    
}
    
    
// create html element and set attributes if any
    
if (!$attributes$result.= '<'.$tag.'>';
    else 
$result.= '<'.$tag.' '.trim($attributes).'>';    
    
    
// add contents if any and close element    
    
if ($content$result.= $content.'</'.$tag.'>';    
    return 
$result;    
}

// create element list from $data
function html(array $element, array $data null){

    if (!
$data$result.= el($element);    
    else foreach(
$data as $item){
        
$result.= el($element$item);
    }
    return 
$result;
}

// create element attribute
function attribute($name$value$item null){    
    if (
$value === true) return ' '.$name;    
    if (
gettype($value) === 'array'$value find($value$item);    
    if (
gettype($value) === 'string' || is_numeric($value)) {
        
$quote = (preg_match('/^\w+$/'$value) ? null '"');
        return 
' '.$name.'='.$quote.$value.$quote;
    }                        
}

// check for key in element $item array
function find($keys, array $item null){
    if (
$item && $match $item[$keys[0]]) return $match;
    elseif (
$item$keys[0] = null;
        
    foreach(
$keys as $key => $value){
        if (
$value) return $value;
    }
}
?>

De templating werkt met de data uit arrays.

Dit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// <header class=test><h1>Title</h1></header>
echo el(['header''class'=>'test',
    [
'h1'"Title"]
]);


// <p>Text</p>
echo el(['p'"Text"]);

// data for the next template
$pages = [
    [
'path'=>"one"'name'=>"Page One",'title'=>"A page" ],
    [
'path'=>"two"'name'=>"Page Two"'alt'=>"Another page" ]
];

// <ul><li><a href=one title="A Page">test</a><a href=two title="Another Page">test</a></li></ul>
echo el(['ul'html(['li',
    [
'a''href'=>['path'], 'title'=>['title'], "test" ]
], 
$pages)]);
?>

Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.

Sorry voor de enorme lap code

edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.

[ Bericht 0% gewijzigd door n8n op 21-12-2015 16:31:09 ]
Specialization is for insects”.—Robert Heinlein
pi_158552849
quote:
7s.gif Op maandag 21 december 2015 13:13 schreef n8n het volgende:
Laat het echte probleem wel ff zien met de functie. Het gaat voornamelijk om el(), de andere zijn helper functies. html() is om een lijst van element uit te poepen, attribute om een attribute te maken, en find() om waarden uit de optionele $item te vinden.

De PHP
[ code verwijderd ]

De templating werkt met de data uit arrays.

Dit:
[ code verwijderd ]

Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.

Sorry voor de enorme lap code

edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.

Dus in plaats van
1
2
3
4
5
<?php
function el(array $element null$item null){

    foreach (
$element as $key => $value){
?>
zou ik kiezen voor
1
2
3
4
5
<?php
function el(array $element = array(), $item null){

    foreach (
$element as $key => $value){
?>
of voor
1
2
3
4
5
<?php
function el(array $element$item null){

    foreach (
$element as $key => $value){
?>

Verder is het niet duidelijk wat $item voor type moet/mag zijn.

En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd. En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn. Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.

Goed, nu eens kijken naar het probleem ;)
pi_158553692
quote:
7s.gif Op maandag 21 december 2015 13:13 schreef n8n het volgende:

Dit:
[ code verwijderd ]

Wat ik wil is waar in de laatste plaats "test" staat, er ook een key van $pages ingevuld kan worden.

Sorry voor de enorme lap code

edit: simpelere voorbeelden, door te nesten kan je een hele DOM opbouwen.
Je genereert invalid html, al bij het eerste voorbeeld.
1
2
3
4
5
6
<?php
// <header class=test><h1>Title</h1></header>
echo el(['header''class'=>'test',
    [
'h1'"Title"]
]);
?>

Bij valid html moeten attribute properties altijd in double quotes staan, dus wordt het
1<header class="test"><h1>Title</h1></header>

Ben je bekend met DOMDocument? Het kan handig zijn om dat te gebruiken, dat scheelt in ieder geval iets met rare dingen in html waar je rekening mee moet houden.
  zaterdag 26 december 2015 @ 23:52:54 #210
230788 n8n
Pragmatisch
pi_158555026
Bij enkele woorden zonder speciale karakters kan je de quotes weglaten maar dat is een implementatie-detail. Ga domdocument bekijken.

Zag gister dat m'n script op mithril (JS tempalting lijkt), geinig.
Specialization is for insects”.—Robert Heinlein
  zaterdag 26 december 2015 @ 23:57:29 #211
230788 n8n
Pragmatisch
pi_158555189
quote:
0s.gif Op zaterdag 26 december 2015 22:54 schreef Light het volgende:

[..]

Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.

Dus in plaats van
[ code verwijderd ]

zou ik kiezen voor
[ code verwijderd ]

of voor
[ code verwijderd ]

Verder is het niet duidelijk wat $item voor type moet/mag zijn.

En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd. En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn. Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.

Goed, nu eens kijken naar het probleem ;)
ah dit is leerzaam, ga morgen even goed reageren.
Specialization is for insects”.—Robert Heinlein
pi_158556294
quote:
14s.gif Op zaterdag 26 december 2015 23:52 schreef n8n het volgende:
Bij enkele woorden zonder speciale karakters kan je de quotes weglaten maar dat is een implementatie-detail.
Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken. :)
  zondag 27 december 2015 @ 15:20:00 #213
230788 n8n
Pragmatisch
pi_158569470
quote:
0s.gif Op zondag 27 december 2015 00:26 schreef Light het volgende:

[..]

Altijd quotes gebruiken is makkelijker, dat scheelt ook in de code omdat je niet hoeft te bepalen of je ze wel of niet moet gebruiken. :)
Ja klopt, ik dacht als ik toch minified html uitpoep kan ik net zo goed quotes weglaten wanneer deze ‘obsolete’ zijn. Ik denk er nog even over na (het is ook maar 1 regel dus zo gewijzigd).

quote:
0s.gif Op zaterdag 26 december 2015 22:54 schreef Light het volgende:

[..]

Het eerste dat me bij die code opvalt is dat de functie el() 2 optionele argumenten heeft, waarbij de eerste een array moet zijn als je 'm opgeeft en anders gewoon null is. Vervolgens gebruik je die parameter alsof het altijd een array is, dat gaat vroeg of laat fout.

Dus in plaats van
[ code verwijderd ]

zou ik kiezen voor
[ code verwijderd ]

of voor
[ code verwijderd ]

Ik ben voor de tweede gegaan, een lege array is niet de bedoeling.

quote:
Verder is het niet duidelijk wat $item voor type moet/mag zijn.
Dat moet ook een array zijn, bij html() kan daar een array met $item's in om een nodelist te renderen, in el() is $item een data rij met named keys waar content in zit. Dit is waar het hele probleem om draait, want het lukt niet om onderscheid te maken tussen een html ‘nodelist’ array of de naam van een key in $item.
quote:
En de functies attribute() en find() hebben niet altijd een return statement. Afhankelijk van wat er aan parameters in gaat, wordt er iets of niets geretourneerd.
Klopt, dat is nu een silent error omdat ik niet wilde dat wanneer niks gevonden werd er een error kwam, maar een element simpelweg leeg zou zijn. Ik zal een return null toevoegen.
quote:
En je gebruikt op verschillende plekken variabelen die niet eerst geïnitialiseerd zijn.
Hoe bedoel je?
quote:
Niet direct fout, maar wel een potentieel risico. Een tikfout in een variabelenaam kan tot ongewenst of onverklaarbaar gedrag leiden, dus wil je bij voorkeur geen enkele notice zien.

Goed, nu eens kijken naar het probleem ;)
Ik ga de eerste batch fixes vast patchen. dankjewel!
Specialization is for insects”.—Robert Heinlein
pi_158571131
quote:
7s.gif Op zondag 27 december 2015 15:20 schreef n8n het volgende:

[..]

Hoe bedoel je?

[..]

Ik ga de eerste batch fixes vast patchen. dankjewel!
Als voorbeeld de foreach loop in de el() functie.
1
2
3
4
5
6
7
8
9
10
<?php
    
foreach ($element as $key => $value){
        if (
$key === 0){ $tag $value; } // set tag
        
elseif (is_numeric($key)){ // text content and/or html element
            
if (gettype($value) === 'string' || is_numeric($value)) $content.= $value;
            else 
$content.= el($value$data);
        }
        else 
$attributes.= attribute($key$value$item); // element attributes
    
}
?>

Je gebruikt daar
1
2
3
<?php
$content 
.= $value;
?>
maar zeker bij de eerste loop bestaat $content nog helemaal niet. Dat kun je voorkomen door voor de loop, dus aan het begin van de functie, $content = ''; te zetten en zo te zorgen dat $content bestaat (en als inhoud een lege string heeft, ook logisch bij string concatenation). Voor $attributes geldt hetzelfde.

En waar $data vandaan komt in "else $content.= el($value, $data);" weet ik niet, maar die heeft ook geen waarde.

Verder kun je
1
2
3
4
<?php
    
if (!$attributes$result.= '<'.$tag.'>';
    else 
$result.= '<'.$tag.' '.trim($attributes).'>';
?>
vervangen door
1
2
3
4
<?php
    
if (!$attributes$result '<'.$tag.'>';
    else 
$result '<'.$tag.' '.trim($attributes).'>';
?>
waarbij je dus geen string concatenation meer gebruikt maar de variabele $result hier gewoon een waarde krijgt.
  zondag 27 december 2015 @ 18:51:13 #215
230788 n8n
Pragmatisch
pi_158576066
Zal dat nog even aanpassen, die concatenation was nog legacy van een probeersel, scherp.
Specialization is for insects”.—Robert Heinlein
pi_158576461
quote:
14s.gif Op zondag 27 december 2015 18:51 schreef n8n het volgende:
Zal dat nog even aanpassen, die concatenation was nog legacy van een probeersel, scherp.
Een IDE die zulke dingen aangeeft, helpt ook. ;)
  zondag 27 december 2015 @ 19:58:27 #217
230788 n8n
Pragmatisch
pi_158577974
quote:
1s.gif Op zondag 27 december 2015 19:07 schreef Light het volgende:

[..]

Een IDE die zulke dingen aangeeft, helpt ook. ;)
Light.app :@ bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.

[ Bericht 5% gewijzigd door n8n op 28-12-2015 13:18:19 ]
Specialization is for insects”.—Robert Heinlein
  dinsdag 29 december 2015 @ 22:01:44 #218
37634 wobbel
Da WoBBeL King
pi_158651842
Help, klopt dit zo? Het testen duurt iets te lang :P Script draait elke minuut via crontab :)

Het script moet de GPIO op 1 zetten als de zon is ondergegaan en de GPIO nog geen 1 is.
Het script moet ook de GPIO op 0 zetten als de zon is opgekomen en dit nog niet gebeurd is.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
$bcm_pin                            
4;

$huidige_tijd                        date "U" );
$opkomst                            date_sunrise time ( ), SUNFUNCS_RET_TIMESTAMP );
$ondergang                            date_sunset time ( ), SUNFUNCS_RET_TIMESTAMP );

if ( 
$huidige_tijd $opkomst AND $huidige_tijd $ondergang )
{
    
    
system                            ("gpio -g mode " $bcm_pin " out");
    
$huidig                            exec ("gpio -g read " $bcm_pin );
    
    if ( 
$huidig == "1" )
    {
    
        
system                        ("gpio -g write " $bcm_pin " 0" );
        
        echo                        
"Zon opgekomen en status nog 1, op 0 gezet :-)";
        
    }
    else
    {
        
        echo                        
"Het is licht en de lamp is al uit";    
        
    }
    
}
else
{

    
system                            ("gpio -g mode " $bcm_pin " out");
    
$huidig                            exec ("gpio -g read " $bcm_pin );
    
    if ( 
$huidig == "0" )
    {
    
        
system                        ("gpio -g write " $bcm_pin " 1" );
        
        echo                        
"Zon ondergegaan en status nog 0, op 1 gezet :-)";
        
    }
    else
    {
        
        echo                        
"Het is donker maar de lamp is al aan";    
        
    }
    
}
?>
pi_158652450
quote:
17s.gif Op zondag 27 december 2015 19:58 schreef n8n het volgende:

[..]

Light.app :@ bedankt voor je feedback, een IDE is nog even een brug te ver, schrijf meestal JS.
Ook daarvoor is een IDE geen overkill hoor, zeker als je ook nog wat frameworks oid gebruikt. Kijk bijvoorbeeld eens naar Webstorm:
https://www.jetbrains.com/webstorm/
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_158667753
quote:
0s.gif Op dinsdag 29 december 2015 22:01 schreef wobbel het volgende:
Help, klopt dit zo? Het testen duurt iets te lang :P Script draait elke minuut via crontab :)

Het script moet de GPIO op 1 zetten als de zon is ondergegaan en de GPIO nog geen 1 is.
Het script moet ook de GPIO op 0 zetten als de zon is opgekomen en dit nog niet gebeurd is.
[ code verwijderd ]

Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.
  woensdag 30 december 2015 @ 18:55:22 #221
37634 wobbel
Da WoBBeL King
pi_158682115
quote:
0s.gif Op woensdag 30 december 2015 12:26 schreef Light het volgende:

[..]

Lijkt leuk (afgezien van de overvloed aan spaties) maar ik zou 't script niet afhankelijk maken van de standaardwaarden voor lengte- en breedtegraad. Die zijn bij een standaardinstallatie niet eens in de buurt van je huidige locatie.
Ja wel, het is een raspberry in m'n meterkast waar ik de timezone (en lat/long) netjes heb ingevuld :)
pi_159008554
There Will Be Many Features Coming For PHP 7.1
PHP 7 was just released over one month ago but there is already much work going into PHP 7.1, the next major update to this widely-used web programming language.

PHP 7.0 is most notable for the huge performance improvements compared to PHP5 and some new language features. With PHP 7.1, there are more features coming for when it's released later this year.

For some weekend reading, I was poking around for a look at some PHP 7.1 features already committed as well as some other likely material.

The tentative news items for work already found in PHP Git includes:

• PHP 7.1 adds support for a void return type.
• SHA3 fixed mode algorithms were added.
• The bundled SQLite library is updated against 3.9.2 rather than 3.8.
• Various bug fixes and other minor improvements.

Other items being planned and/or talked about for PHP 7.1 include:

• PHP Cryptography Objects (PCO) for better encryption/decryption/signing.
Short closures.
Generic types and functions.
• HTTP/2 and server push support.

Other proposals for future releases of PHP (not necessarily PHP 7.1) can be found via the RFC Wiki area. Stay tuned for more coverage of PHP 7.1 as its release approaches later in the year.
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  maandag 18 januari 2016 @ 18:27:45 #223
272287 henrivo
Tikt tegen jassies
pi_159207065
Hoi! Zomaar even een vraagje, puur uit interesse;
Zelf gebruik ik tijdens het programmeren engelse variabelennamen en nederlands commentaar. Welke taal geef jij zelf de voorkeur en waarom? :)
  maandag 18 januari 2016 @ 18:47:27 #224
12221 Tijn
Powered by MS Paint
pi_159207571
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
pi_159207639
quote:
3s.gif Op maandag 18 januari 2016 18:47 schreef Tijn het volgende:
Alles Engels, want je wet nooit met wie je je code later nog wil delen.
Dat was ik inderdaad ook altijd gewend en bovendien werkte ik bij voorgaande werkgevers ook vaak met mensen die de Nederlandse taal niet beheersten. Bij mijn huidige werkgever is het vrij irritant dat de helft van de domeinspecifieke terminologie in het Nederlands is en dat in veel projecten ook in de code is doorgevoerd.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')