Waarom zet je dan die ; op de 2e regel?
Ik hoop dat je dit niet serieus meent, dat dit stoer is. Goeie programmeurs kijken met schaamte terug op dat soort bagger.
https://niels.nu
Onder het motto "why should code be commented? It was hard to write, so it should be hard to understand"
.
^^ Met Hydra.
Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.
Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"
*zucht* mode...
Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.
Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"
*zucht* mode...
Computer Science: describing our world with boxes and arrows.
Eentje van mij 
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds

Java:
1
| return someObject == null ? null : someObject; |
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
[ Voor 0% gewijzigd door Kwistnix op 19-06-2007 10:31 . Reden: Gruwelijke schaamte... ]
Oeioei.FallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij
Java:
1 return someObject == null : null ? someObject;
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
Dat merk je wel vaker bij voorbeelden op dit forum en ook in de praktijk, dat je na een verandering niet de rest van je code aanpast en dan rare dingen te zien krijgt...
Fat Pizza's pizza, they are big and they are cheezy
Jammer alleen dat dit een syntax error oplevertFallenAngel666 schreef op dinsdag 19 juni 2007 @ 09:18:
Eentje van mij
Java:
1 return someObject == null : null ? someObject;
Ooit werd er van someObject een defensive copy gemaakt met someObject.clone(), maar dat is gerefactored. De conditional stond er echter nog steeds
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Lol, idd. : en ? moeten omgedraaid worden..oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]
Jammer alleen dat dit een syntax error oplevert
@.oisyn: Scherp gespot hoor.
Fat Pizza's pizza, they are big and they are cheezy
SLECHT!.oisyn schreef op dinsdag 19 juni 2007 @ 10:27:
[...]
Jammer alleen dat dit een syntax error oplevert
Meer koffie

Scherp hoor
[ Voor 4% gewijzigd door Kwistnix op 19-06-2007 10:33 ]
Hmm, mag slechte codevoorbeelden ook?
In de topicwaarschuwing is de <a> niet afgesloten waardoor de tekst 'Quick Reply' klikbaar is, evenals alles eronder...
In de topicwaarschuwing is de <a> niet afgesloten waardoor de tekst 'Quick Reply' klikbaar is, evenals alles eronder...
We are shaping the future
Lol, sterker nog, hij wordt afgesloten met een </html>

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Fixed
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Au, dat is helemaal pijnlijk.oisyn schreef op dinsdag 19 juni 2007 @ 18:03:
Lol, sterker nog, hij wordt afgesloten met een </html>
We are shaping the future
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen...

Anoniem: 13701
Kwam in de code van CMS Made Simple dit tegen:
Het eerste wat ik dacht was, goh, dit is eigenlijk ook zinloos. De enige reden die ik kan verzinnen dat je zoiets wilt doen is dat je niet weet hoe je in dit geval menumanager hebt gespeld (met kleine of hoofdletters). Een beetje secuur werken zou volgens mij beter zijn...
PHP:
26
27
28
29
30
31
32
33
34
35
36
37
38
| $modulename = 'menumanager'; $inline = false; foreach ($cmsmodules as $key=>$value) { if (strtolower($modulename) == strtolower($key)) { $modulename = $key; } } if (isset($modulename)) { |
Het eerste wat ik dacht was, goh, dit is eigenlijk ook zinloos. De enige reden die ik kan verzinnen dat je zoiets wilt doen is dat je niet weet hoe je in dit geval menumanager hebt gespeld (met kleine of hoofdletters). Een beetje secuur werken zou volgens mij beter zijn...
Eentje van mezelf:
Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load...
Terwijl de app zelf nog wel reageerde.
Ik vergeet ook vaak de break; in de switch:
Met als gevolg dat als WhatEver==OPTION1, dat dan alle andere cases ook uit worden gevoerd.
Soms wil je dat, maar ik wil dat meestal niet.
C++:
1
2
3
4
5
| Query->Open(); while (!Query->Eof) { // doe dingen, lees velden en vul variabelen... // en vooral: -geen- Query->Next(); neerzetten op deze plek } |
Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load...
Terwijl de app zelf nog wel reageerde.
Ik vergeet ook vaak de break; in de switch:
C++:
1
2
3
4
5
6
7
8
9
10
11
| switch (WhatEver) { case OPTION1: { // do dingen1 } case OPTION2: { // do dingen2 } default: { throw Exception("This option does not exist. Call remco_k"); } } |
Met als gevolg dat als WhatEver==OPTION1, dat dan alle andere cases ook uit worden gevoerd.
Soms wil je dat, maar ik wil dat meestal niet.
[ Voor 49% gewijzigd door remco_k op 22-06-2007 09:12 ]
Alles kan stuk.
Dus dat was het...MBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen...
http://hawvie.deviantart.com/
Gezien Query vermoedelijk een TDataSet is uit BCB:remco_k schreef op vrijdag 22 juni 2007 @ 09:08:
Eentje van mezelf:
C++:
1 2 3 4 5 Query->Open(); while (!Query->Eof) { // doe dingen, lees velden en vul variabelen... // en vooral: -geen- Query->Next(); neerzetten op deze plek }
Code was threaded, dus ik maar denken... Vanwaar die 100% cpu load...
Terwijl de app zelf nog wel reageerde.
C++:
1
2
3
4
| for (Query->First ();!Query->Eof; Query->Next ()) { // ... } |
veel veiliger om zo'n fouten niet tegen te komen
Ik ben zoeken naar de variabele $c_color_tcolor1 want die is niet
defined... Zoeken zoeken zoeken.. kom ik deze constructie tegen. Bah!
De constructie is niet 'fout'.. als je hem in een local scope zou gebruiken
Maar hij werd als een 'global' gebruikt
talking about mystery variables!
defined... Zoeken zoeken zoeken.. kom ik deze constructie tegen. Bah!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| /* De Kleur variabele zijn automatisch gelinkt aan de kolomnaam */ $query = ("SELECT * FROM config_vormgeving WHERE site_id = '$siteID'"); $result = pg_query($query) ; while($row = pg_fetch_array($result)) { foreach ($row as $columnName => $value) { if(!is_numeric($columnName) AND !is_float($columnName)) { $$columnName = $value; } } } |
De constructie is niet 'fout'.. als je hem in een local scope zou gebruiken
Maar hij werd als een 'global' gebruikt

Lets remove all security labels and let the problem of stupidity solve itself
Da's nog niet leuk. Weet je wat leuker is: een project, van pak-em-beet 100.000 regels PHP-code, die her en der wat globals definieert. Waarbij de require/include-boom dus 5 lagen diep doorlopen moet worden om erachter te komen waar hij vandaan komt. Meestal in /include/common.inc.php, anders in /include/header.inc.php, als hij daar niet staat in dirname(__FILE__)/header.php, en als hij daar niet staat: good luck fishing!
Ik heb dus een bash-script phpgrep:
Die gebruik ik echt veel te vaak. Hoofdreden voor het script: ik vergat steeds de * erachter te zetten
Ook zoiets leuks: sendMessage(...). Zonder eclipse is daar niet doorheen te komen: uiteindelijk werd hij pas na 8 function calls verzonden!
$ phpgrep \$variabele.* = # wordt: $ grep -ir --include=*.php "\$variabele.* =" *
Die gebruik ik echt veel te vaak. Hoofdreden voor het script: ik vergat steeds de * erachter te zetten
Ook zoiets leuks: sendMessage(...). Zonder eclipse is daar niet doorheen te komen: uiteindelijk werd hij pas na 8 function calls verzonden!
[ Voor 17% gewijzigd door MBV op 22-06-2007 11:24 ]
MBV, wat je zou kunnen proberen in zo'n geval is een conditional breakpoint toevoegen op die global. Dan kan je zo zien waar hij gedefiniëerd wordt. 
Zelf kwam ik laatst een stuk code tegen waarin je 3x door hetzelfde lijstje liep en niets deed. :x
Zelf kwam ik laatst een stuk code tegen waarin je 3x door hetzelfde lijstje liep en niets deed. :x
C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8
Tja, aangezien we over een paar weken PHP eruit gooien om in .NET te gaan programmeren, heb ik weinig zin om de debugger in eclipse aan de praat te krijgen. die() werkt prima als debugger 
Het zou trouwens wel leuk zijn als ik de definitie van een variabele ook kon opzoeken met Eclipse PDT. Of de plekken waar een functie wordt aangeroepen. Maar voor dat soort dingen ben ik toch nog aangewezen op grep...
Het zou trouwens wel leuk zijn als ik de definitie van een variabele ook kon opzoeken met Eclipse PDT. Of de plekken waar een functie wordt aangeroepen. Maar voor dat soort dingen ben ik toch nog aangewezen op grep...
Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topicMBV schreef op dinsdag 19 juni 2007 @ 20:49:
Oh, vandaar. Ik heb me al diverse keren afgevraagd waarom in een bepaald topic 'verstuur bericht' me naar pagina 33 stuurde. Dat komt dus gewoon omdat de modjes geen HTML kennen...
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Deze?Creepy schreef op vrijdag 22 juni 2007 @ 13:43:
[...]
Geen idee of je weet wat er gebeurd als modjes met HTML gaan spelen in posts en topics? In de HK is er vast nog wel een topic te vinden. Veel ranziger qua HTML gaat het niet worden (en dan past het weer prima in dit topic).
Disclaimer: ik ben niet verantwoordelijk voor eventueel vastlopende browsers
Niet een code fuckup, maar een taal fuckup. VB(A).
Deze regel heb ik zojuist getypt. Ik snap nou echt niet wat in welke situatie geldt. In een échte taal heb je gewoon null, en basta.
* kenneth gromt nog wat na
Visual Basic:
1
| If IsMissing(conn) Or (conn Is Nothing) Or IsEmpty(conn) Or IsNull(conn) Then |
Deze regel heb ik zojuist getypt. Ik snap nou echt niet wat in welke situatie geldt. In een échte taal heb je gewoon null, en basta.
* kenneth gromt nog wat na
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 49627
Sterk inderdaad, ik zou alleen voor isEmpty zo op het eerste gezicht een afwijkende invulling kunnen geven (lege arrays/strings). De rest kan inderdaad allemaal hetzelfde betekenen.kenneth schreef op donderdag 12 juli 2007 @ 11:32:
Niet een code fuckup, maar een taal fuckup. VB(A).
of IsBogus() in het kort
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Als conn geen object/Nothing is dan krijg je wel een mooie error. En wat is IsMissing nu weer dan?
the less one forgets, the less one remembers
Iets waarmee je kan controleren of een optionele parameter in een Function/Sub is meegegeven. Niet dat het werkt, trouwens.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Oh weer wat geleerd
Het werkt trouwens alleen bij het type Variant, lekker handig...
for the record:
IsMissing(x) om te testen of een parameter mist (van het type Variant)
IsEmpty(x) om te testen of een variabele leeg is (null/nothing is niet leeg!)
(x Is Nothing) om te testen of een variable Nothing is (moet dus een object óf Nothing zijn)
IsNull(x) om te testen of een variabele null is
for the record:
IsMissing(x) om te testen of een parameter mist (van het type Variant)
IsEmpty(x) om te testen of een variabele leeg is (null/nothing is niet leeg!)
(x Is Nothing) om te testen of een variable Nothing is (moet dus een object óf Nothing zijn)
IsNull(x) om te testen of een variabele null is
[ Voor 64% gewijzigd door abeker op 12-07-2007 14:19 ]
the less one forgets, the less one remembers
Wat is het verschil tussen nothing en null?
http://hawvie.deviantart.com/
Ik heb zojuist dit gemaakt:
Doel: Maak van elke eerste letter van een woord een hoofdletter in strvalue.
Bij gebrek aan tijd en aan een fatsoenlijke functie in sybase (vergelijkbaar met ucwords in PHP) dit maar gemaakt...
Ach, het werkt. Echt trots ben ik er niet op. (wel op mijn vindingrijkheid om REPLACE te gebruiken...)
code:
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
| update tabelnaam set strvalue=upper(left(strvalue,1))+lower(right(strvalue,length(strvalue)-1)); update tabelnaam set strvalue=REPLACE(strvalue, ' a',' A'); update tabelnaam set strvalue=REPLACE(strvalue, ' b',' B'); update tabelnaam set strvalue=REPLACE(strvalue, ' c',' C'); update tabelnaam set strvalue=REPLACE(strvalue, ' d',' D'); update tabelnaam set strvalue=REPLACE(strvalue, ' e',' E'); update tabelnaam set strvalue=REPLACE(strvalue, ' f',' F'); update tabelnaam set strvalue=REPLACE(strvalue, ' g',' G'); update tabelnaam set strvalue=REPLACE(strvalue, ' h',' H'); update tabelnaam set strvalue=REPLACE(strvalue, ' i',' I'); update tabelnaam set strvalue=REPLACE(strvalue, ' j',' J'); update tabelnaam set strvalue=REPLACE(strvalue, ' k',' K'); update tabelnaam set strvalue=REPLACE(strvalue, ' l',' L'); update tabelnaam set strvalue=REPLACE(strvalue, ' m',' M'); update tabelnaam set strvalue=REPLACE(strvalue, ' n',' N'); update tabelnaam set strvalue=REPLACE(strvalue, ' o',' O'); update tabelnaam set strvalue=REPLACE(strvalue, ' p',' P'); update tabelnaam set strvalue=REPLACE(strvalue, ' q',' Q'); update tabelnaam set strvalue=REPLACE(strvalue, ' r',' R'); update tabelnaam set strvalue=REPLACE(strvalue, ' s',' S'); update tabelnaam set strvalue=REPLACE(strvalue, ' t',' T'); update tabelnaam set strvalue=REPLACE(strvalue, ' u',' U'); update tabelnaam set strvalue=REPLACE(strvalue, ' v',' V'); update tabelnaam set strvalue=REPLACE(strvalue, ' w',' W'); update tabelnaam set strvalue=REPLACE(strvalue, ' x',' X'); update tabelnaam set strvalue=REPLACE(strvalue, ' y',' Y'); update tabelnaam set strvalue=REPLACE(strvalue, ' z',' Z'); |

Doel: Maak van elke eerste letter van een woord een hoofdletter in strvalue.
Bij gebrek aan tijd en aan een fatsoenlijke functie in sybase (vergelijkbaar met ucwords in PHP) dit maar gemaakt...
Ach, het werkt. Echt trots ben ik er niet op. (wel op mijn vindingrijkheid om REPLACE te gebruiken...)
Alles kan stuk.
2 regeltjes code, zelfde functie, maar die mij allebij nogal fout lijken (2 de ongetest)
Volgens mij hoor je dit met een reguliere expressie op te lossen, maar daar heb ik geen kaas van gegeten
code:
1
| if( $accountfolder[ strlen( $accountfolder ) - 1 ] != '/') $accountfolder .= '/'; |
code:
1
| $folder = implode( '/' , explode( '/' , $accountfolder )) . '/'; |
Volgens mij hoor je dit met een reguliere expressie op te lossen, maar daar heb ik geen kaas van gegeten
[ Voor 16% gewijzigd door g4wx3 op 12-07-2007 17:42 ]
Anoniem: 84120
Waarom voor zoiets simpels (je wil een '/' achteraan hebben?) een regex gebruiken? Dat is nodeloos ingewikkeld, en waarschijnlijk ook een heel stuk trager.
*noot: Bovenste heeft eigenlijk mijn voorkeur, alhoewel je hem wat ruimer (as in, enters) of minder ruim (as in, spaties) had kunnen schrijven, kan hem nu moeilijk in een blik overzien.
*noot: Bovenste heeft eigenlijk mijn voorkeur, alhoewel je hem wat ruimer (as in, enters) of minder ruim (as in, spaties) had kunnen schrijven, kan hem nu moeilijk in een blik overzien.
[ Voor 54% gewijzigd door Anoniem: 84120 op 12-07-2007 17:50 ]
Op de overdosis spaties na, lijkt de eerste regel me prima.
Wat de tweede regel probeert te bereiken is me niet helemaal duidelijk... Misschien expliciete conversie naar string forceren? (Wel een beetje rare manier om dat te doen dan.)
Wat de tweede regel probeert te bereiken is me niet helemaal duidelijk... Misschien expliciete conversie naar string forceren? (Wel een beetje rare manier om dat te doen dan.)
Die tweede gaat helaas fout, omdat explode('/', 'asdf/') een array teruggeeft met twee elementen (eentje 'asdf', en een leeg element) in plaats van één.
Ik zou het zelf trouwens zo aanpakken: if(substr($accountfolder, -1) != '/') $accountfolder .= '/';
Ik zou het zelf trouwens zo aanpakken: if(substr($accountfolder, -1) != '/') $accountfolder .= '/';
Of:
't Is niet helemaal equivalent omdat een string die eindigt op '//' wordt omgezet naar een einde met een enkele slash. Als je met paden werkt is dat echter juist ook gewenst gedrag.
PHP:
1
| $accountfolder = rtrim($accountfolder,'/') .'/'; |
't Is niet helemaal equivalent omdat een string die eindigt op '//' wordt omgezet naar een einde met een enkele slash. Als je met paden werkt is dat echter juist ook gewenst gedrag.
Regeren is vooruitschuiven
HAHA, ben net een beetje mijn eigen code aan het checken, na 2 minuten zie ik dit al staan(PHP):
voor duidelijkheid het gaat over de 4 verschillend if-js, mja heb geen zin het te herschrijven
edit
toch maar even geven hoe het dan wel moet:
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
| <?php if( $sfile == 'accountmanager' ) include( 'web/accountmanager.php'); if( $sfile == 'setlichtkrant' ) include( 'web/setlichtkrant.php'); if( $sfile == 'setinstellingen' ) include( 'web/setinstellingen.php'); if( $sfile == 'logon' ) { ?> <form method="POST" action="index.php?q=admin" id="logon"> <img src="img/keys.gif" alt="keys" id="keys"> <ul> <li><dl><dt><label for="user">Gebruiker:</label></dt><dd><input type="text" name="user" id="user" value="uniz0"></dd></dl></li> <li><dl><dt><label for="password">Paswoord:</label></dt><dd><input type="password" name="password" id="password" value="huub2007"></dd></dl></li> <li><br><button type="submit" name="login" value="login"><img src="img/goed.gif" alt="login"> Aanmelden</button></li> </ul> <div style="clear:both"></div> </form> <?php } ?> |
voor duidelijkheid het gaat over de 4 verschillend if-js, mja heb geen zin het te herschrijven
edit
toch maar even geven hoe het dan wel moet:
PHP:
1
2
3
4
5
| if ( $sfile=='logon') { } else include ( 'web/' . $sfile . '.php'); |
[ Voor 6% gewijzigd door g4wx3 op 13-07-2007 09:33 ]
Is $sfile een betrouwbare variabele (dus niet $sfile = $_REQUEST['sfile'];) ?
Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
We are shaping the future
Tijdje geleden kwam ik zoiets tegen, ik weet niet meer waar, ook niet meer precies, maar wel lekker dom:
Edit: Voordat iedereen denkt dat $string[$i] alleen voor arrays is, dat is er niet fout. Zoiets kun je ook voor strings gebruiken (gelijkend met substring, $string[0] is hetzelfde als substr($string, 0, 1);).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php $search = 'b'; $string = 'haha blaat'; $do = true; for ($i = 0, $size = strlen($string); $i < $size; $i++) { if ($do) { if ($string[$i] == $search) { $do = false; echo 'Gevonden'; } } } |
Edit: Voordat iedereen denkt dat $string[$i] alleen voor arrays is, dat is er niet fout. Zoiets kun je ook voor strings gebruiken (gelijkend met substring, $string[0] is hetzelfde als substr($string, 0, 1);).
[ Voor 22% gewijzigd door kokx op 13-07-2007 10:00 ]
sfile= $_GET['s'] komt dus recht uit de url van heet beheergedeelte, dus inderdaad checken.Alex) schreef op vrijdag 13 juli 2007 @ 09:37:
Is $sfile een betrouwbare variabele (dus niet $sfile = $_REQUEST['sfile'];) ?
Als hij niet betrouwbaar is moet je het nooit zo doen, eerst error-checken lijkt me...
Hoe? zie hier de merkwaardige manier, wel veilig
code:
1
2
3
4
5
6
7
8
9
10
11
12
| $sfile = 'logon'; if ( isset( $_SESSION['user'] ) ) //doorverwijzen bij ingelogd { $sfile = 'accountmanager'; if ( isset( $_GET['s'] ) ) { if ( $_GET['s'] == 'setlichtkrant' ) $sfile = 'setlichtkrant'; if ( $_GET['s'] == 'setinstellingen' ) $sfile = 'setinstellingen'; } } |
kan naruurlijk beter door $sfile = $_GET['s'] te doen ipv hardcoded
edit
er was ook een functie "is_in_array()", dan kun je zoiets zo schrijven:
PHP:
1
2
| if ( is_in_array( array( 'setinstellingen', 'setlichtkrant' ) , striptags( $_POST['s'] ) ) ) $sfile = en hoe nu verder, ik weet het al niet meer.. |
[ Voor 13% gewijzigd door g4wx3 op 13-07-2007 10:03 ]
WTF? Waarom niet gewoon:
PHP:
1
2
3
4
| $allowed = array ('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) include('...'.$_GET['s'].'.php'); else show_login(); |
Iets netter genoteerd:MBV schreef op vrijdag 13 juli 2007 @ 10:02:
WTF? Waarom niet gewoon:
PHP:
1 2 3 4 $allowed = array ('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) include('...'.$_GET['s'].'.php'); else show_login();
PHP:
1
2
3
4
5
6
7
8
9
| $allowed = array('setlichtkrant', ...); if (in_array($_GET['s'], $allowed)) { include('...'.$_GET['s'].'.php'); } else { show_login(); } |
Maar dit is een stuk veiliger ja...
We are shaping the future
het hele stuk heb ik nu veranderd door
maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
| $sfile = 'logon'; $allowed = array ('logon'); if ( isset( $_SESSION['user'] ) ) { $sfile = 'accountmanager'; $allowed = array ( 'setlichtkrant', 'accountmanager' , 'setinstellingen'); } if( isset($_GET['s'])) { if (in_array($_GET['s'], $allowed)) $sfile = $_GET['s']; } |
maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.
Ik ben wel eens de volgende code tegengekomen, commentaar is ook (ongeveer) origineel behalve de uitleg van de aangeroepen routines. Taal is Progress.
Ik heb dit indertijd vervangen door de volgende regel, het hoeft tenslotte niet heel nauwkeurig en een halfjaar is ~183 dagen.
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
code:
1
2
3
4
5
6
7
8
9
10
11
| // Bereken de datum van 6 maanden geleden, hoeft niet heel nauwkeurig int weeknr, jaartal run v/week.p(input today, output weeknr, output jaartal) // v/week.p is een routine die weeknummer en jaartal van een gegeven datum teruggeeft. if weeknr > 26 then weeknr = weeknr - 26 else do: // ga altijd uit van 52 weken in een jaar, het hoeft tenslotte niet nauwkeurig jaartal = jaartal - 1 weeknr = 52 - (26 - weeknr) end. p/week.p (input weeknr, input jaartal, output datum) // p/week.p is een routine die adhv weeknr/jaar de datum van de maandag in die week teruggeeft |
Ik heb dit indertijd vervangen door de volgende regel, het hoeft tenslotte niet heel nauwkeurig en een halfjaar is ~183 dagen.
code:
1
| datum = today - 183 |
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
Dit valt echt onder slecht programmeerwerk. Als je code niet kan lezen, kan je het ook niet onderhouden. Uiteraard doet het wel eventjes iets, maar dat is eigenlijk worse than failure: je leert er niks van. Het is precies bovenstaand gepruts dat ervoor zorgt dat een applicatie niet te onderhouden is. Daarnaast had je nog een gigantisch veiligheidsgat erin zitten, en je zag het geeneensg4wx3 schreef op vrijdag 13 juli 2007 @ 10:19:
het hele stuk heb ik nu veranderd door
[snip]
maar dit valt mischien eerder onder optimalisatie, dan onder slecht programeerwerk?
Bij me komen deze dingen er vooral, omdat ik altijd een stuk of 5 bestanden teglijkertijd aan het editten ben, en dan vlug 'tijdelijk' even dingen hardcode in plaats van een net algoritme te vinden.

Probleem met je code zoals je die net neerzet, is dat het nog steeds onleesbaar is. Je gebruikt $allowed 2x voor verschillende dingen: 1x om rechten te beperken tot login, 1x als instelling welke pagina's gebruikt mogen worden.
Zet dus bovenaan, op de eerste regel van het bestand, de array $allowed, dan kan je daar in de toekomst je pagina's aan toevoegen. Vervolgens zet je ergens daaronder de regel if($loggedin && in_array(...)) neer voor de include, en de else voor de weergave van de login of index-pagina.
http://nl2.php.net/manual/nl/function.strtotime.php:cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
code:
1 datum = today - 183
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
PHP:
1
| echo strtotime ("-6 months") . "\n"; |
[ Voor 11% gewijzigd door MBV op 13-07-2007 11:50 ]
Anoniem: 105463
MBV schreef op vrijdag 13 juli 2007 @ 11:35:
[...]
http://nl2.php.net/manual/nl/function.strtotime.php:
PHP:
1 echo strtotime ("-6 months") . "\n";
cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
... Taal is Progress.
vandaar dat ik zo blij ben met php, dat symboliseert
Idd, het moet wel heel erg met je gesteld zijn om blij te zijn met PHP
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
nou, blij met dat aspect van PHP. Of van welke linux-gebaseerde scripttaal dan ook..oisyn schreef op vrijdag 13 juli 2007 @ 14:34:
Idd, het moet wel heel erg met je gesteld zijn om blij te zijn met PHP
Welke slechte gewoonte die heel veel php-prutsers hebben corrigeert deze regex?
code:
1
| :%s/\[\([a-zA-Z][^$\]]*\)\]/['\1']/gc |
Dit is een vim-commando:%s/in/out/gc vervangt een match met 'in' op alle plekken door 'out', \1 pakt datgene wat tussen \( en \) staat.
Hint: je hebt er pas last van met E_ALL aan

spoiler:
$array[constante] wordt $array['constante']. Kan leuke effecten hebben als er nieuwe constanten aan PHP worden toegevoegd, maar is bovendien gewoon smerig 
[ Voor 3% gewijzigd door MBV op 13-07-2007 14:57 ]
Wanneer is iets linux-gebaseerd?
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
netvor schreef op zaterdag 16 juni 2007 @ 10:49:
^^ Met Hydra.
Dingen als de IOCCC zijn IMHO een relikwie uit de jaren '80. In de jaren '90 leefde het nog wel een beetje, maar tegenwoordig wordt spaghetticode meestal niet meer als "stoer" gezien.
Aan de andere kant staren mensen zich tegenwoordig wel een beetje blind op alles wat "stoer anno 2007" is: design patterns, web services, en de twee grote datastructure-religies: de kerk van "alles in een RDBMS" en de cult van "alles in een XML doc"
*zucht* mode...
*zucht modus hier dus ook!*
code:
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
| $ofs="";'"$(0'+ '..(0'+ 'xa*['+ 'Math'+ ']::R'+ 'ound'+ '([Ma'+ 'th]:'+ ':Pi/'+ '2,1)'+ ')|%{'+ '[cha'+ 'r][i'+ 'nt]"'+ '"$($'+ '("""'+ '"0$('+ '1838'+ '1589'+ '*726'+ '371*'+ '60)$'+ '(877'+ '7365'+ '981*'+ '263*'+ '360)'+ '$(22'+ '2330'+ '793*'+ '1442'+ '99)$'+ '(310'+ '9*37'+ ') ""'+ '"")[' + '($_*' + '3)..' + '($_*'+ '3+2)' + '])""' + ' })"'|iex |
Gooi dit maar eens in de PowerShell-prompt
(Het doet niets gek, het print alleen een paar woorden)
We are shaping the future
Mooi ASCII ARTAlex) schreef op vrijdag 13 juli 2007 @ 15:21:
code:
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 $ofs="";'"$(0'+ '..(0'+ 'xa*['+ 'Math'+ ']::R'+ 'ound'+ '([Ma'+ 'th]:'+ ':Pi/'+ '2,1)'+ ')|%{'+ '[cha'+ 'r][i'+ 'nt]"'+ '"$($'+ '("""'+ '"0$('+ '1838'+ '1589'+ '*726'+ '371*'+ '60)$'+ '(877'+ '7365'+ '981*'+ '263*'+ '360)'+ '$(22'+ '2330'+ '793*'+ '1442'+ '99)$'+ '(310'+ '9*37'+ ') ""'+ '"")[' + '($_*' + '3)..' + '($_*'+ '3+2)' + '])""' + ' })"'|iex
Gooi dit maar eens in de PowerShell-prompt
(Het doet niets gek, het print alleen een paar woorden)
als er flink wat gnu-tool-achtige dingen in voorkomen. PHP, perl, en zo zijn er nog een paar talen.kenneth schreef op vrijdag 13 juli 2007 @ 15:13:
Wanneer is iets linux-gebaseerd?
edit:
@hieronder: nee, da's een term die ik net uit heb gevonden. Ik had gehoopt dat wel duidelijk was wat ik bedoelde.
@hieronder: nee, da's een term die ik net uit heb gevonden. Ik had gehoopt dat wel duidelijk was wat ik bedoelde.
[ Voor 20% gewijzigd door MBV op 13-07-2007 15:58 ]
Oh, heet dat tegenwoordig linux-gebaseerd ...
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ja top, werkt perfect als je een half jaar van 31 augustus wilt afhalen. Dan krijg je volgens die methode 31 februari.cowgirl schreef op vrijdag 13 juli 2007 @ 10:48:
Nog mooier (en nauwkeurig!) is natuurlijk om gewoon het maanddeel uit de datum te halen, 6 af te trekken en een nieuwe datum maken.
Die fout heb ik ook eens gemaakt. Ik moest een script laten slapen tot de volgende dag. Die volgende dag bepaalde ik dus door de huidige dag te nemen en er dan 1 bij op te tellen. Werkte prima, tot 31 juli. Daarna wou het script slapen tot 32 juli, dat lukte logischerwijs niet en dus ging het script nog een keer runnen. En nog een keer. En nog een keer.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Haha, daar heb je inderdaad gelijk in. KOmt nog een stukje extra controle bij.
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus
) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus
Huh? Je moet gewoon maketime of iets dergelijks gebruiken, zowel in C als in PHP werkt dat prima. Die rekent uit dat 51 januari hetzelfde is als 20 februari, toch?
Als ik een applicatie schrijf die afhankelijk is van tijd zorg ik dat ik 1 keer de tijd ingeef en de applicatie dus moedwillig kan laten denken dat het een andere tijd is. Maargoed, als je het zonde van de tijd vindt om bugs op te lossen zou ik er vooral niks aan doen.cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Haha, daar heb je inderdaad gelijk in. KOmt nog een stukje extra controle bij.
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Dus als je een foute berekening maakt moet je het verdoezelen met een functie die een even incorrect antwoord oplevert (29 februari wordt 1 maart), maar geen foutmelding genereert?MBV schreef op vrijdag 13 juli 2007 @ 20:07:
Huh? Je moet gewoon maketime of iets dergelijks gebruiken, zowel in C als in PHP werkt dat prima. Die rekent uit dat 51 januari hetzelfde is als 20 februari, toch?
Dit lijkt me symptoombestijding.
You don't have to be crazy to do this job, but it helps ....
Dat is het niet: hij doet namelijk precies wat je wilt. Als je de tegenhanger van mktime gebruikt, een X aantal maanden erbij optelt, en dan een functie gebruikt die daar weer een legale datum van maakt, dan is dat toch alleen maar goed? Anders zou elk programma zjin eigen kalenderfuncties moeten schrijven, daar hadden we bibliotheekfuncties voor uitgevonden
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.cowgirl schreef op vrijdag 13 juli 2007 @ 19:52:
Zo draait er nog steeds bij een klant van ons een stukje maatwerk dat elke 4 jaar op 29 februari faalt. Elke 4 jaar (behalve in 2000 dus) wordt daar dus een melding over gedaan en als het de volgende dag wordt opgepakt is het probleem als sneeuw voor de zon verdwenen en wordt het doorgaans toch maar niet opgelost. Zonde van de tijd.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Misschien runde het programma gewoon niet in 2000..oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dat was niet gewoon een schrikkeljaar.oisyn schreef op zaterdag 14 juli 2007 @ 03:45:
[...]
Waarom in 2000 niet? Dat was gewoon een schikkeljaar hoor.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Schrikkeljaren zijn om de 4 jaar, gerekend vanaf het jaar 0, met uitzondering van alle eeuwwisselingen waarvan het jaartal niet deelbaar is door 400, toch? Dan is het dus wél "gewoon" een schrikkeljaar volgens de regels. Dat het wat complexer in elkaar zit dan veel mensen denken wil niet zeggen dat het bijzonder is.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Nouja wat betreft schrikkeljaren wordt het niet veel bijzonderder. Dus voor de schrikkeljaarliefhebber
was 2000 toch écht een bijzonder jaar ....
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Anoniem: 224515
offtopic:
Ik ben het alweer vergeten. Maar nu ik er zo over nadenk.. schreef je toen ook 14-07-00? ( en dan gaat het dus over 00 x) )
Ik ben het alweer vergeten. Maar nu ik er zo over nadenk.. schreef je toen ook 14-07-00? ( en dan gaat het dus over 00 x) )
[ Voor 7% gewijzigd door Anoniem: 224515 op 14-07-2007 12:21 ]
Het is een schrikkeljaar mits:
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)
Zoiets dus:
Java:
Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen 1
2
3
| public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; } |
Anoniem: 14829
Deikke schreef op zaterdag 14 juli 2007 @ 18:05:
Het is een schrikkeljaar mits wanneer:
- Het jaar deelbaar is door 4
- Het jaar niet deelbaar is door 100 (eeuwwisselingen)
- Uitzondering: Het jaar deelbaar is door 400 (dus 2000 weer wel)
Java:
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
| public strictfp class Semantics extends Exception { private static volatile transient boolean l = false; private transient volatile static short j = 1; public volatile static transient Exception LogicClass = new Semantics(); protected strictfp synchronized boolean WTF() throws Exception { again: do { l = !l; without: try { assert l ? true : LogicClass instanceof Semantics; continue; } catch (AssertionError e) { j++; LogicClass = new Exception(); break again; } finally { switch (j % 2) { case 0: LogicClass = this; break again; default: break without; } } } while (--j > -10 ? false : true); throw this; } public static void main(String[] args) { Semantics s = new Semantics(); try { System.out.println(s.WTF()); } catch (Exception e) { System.out.print(s.l); } } } |
Lastige taal ook, dat JavaBalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:Java:Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen
1 2 3 public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; }
PHP:
1
2
3
| function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; } |
Of voor het huidige jaar:
PHP:
1
2
3
| function isSchrikkeljaar() { return date('L') == 1; } |
[ Voor 2% gewijzigd door EdwinG op 15-07-2007 20:09 . Reden: Oeps, wel 1 gebruiken bij de mktime ]
Bezoek eens een willekeurige pagina
Lastige taal, dat PHP:EdwinG schreef op zondag 15 juli 2007 @ 20:04:
[...]
Lastige taal ook, dat Java
PHP:
1 2 3 function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; }
Of voor het huidige jaar:
PHP:
1 2 3 function isSchrikkeljaar() { return date('L') == 1; }
Java:
1
| boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar); |
In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.
Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd.
Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...
Fat Pizza's pizza, they are big and they are cheezy
http://nl2.php.net/manual/nl/function.mcal-is-leap-year.php
Alleen gaat iedereen het opnieuw uitvinden, dat zal wel in alle talen zo zijn
Alleen gaat iedereen het opnieuw uitvinden, dat zal wel in alle talen zo zijn
Pulsher schreef op zondag 15 juli 2007 @ 17:47:
Java:
1 2 3 public strictfp class Semantics extends Exception { ... }
code:
Ik snap het niet?
1
| true |
- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.
Genoeg lelijke dingen gezien?
Ps. Wisten jullie dat Sun smerige spelletjes speelt door het toe te staan dat je op willekeurige plekken in je code (in methoden/initializers) http://java.sun.com mag intypen? Probeer maar eens.
Sluikreclame of is het toch iets anders?
spoiler:
http: is een label en dat mag je overal neerzetten.
//blaaaaaaa is commentaar en mag dus ook.
Flouw hè?
//blaaaaaaa is commentaar en mag dus ook.
Flouw hè?
Fat Pizza's pizza, they are big and they are cheezy
Vergeet niet het gebrek aan consistentie:JKVA schreef op zondag 15 juli 2007 @ 22:02:
[...]
- Om te beginnen is dit absoluut geen exception maar een applicatie (zie main())
- strictfp is hier in mijn optiek zinloos aangezien er geen floating point berekeningen gedaan worden.
- Labels zijn EVIL. (vraag maar aan Sun)
- Ternary operator is zinloos.
- without label op een try is volgens mij ook zinloos.
- Transient is in deze context ook niet echt bruikbaar.
- leesbaarheid --.
- strictfp is volgens mij trouwens niet nodig op een individuele methode als het al op de class gedefinieerd is.
Genoeg lelijke dingen gezien?Ik mis trouwens nog genoeg denk ik.
- static volatile transient
- transient volatile static
- volatile static transient
Dezeflde keywords, op drie achtereenvolgende regels op drie verschillende volgorders.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Het doel van de code die JVKA gejat heeft, was het laten zien welke constructies en keywords Java kent die je niet zo vaak in gewone code tegenkomt. Lijkt me niet terecht om dat als slecht programmeervoorbeeld aan te halen, want het was nooit als serieuze code (of als goed voorbeeld) bedoelt.
[ Voor 3% gewijzigd door Soultaker op 15-07-2007 23:32 ]
Ja, dat bedoelde ik dus. Dat het evil/lelijk/onduidelijk is, was duidelijk, maar ik zocht dus naar het nut van dit voorbeeld. Het leek me inderdaad een soort showcase voor code constructies omdat ik er geen touw aan vast kon knopen.Soultaker schreef op zondag 15 juli 2007 @ 23:07:
Het doel van de code die JVKA gejat heeft, was het laten zien welke constructies en keywords Java kent die je niet zo vaak in gewone code tegenkomt. Lijkt me niet terecht om dat als slecht programmeervoorbeeld aan te halen, want het was nooit als serieuze code (of als goed voorbeeld) bedoelt.
Neuh. Je ziet precies wat die functie doet, en hoe de implementatie niet werkt. Als je dat niet kunt lezen zuig je als Java programmeurBalusC schreef op zaterdag 14 juli 2007 @ 18:48:
Zoiets dus:Java:Slecht programmeervoorbeeld? Mwah, het is alleen beetje lastig te interpreteren voor de noeps. Een handvol haakjes zal de leesbaarheid wel wat bevorderen
1 2 3 public static boolean isSchrikkelJaar(int jaar) { return jaar % 4 == 0 && jaar % 100 != 0 || jaar % 400 == 0; }
Lastig dat scheiden van 'taal' en 'API'.EdwinG schreef op zondag 15 juli 2007 @ 20:04:
Lastige taal ook, dat Java
PHP:
1 2 3 function isSchrikkeljaar($jaar) { return date('L', mktime(1, 1, 1, 1, 1, $jaar)) == 1; }
Of voor het huidige jaar:
PHP:
1 2 3 function isSchrikkeljaar() { return date('L') == 1; }

https://niels.nu
Hier op het werk een leuke tegengekomen:
FileName is zijn leven lang geleden begonnen als een ouderwetse array van chars. Op een gegeven moment is iemand erachter gekomen dat het beter is om std::string te gebruiken. Ben ik het op zich helemaal mee eens, doe ik zelf ook voor alles behalve communicatiecode. Maar onze refactoring specialist heeft de naam van de variabele gelaten voor wat het was, en nu impliceert szFileName in al zijn Hongaarse glorie een volstrekt ongerelateerd datatype.
[rant]
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
Waar al die puntkomma's toch voor dienen is mij echt een raadsel. Dacht deze programmeur misschien dat de applicatie beter draait als er een riante hoeveelheid NOP's in de executable zit?
Elke maand of twee krijg ik weer zo'n grote pan met spaghetti van onze mogelijk klinisch gestoorde senior programmer. Geen touw aan vast te knopen. Vervolgens ben ik dus twee maanden aan het aanmodderen en als het er eindelijk een beetje redelijk uitziet krijg ik weer een nieuwe lading meuk, mag de vorige de prullenbak in, en kan ik weer van voor af aan beginnen.
Zucht.
[/rant]
C++:
1
| std::string szFileName; |
FileName is zijn leven lang geleden begonnen als een ouderwetse array van chars. Op een gegeven moment is iemand erachter gekomen dat het beter is om std::string te gebruiken. Ben ik het op zich helemaal mee eens, doe ik zelf ook voor alles behalve communicatiecode. Maar onze refactoring specialist heeft de naam van de variabele gelaten voor wat het was, en nu impliceert szFileName in al zijn Hongaarse glorie een volstrekt ongerelateerd datatype.

[rant]
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
C++:
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
| new cTestLoadHdp; ; //auxiliary variables char ReturnString[60]; ; //keyboard enumKeySetLow LowKeySet; enumKeySetHigh HighKeySet; LowKeySet=KeySetLow_LOAD_PLAYER; HighKeySet=KeySetHigh_LOAD_PLAYER; char chKl1=0,chKl2=0; int iNOfKl=0; int iKeyCaseState=0;//use in case - read value (use in key underswitch) char achKeyBuffer[256]; int iLenKeyBuffer=0; bool fUseKeyBuffer=false;//use in case - write to true int iKeyCaseStateAfterBuffer=1;//use in case - write any value bool fClearAfterBuffer=true; char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0; int iNOfKlBeforeUseKeyBuffer=0; ; //state variables for test in main loop int CARD=0; int DSPT=0; int FaxChannel; ; PrintMainHint(); ; |
Waar al die puntkomma's toch voor dienen is mij echt een raadsel. Dacht deze programmeur misschien dat de applicatie beter draait als er een riante hoeveelheid NOP's in de executable zit?
Elke maand of twee krijg ik weer zo'n grote pan met spaghetti van onze mogelijk klinisch gestoorde senior programmer. Geen touw aan vast te knopen. Vervolgens ben ik dus twee maanden aan het aanmodderen en als het er eindelijk een beetje redelijk uitziet krijg ik weer een nieuwe lading meuk, mag de vorige de prullenbak in, en kan ik weer van voor af aan beginnen.
Zucht.
[/rant]
Computer Science: describing our world with boxes and arrows.
JKVA schreef op zondag 15 juli 2007 @ 20:45:
[...]
Lastige taal, dat PHP:
Java:
1 boolean schrikkeljaar = new GregorianCalendar().isLeapYear(jaar);
In Java hoef je er niet eens een functie voor te maken. Van elk GregorianCalendar object (de datumklasse in Java) kun je opvragen of het een schrikkeljaar is.
Zonder magische Strings met de letter L. Zonder magische 1 getallen. Compile time alles gecontroleerd.
Hoewel ik het niet logisch blijf vinden dat je een jaar parameter moet meegeven. Gewoon de jaarcomponent uit de Calender instantie trekken zou genoeg geweest zijn...
Visual Basic .NET:
1
2
3
4
| dim schrikkeljaar as boolean dim jaar as integer schrikkeljaar = Date.IsLeapYear(jaar) |
WeLkE VeEl oP MsN ZiTTenDE PRoGrAMeUR HeEfT DeRgELijKE BReeZaH CoDE GeScHReVeN??;En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen. Overal en nergens unreferenced variables, totaal geen naming convention, en stapels compiler warnings. En dit soort vreemde taferelen:
C++:
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 new cTestLoadHdp; ; //auxiliary variables char ReturnString[60]; ; //keyboard enumKeySetLow LowKeySet; enumKeySetHigh HighKeySet; LowKeySet=KeySetLow_LOAD_PLAYER; HighKeySet=KeySetHigh_LOAD_PLAYER; char chKl1=0,chKl2=0; int iNOfKl=0; int iKeyCaseState=0;//use in case - read value (use in key underswitch) char achKeyBuffer[256]; int iLenKeyBuffer=0; bool fUseKeyBuffer=false;//use in case - write to true int iKeyCaseStateAfterBuffer=1;//use in case - write any value bool fClearAfterBuffer=true; char chKl1BeforeUseKeyBuffer=0,chKl2BeforeUseKeyBuffer=0; int iNOfKlBeforeUseKeyBuffer=0; ; //state variables for test in main loop int CARD=0; int DSPT=0; int FaxChannel; ; PrintMainHint(); ;
'K hEB CoMpATIE MeT jE;
ik zie er weinig breezah in anders... Gewoon de gebruikelijke camelCasing.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Deze eerste regel is nog wel het raarst. Hoe werkt die cTestLoadHdp, als je die kunt instantiëren zonder een reference op te slaan? Wat gebeurt er als ik een automatic variable van dit type instantieer? Crasht er dan ergens iets, of lekt de huidige code gewoon geheugen?netvor schreef op vrijdag 20 juli 2007 @ 12:45:
En dat is nog het ergste niet. De code die ik krijg toegestuurd is soms echt om te huilen.
[..]
C++:
1 new cTestLoadHdp;
Als dit geen memory leak oplevert omdat er ergens een pointer wordt geregistreed die tzt weer vrijgegeven wordt, dan vraag ik me wel af waarom deze code door middel van een constructor aangeroepen wordt, en niet een static member function.
[ Voor 19% gewijzigd door Soultaker op 20-07-2007 15:49 ]
Inderdaad, het is camelCasing, dat is niet echt het probleem. Waar ik zo moe van wordt is bijvoorbeeld dat de helft van de identifiers Hongaars is en de andere helft niet. Of dat er een hele rits variabelen (dit blokje wat ik postte was slechts een fractie) wordt gedeclareerd met vrijwel identieke namen zonder logische groepering in structs en dergelijke. En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen.oisyn schreef op vrijdag 20 juli 2007 @ 15:24:
ik zie er weinig breezah in anders... Gewoon de gebruikelijke camelCasing.

En dat op een vrijdag...

EDIT: @Soultaker: kijk, dat is nou precies het soort vragen dat ik mezelf heb aangeleerd niet meer te stellen, daar krijgt een mens alleen maar hoofdpijn van. Wat mij betreft zijn er twee mogelijk scenarios:
- Het doet iets heel obscuurs wat waarschijnlijk helemaal diep verborgen ligt onder een laag spaghetti. In zulke situaties zeg ik "If it ain't broken, don't fix it."
- Het is inderdaad volstrekt overbodig (ik zie bijvoorbeeld in de constructor een reeks member assignments staan). In dat geval kan het geen kwaad en met een beetje geluk optimiseert de compiler het er wel uit.
[ Voor 29% gewijzigd door netvor op 20-07-2007 16:02 ]
Computer Science: describing our world with boxes and arrows.
Ik vind dat dan ook een erg domme conclusie. Als een variabele niet static is, of niet in een anonymous namespace zit, dan weet je dat hij mogelijkerwijs vanuit een andere sourcefile gebruikt wordt. De gangbare handeling in mijn boekje is dan gewoon even een find-in-all-files op die identifier te doen (of Find References, als je Visual C++ icm Visual Assist gebruikt), en niet zomaar die var weghalen en hopen dat je niets breektnetvor schreef op vrijdag 20 juli 2007 @ 15:53:
En sommige variabelen worden in main.cpp gedeclareerd, daar geheel niet gebruikt, maar worden ergens ver weg via 'extern' opgeroepen. Als je dus denkt "ha, redundant variable, ikke weghalen" dan kom je er pas bij de linker achter dat er iets fout zit.
Desalniettemin, ik ben het er mee eens dat die code erg slecht is opgezet
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
Even een brainfart:
Net uit zitten poepen, leuk voor de volgende
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public function CreateSaveObject() { $QueryBuilder = "INSERT INTO ". $this->Tabelnaam ." ("; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= $this->VeldenArray[$i] .', '; } $QueryBuilder .= $this->VeldenArray[(sizeof($this->VeldenArray) - 1)]; $QueryBuilder .= ') VALUES ('; for($i = 0; $i < (sizeof($this->VeldenArray) - 1); $i++) { $QueryBuilder .= '\'".$this->'.$this->VeldenArray[$i].'."\', '; } $QueryBuilder .= '\'".$this->'.$this->VeldenArray[(sizeof($this->VeldenArray) - 1)].'."\')'; echo $QueryBuilder; } |
Net uit zitten poepen, leuk voor de volgende

Idd, iets met implode() enzo
. Vooral leuk als VeldenArray geen elementen bevat. Daarnaast, waarom wil je in hemelsnaam een string als '".$this->kolomnaam."' in je database hebben?
[ Voor 70% gewijzigd door .oisyn op 20-07-2007 17:33 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren 
Je krijgt dus een string terug als:
INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")
Je krijgt dus een string terug als:
INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")
[ Voor 45% gewijzigd door Anoniem: 140111 op 21-07-2007 11:41 ]
Is het niet veel makkelijker om de volgende query te genererenAnoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren
Je krijgt dus een string terug als:
INSERT INTO <tabel> (kolom1, kolom2) VALUES ('". $this->kolom1."', '". $this->kolom2 .'")

SQL:
1
| INSERT INTO tabel SET kolom1=value1, kolom2=value2 |
PHP:
1
2
3
4
5
6
| $sql = 'INSERT INTO tabel SET'; $i = 0; foreach ($array as $key => $val) { $i++; $sql.= ($i !== 1) ? ', ' : '') . "`$key` = '$val'"; } |
.
Anoniem: 14829
Da's geen standaard SQL. Dat is de syntax voor een UPDATE, en er zal vast ook wel een database zijn die 't ondersteunt voor inserts, maar volgens de SQL standaard is 'tOptix schreef op zaterdag 21 juli 2007 @ 12:01:
Is het niet veel makkelijker om de volgende query te genereren![]()
SQL:
1 INSERT INTO tabel SET kolom1=value1, kolom2=value2
SQL:
1
| INSERT INTO tabel (kolom1, kolom2) VALUES (value1, value2) |
En dat moet via een database omdat...?Anoniem: 140111 schreef op zaterdag 21 juli 2007 @ 11:03:
Het is de bedoeling dat over een paar weekjes dit code voor me gaat genereren
Blijkbaar weet je de kolomnamen al. Dan kun je dus ook gewoon on the fly code genereren, zonder eerst redundante data in een database te zetten.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Anoniem: 140111
De kolomnamen worden ingevoerd op een vorige pagina, aan de hand daarvan worden ook de vars etc declareerd en worden er enkele functies gegenereerd zoals Save, SelectAll(), SelectByID($id) etc
Verder genereerd het ook het CREATE TABLE statement, met PK etc
Verder genereerd het ook het CREATE TABLE statement, met PK etc
[ Voor 14% gewijzigd door Anoniem: 140111 op 21-07-2007 14:12 ]
Dit topic is gesloten.
Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.
Het is hier ook niet het "korte vraagjes" topic. Zie deze post
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.

Het is hier ook niet het "korte vraagjes" topic. Zie deze post