We are shaping the future
[plaag]Wat, dat je apart een functie schrijft om Den_Haag om te zetten naar Den Haag of de overbodige else?[/plaag]Michali schreef op maandag 23 augustus 2010 @ 09:25:
Mijn maandagochtend begint goed:
PHP:
1 2 3 4 5 6 7 8 9 10 11 // Den_Haag naar Den Haag omzetten function ReplaceDenHaag($plaats) { if ($plaats == "Den_Haag") { $newplaats = "Den Haag"; } else { $newplaats = $plaats; } return $newplaats; }
Waarschijnlijk kun je een lijstje / array maken van input die je vervangen moet (en hun vervangers) en dan alle plaatsen in één keer replacen. Als dat van toepassing is natuurlijk.
De enige WTF is inderdaad dat je een functie maakt voor zo'n specifiek geval, maar zonder de context is het ook lastig te zeggen hoe WTF dat is. Het zou vooral een WTF zijn als er ook een ReplaceDenBosch en een ReplaceDenHelder etc. zouden zijn in plaats van een meer generieke oplossing
[ Voor 10% gewijzigd door Orion84 op 23-08-2010 10:47 ]
The problem with common sense is that it's not all that common. | LinkedIn | Flickr
Wij hebben ook plaatsvarianten, en onze test hiervoor is 'asd', dat naar Amsterdam moet worden omgezet. Werkt niet, dus issue aangemaakt, opgelost etc. Krijg ik de melding dat 'den haag' niet meer werkt (moet 's Gravenhage worden). Staat echt op het allerlaagste lowlevel niveau, bij het parsen van de URL:Orion84 schreef op maandag 23 augustus 2010 @ 10:46:
Die else is niet overbodig, als je die functie per ongeluk aanroept met Rotterdam, dan geeft ie gewoon weer Rotterdam terug, in plaats van Den Haag, dat is in mijn ogen nog wel nuttig te noemen.
De enige WTF is inderdaad dat je een functie maakt voor zo'n specifiek geval, maar zonder de context is het ook lastig te zeggen hoe WTF dat is. Het zou vooral een WTF zijn als er ook een ReplaceDenBosch en een ReplaceDenHelder etc. zouden zijn in plaats van een meer generieke oplossing
1
| if(url.Contains("asd")) Criteria.Add(Plaats, "Amsterdam"); |
argh!
1
2
3
4
5
| function ReplaceDenHaag(&$plaats) { if($plaats == "Den_Haag") $plaats = "Den Haag"; } |
Uiteraard is die functie gewoon brak. Misschien om wat data van een oud systeem naar een nieuw systeem te importeren?
[ Voor 28% gewijzigd door TJHeuvel op 23-08-2010 11:21 ]
great, dan heb je een functie die niets teruggeeft. of heeft php geen procedures?CyCloneNL schreef op maandag 23 augustus 2010 @ 11:21:
Die else kan overbodig zijn:
PHP:
1 2 3 4 5 function ReplaceDenHaag(&$plaats) { if($plaats == "Den_Haag") $plaats = "Den Haag"; }
Uiteraard is die functie gewoon brak. Misschien om wat data van een oud systeem naar een nieuw systeem te importeren?
Lekker op de bank
$plaats wordt doorgegeven als reference. Zo wordt de variabele direct bewerkt en heb je geen return meer nodig.ZaZ schreef op maandag 23 augustus 2010 @ 11:27:
[...]
great, dan heb je een functie die niets teruggeeft.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Maar een functie die niets teruggeeft is lelijk, want dan is het geen functie nietwaar?
Ah, zal wel weer zo'n bijzonder dingetje van php zijn.
Geen void, procedure, sub of whatever.
[ Voor 34% gewijzigd door ZaZ op 23-08-2010 11:46 ]
Lekker op de bank
CyCloneNL schreef op maandag 23 augustus 2010 @ 11:21:
Die else kan overbodig zijn:
PHP:
1 2 3 4 5 function ReplaceDenHaag(&$plaats) { if($plaats == "Den_Haag") $plaats = "Den Haag"; }
Uiteraard is die functie gewoon brak. Misschien om wat data van een oud systeem naar een nieuw systeem te importeren?
1
2
3
| function ReplaceDenHaag($plaats){ return str_replace("Den_Haag", "Den Haag", $plaats); } |
Alhoewel het vast sneller kan, is dit imo netter
Al kun je dan imo beter op de locatie waar het nodig is direct die str_replace uitvoeren.
[ Voor 8% gewijzigd door Noxious op 23-08-2010 11:48 ]
1
2
3
| $in = array("denhaag",denbosch","denhelder") $out = array("'s-Gravenhage","'s-Hertogenbosch","Den Helder") return str_ireplace($in,$out,$string); |
Net zo makkelijk, en scheelt je een hoop functies voor elke plaats
Oh en niet case sensitive uitaard, want stel dat iemand denHaag schrijft
Driving a cadillac in a fool's parade.
Dan kun je nog beter een str_replace("_", " ", $plaats) doen uiteraard.
Dat doet niet hetzelfde, de functie moet de string 'Den_Haag' omzetten naar 'Den Haag'.Noxious schreef op maandag 23 augustus 2010 @ 11:48:
PHP:
1 2 3 function ReplaceDenHaag($plaats){ return str_replace("Den_Haag", "Den Haag", $plaats); }
Alhoewel het vast sneller kan, is dit imo netter
Al kun je dan imo beter op de locatie waar het nodig is direct die str_replace uitvoeren.
Bij 'Den_Haag' gaat bij jou alles goed, maar bij 'Ik woon in Den_Haag' niet, want die zou hij niet moeten aanpassen
Da's helemaal waar.CyCloneNL schreef op maandag 23 augustus 2010 @ 12:01:
[...]
Dat doet niet hetzelfde, de functie moet de string 'Den_Haag' omzetten naar 'Den Haag'.
Bij 'Den_Haag' gaat bij jou alles goed, maar bij 'Ik woon in Den_Haag' niet, want die zou hij niet moeten aanpassen
Output parameters in PHP zijn serieus not done. Je kan returnen wat je wilt, zelfs verschillende types en of complexere structuren dus vermijd aub references hiervoor. Als je hele codestyle zo is, is dat wmb een grotere wtf dan de originele functie.CyCloneNL schreef op maandag 23 augustus 2010 @ 11:34:
Zoals TheCoolGamer al zei, heb ik stiekem er een reference van gemaakt dmv het & symbool.
{signature}
CyCloneNL schreef op maandag 23 augustus 2010 @ 12:09:
Ik ben niet zo van de references, maar waarom zou het anders zijn om een reference te maken of een waarde te returnen? Dit kan toch ook van alles zijn.
1
2
3
4
5
6
7
8
| <?php function foo (&$bar) { $bar = 'baz'; } $bar = 'bat'; var_dump(foo($bar)); // null |
maar dan toch hopelijk op een elegantere manier dan met twee losse arrays die je zo in je code definieert, want dat schreeuwt imho om het maken van foutjes in de volgorde etc. op het moment dat je later plaatsen gaat toevoegen/verwijderen etc.kwaakvaak_v2 schreef op maandag 23 augustus 2010 @ 11:53:
ik zou eerder een mooie lookup tabel maken waar je alles door heen haalt
code:
1 2 3 $in = array("denhaag",denbosch","denhelder") $out = array("'s-Gravenhage","'s-Hertogenbosch","Den Helder") return str_ireplace($in,$out,$string);
Net zo makkelijk, en scheelt je een hoop functies voor elke plaats
Oh en niet case sensitive uitaard, want stel dat iemand denHaag schrijft
The problem with common sense is that it's not all that common. | LinkedIn | Flickr
Inderdaad, dan liever zo doen (als je het zo wilt doen natuurlijkOrion84 schreef op maandag 23 augustus 2010 @ 12:35:
[...]
maar dan toch hopelijk op een elegantere manier dan met twee losse arrays die je zo in je code definieert, want dat schreeuwt imho om het maken van foutjes in de volgorde etc. op het moment dat je later plaatsen gaat toevoegen/verwijderen etc.
1
2
3
4
5
6
| $stuff = array( "denhaag" =>"'s-Gravenhage", "denbosch" =>"'s-Hertogenbosch", "denhelder" =>"Den Helder" ); return str_ireplace(array_keys($stuff),array_values($stuff),$string); |
en str_replace werkt ook op arrays normaal.;Noxious schreef op maandag 23 augustus 2010 @ 11:59:
Als je er meerdere hebt wel ja, maar misschien hebben ze alleen locaties in Amsterdam, Rotterdam en Den Haag oiden komen andere plaatsen niet voor.
Dan kun je nog beter een str_replace("_", " ", $plaats) doen uiteraard.
MT Venus E 5KW (V151) P1 HomeWizard | Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be | 9800X3D, 96GB DDR5 6000MHZ, NVIDIA GEFORCE 4090, ASRock X670E Steel Legend, Seasonic GX1000
Dat is best logisch, var_dump dumpt wat foo returned.mithras schreef op maandag 23 augustus 2010 @ 12:18:
[...]
PHP:oepsie
1 2 3 4 5 6 7 8 <?php function foo (&$bar) { $bar = 'baz'; } $bar = 'bat'; var_dump(foo($bar)); // null
Wat ik wil zeggen, is dat je in PHP nooit weet wat een functie met je variable doet, of returned. En dit dus niet specifiek iets met references is.
Waarbij ik dan mag hopen dat dit stukje niet in je main loop zit en vaak wordt aangeroepen. Want array_keys, en array_values zijn relatief trage operaties in PHP. Beter is het dan om het direct goed op te slaan in je database.Erkens schreef op maandag 23 augustus 2010 @ 12:42:
[...]
Inderdaad, dan liever zo doen (als je het zo wilt doen natuurlijk) is tenminste iets meer overzichtelijker
PHP:
1 2 3 4 5 6 $stuff = array( "denhaag" =>"'s-Gravenhage", "denbosch" =>"'s-Hertogenbosch", "denhelder" =>"Den Helder" ); return str_ireplace(array_keys($stuff),array_values($stuff),$string);
Wat een speculaties weer he... Waarschijnlijk wordt deze code 1 keer per 100 jaar aangeroepen ofzo
Driving a cadillac in a fool's parade.
Als programmeur hoor je imo perfectionistisch te zijn.kwaakvaak_v2 schreef op maandag 23 augustus 2010 @ 14:12:
[...]
Wat een speculaties weer he... Waarschijnlijk wordt deze code 1 keer per 100 jaar aangeroepen ofzo
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Sterker nog, de code wordt helemaal nooit meer aangeroepen.kwaakvaak_v2 schreef op maandag 23 augustus 2010 @ 14:12:
Wat een speculaties weer he... Waarschijnlijk wordt deze code 1 keer per 100 jaar aangeroepen ofzo
Maar vooral pragmatischSebazzz schreef op maandag 23 augustus 2010 @ 14:14:
[...]
Als programmeur hoor je imo perfectionistisch te zijn.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Alleen als dat tot een beter product leidt
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Wanneer je je laat verleiden tot code schrijven die lelijk en/of heel inefficient, kun je er donder op zeggen dat vroeg of laat een aantal van die stukken toch een eigen leven gaan leiden.
Voor je het weet ben je workarounds aan het maken.
Lekker op de bank
Perfectionistisch is wat mij betreft geen goede insteek als het gaat om betaald programmeren. Factoren als tijd en geld spelen nu eenmaal een rol.
The perfect is the enemy of the good.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
True, maar helaas moet je vaak de troep van andere opruimen of is een dergelijke aanpassing niet mogelijk binnen een bepaald budget/bepaalde tijd.kwaakvaak_v2 schreef op maandag 23 augustus 2010 @ 14:12:
Beter is het dan om het direct goed op te slaan in je database.
En traag? Ach, dan laten we toch gewoon snellere server kopen
Een ex collega had zoiets. Die kreeg een opdracht en soms was het gewoon iets wat je in een dag in elkaar draait.
Die ging dan eerst zitten tekenen en alles uitdenken en kwam tot 30 keer terug op zijn ontwerp omdat het nog meer robuust en strakker kon. Dan kwam ie meteen met nieuwe standaarden zodat alle tools nog beter op elkaar zouden aansluiten en die moesten dan ook weer veranderen etc.
Een echte overdesigner dus...
Maar iedereen die aan betaald programmeren doet heeft te maken gehad met tools die bijv eerst alleen maar effe een database moest importeren, dus dat het verschrikkelijke code is moet niet uitmaken.
Daarna moest er toch ook nog dit gebeuren en als ie dit en dat zou doen, zou het ook handig zijn.
Voor je het weet is het een draak van een tool.
En het is helemaal erg als in je core app dat soort dingen gebeuren.
Lekker op de bank
Deze staat op een murphy poster die ik thuis heb. Is heel toepasselijk als ontwikkelaar:kenneth schreef op maandag 23 augustus 2010 @ 15:08:
Het is inderdaad een kunst om het midden te vinden tussen academisch correcte code en "het werkt, wat zeur je?"...
Perfectionistisch is wat mij betreft geen goede insteek als het gaat om betaald programmeren. Factoren als tijd en geld spelen nu eenmaal een rol.
The perfect is the enemy of the good.
There is never enough time to do it right. But there's always enough time to do it again
You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?
Ik las:mithras schreef op maandag 23 augustus 2010 @ 15:51:
^^ 9/10 keer schrijf ik code zo goed als het kan in de gestelde termijn + begroting. Meestal is het wel netjes, maar meestal zie ik ook bij een revisit dat het toch beter had gekund. Zo itereer je telkens verder tot perfecte code
Maar dat zal wel komen door de code die ik heb moeten onderhouden.Zo irriteer je telkens verder tot perfecte code
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Ja dat doe ik ook wel. Als ik code terugzie en ik snap het even niet helemaal goed meer, dan probeer ik wat ik dan leer er in te verwerken zodat het duidelijker wordt.mithras schreef op maandag 23 augustus 2010 @ 15:51:
^^ 9/10 keer schrijf ik code zo goed als het kan in de gestelde termijn + begroting. Meestal is het wel netjes, maar meestal zie ik ook bij een revisit dat het toch beter had gekund. Zo itereer je telkens verder tot perfecte code
Ach, ik heb dat wel afgeleerd in een 'corporate environment'. Soms heeft een klant er meer aan dat iets binnen 2 weken werkt dan dat het over 10 jaar eventueel met één aanpassing heel makkelijk uitgebreid kan worden.ZaZ schreef op maandag 23 augustus 2010 @ 15:21:
Ja ok, dat is het andere uiterste.
Een ex collega had zoiets. Die kreeg een opdracht en soms was het gewoon iets wat je in een dag in elkaar draait.
Die ging dan eerst zitten tekenen en alles uitdenken en kwam tot 30 keer terug op zijn ontwerp omdat het nog meer robuust en strakker kon. Dan kwam ie meteen met nieuwe standaarden zodat alle tools nog beter op elkaar zouden aansluiten en die moesten dan ook weer veranderen etc.
Een echte overdesigner dus...
Maar iedereen die aan betaald programmeren doet heeft te maken gehad met tools die bijv eerst alleen maar effe een database moest importeren, dus dat het verschrikkelijke code is moet niet uitmaken.
Daarna moest er toch ook nog dit gebeuren en als ie dit en dat zou doen, zou het ook handig zijn.
Voor je het weet is het een draak van een tool.
En het is helemaal erg als in je core app dat soort dingen gebeuren.
Het is stiekem ook beter om dat niet te doen, natuurlijk, anders heb je snel geen werk meer.
Ook gehad met een applicatie, Er werd veel gebruik gemaakt van een Map met key/value velden.
De mogelijke keys werden in een aparte tabel bijgehouden, maar nergens stond gedocumenteerd welke keys bij elkaar hoorden. Dus bij nieuwe records, werden er vaak keys vergeten/verkeerd ingevuld of teveel ingevuld. En het ging nog met de hand ook (SQL)
Dus je moest echt tig keer testen, voordat je het goed werkend had. Met een simpel datamodel had je dat probleem niet.
Had dus soms zin om de bedenker ervan te slaan en niet alleen voor die applicatie.
let the past be the past.
Je moet het juist laten lijken dat het veel werk is en lekker op GoT rondhangen natuurlijk.Davio schreef op maandag 23 augustus 2010 @ 17:54:
Het is stiekem ook beter om dat niet te doen, natuurlijk, anders heb je snel geen werk meer.
Niet helemaal eens. Ik vindt dat je als programmeur minstens één keer een programma of onderdeel gemaakt moet hebben dat volgens de hedendaagse maatstaven 'perfect' zoveel mogelijk benadert - goede documentatie, tests, design patterns waar ze logisch zijn en iets toevoegen, en een heel rijtje andere termen die je uit de betere / standaardprogrammerwerken haalt.kenneth schreef op maandag 23 augustus 2010 @ 15:08:
Het is inderdaad een kunst om het midden te vinden tussen academisch correcte code en "het werkt, wat zeur je?"...
Perfectionistisch is wat mij betreft geen goede insteek als het gaat om betaald programmeren. Factoren als tijd en geld spelen nu eenmaal een rol.
Zo zul je die, misschien onderbewust, in toekomstige projecten ook toepassen waar mogelijk - en omdat je er bekend mee bent zal het op de korte duur nauwelijks extra tijd kosten (je poept zo een unit testje uit, ipv het geheel te compilen en handmatig erdoorheen te klikken (bijvoorbeeld)), en zich op de lange duur terugbetalen.
In theorie natuurlijk, ik heb het nooit goed toe kunnen passen ivm tijdgebrek en gebrek aan goeie projecten
Eigenlijk is het stiekem best wel erg dat het enige project waar ik echt tevreden over ben mijn eerste stageopdracht van ~2.5 jaar geleden is. 20 weken alleen op een project zonder ook maar enige randvoorwaarden kunnen storten die zelfs het stagebedrijf zelf niet goed heeft kunnen definieren
[ Voor 13% gewijzigd door YopY op 23-08-2010 20:51 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Orion84 schreef op maandag 23 augustus 2010 @ 10:46:
Die else is niet overbodig, als je die functie per ongeluk aanroept met Rotterdam, dan geeft ie gewoon weer Rotterdam terug, in plaats van Den Haag, dat is in mijn ogen nog wel nuttig te noemen.
1
2
3
4
5
6
7
8
9
| <?php // Den_Haag naar Den Haag omzetten function ReplaceDenHaag($plaats) { if ($plaats == "Den_Haag") return "Den Haag"; return $plaats; } ?> |
Los van het feit dat de functie nogal kansloos is; als je een if-zonder-else wilt gebruiken is dit de way to go IMHO.
[ Voor 34% gewijzigd door RobIII op 23-08-2010 21:00 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Of zo:RobIII schreef op maandag 23 augustus 2010 @ 20:59:
[...]
PHP:
1 2 3 4 5 6 7 8 9 <?php // Den_Haag naar Den Haag omzetten function ReplaceDenHaag($plaats) { if ($plaats == "Den_Haag") return "Den Haag"; return $plaats; } ?>
Los van het feit dat de functie nogal kansloos is; als je een if-zonder-else wilt gebruiken is dit de way to go IMHO.
1
2
3
4
5
6
7
| <?php // Den_Haag naar Den Haag omzetten function ReplaceDenHaag($plaats) { return ($plaats == "Den_Haag") ? "Den Haag" : $plaats; } ?> |
“(…) met een rode blos op een geelgroene ondergrond.” Volgens Wikipedia tenminste.
1
2
3
| if ($plaats != "Den_Haag") return $plaats; return "Den Haag"; |
En dan nog alle andere mogelijke combinaties
Lekker op de bank
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php function B($options = array()) { $out = $this->A($options); $options = $out['options']; // rest van method hier } function A($options) { foreach($options as $key => $value) { // Hier 25 regels code $options[$key] = $value; // Deze lijn veranderde ik, en gek genoeg werkte function B niet meer // Hier nog eens 25 regels } return ('options' => $options, 'out' => $out); } |
[ Voor 1% gewijzigd door Freeaqingme op 24-08-2010 01:49 . Reden: Kleurtjes toegeovegd aan code ]
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
^^ Met mijn relatief beperkte ervaring met php begrijp ik er niks van. Iemand zin om het uit te leggen? Lijkt me alsof iemand niet weet hoe die met verwijzingen kan werken, maar verder kom ik niet.freakingme schreef op dinsdag 24 augustus 2010 @ 01:47:
Ik snapte niet waarom als ik in method A iets weghaalde, function B niet meer werkte, code is van ongeveer een jaar geleden. Zojuist extraheer ik daar het volgende uit: [...]
Zo heb je snel bugs te pakken, of onbegrip van jezelf of anderen die aan deze code moeten werken.
Ampera-e (60kWh) -> (66kWh)
1
2
3
| foreach($options as $key => $value) { $options[$key] = $value; // Deze lijn veranderde ik, en gek genoeg werkte function B niet meer } |
Dat is toch logisch, dan overschrijf je de initiële waardes van de array waar je doorheen loopt?!?
1
| return ('options' => $options, 'out' => $out); |
Dit lijkt mij trouwens ook niet te werken...
[ Voor 6% gewijzigd door basvd op 24-08-2010 09:07 ]
1
2
3
4
5
6
7
| /** * @param $plaats - Must be "Den_Haag". If nothing is passed. "Den_Haag" will be used. * @return "Den Haag". */ function replaceDenHaag($plaats = "Den_Haag") { return "Den Haag"; } |
Design-by-contract,
Om er dan achter te komen dat je je eigen RDBMS hebt geschrevenSPee schreef op maandag 23 augustus 2010 @ 18:04:
En je kunt ook doorslaan en alles zo uitbreidbaar mogelijk maken.
[knip]
We are shaping the future
We kunnen nog een stap verder optimaliseren in dat gevalYopY schreef op dinsdag 24 augustus 2010 @ 09:42:
PHP:
1 2 3 4 5 6 7 /** * @param $plaats - Must be "Den_Haag". If nothing is passed. "Den_Haag" will be used. * @return "Den Haag". */ function replaceDenHaag($plaats = "Den_Haag") { return "Den Haag"; }
Design-by-contract,. De aanroeper controleert zelf maar of 'ie Den_Haag of Pietje_Puk naar de functie stuurt.
1
2
3
4
5
| <?php function replaceDenHaag() { return "Den Haag"; } ?> |
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Je moet er nog wel een verhaal bijdoen over self-documenting code hé?Boeboe schreef op dinsdag 24 augustus 2010 @ 10:32:
[...]
We kunnen nog een stap verder optimaliseren in dat geval
PHP:
1 2 3 4 5 <?php function replaceDenHaag() { return "Den Haag"; } ?>
...waarom bestond deze functie ook maar weer?

Dit vind ik toch wel een van de mooiere, echt geweldig. Waarschijnlijk had de functie ooit nog nut, maar is dat nut eruit gesloopt en de rest blijven staanYopY schreef op dinsdag 24 augustus 2010 @ 09:42:
PHP:
1 2 3 4 5 6 7 /** * @param $plaats - Must be "Den_Haag". If nothing is passed. "Den_Haag" will be used. * @return "Den Haag". */ function replaceDenHaag($plaats = "Den_Haag") { return "Den Haag"; }
Design-by-contract,. De aanroeper controleert zelf maar of 'ie Den_Haag of Pietje_Puk naar de functie stuurt.
Ampera-e (60kWh) -> (66kWh)
Dat levert dus zulke code op:
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
53
54
55
56
57
58
59
60
| procedure BepaaldeProcedure; begin if (someQuery.recordcount > 0) then begin if (testBestandsnaamExtensie) then begin try // doe wat leuks met een zootje variabelen except on E: exception do begin // Log error, geef melding end; end; try // Doe magic-achtige dingen except end; end else begin if (eenVoorwaarde) then begin // Voer wat magic uit; end else begin andereVoorwaarde := true; // Verander wat anders end; if (andereVoorwaarde) then begin if (specifiekeVoorwaarde) then begin // Doe wat extra voorbereidend werk end; if (weerAndereVoorwaarde) then begin // Doe de uiteindelijke magic end else begin // Doe nog wat leuks wat op magic lijkt end; end else begin // Toon error dat variabele niet Ok is end; end; end else begin // Toon melding dat er geen records zijn end; end; |
En daar heb ik meer dan 100 regels code weggeknipt. Totaal niet te volgen, hoewel dat ook aan gebrek aan functionaliteit van de IDE kan liggen.
Ik zou het zo doen, quick & dirty:
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
| procedure BepaaldeProcedure; begin if (someQuery.recordcount = 0) then begin // Toon melding dat er geen records zijn exit; end; if (testBestandsnaamExtensie) then begin try // doe wat leuks met een zootje variabelen except on E: exception do begin // Log error, geef melding end; end; try // Doe magic-achtige dingen except end; exit; end // Dit wordt alleen bij andere extensies gedaan if (eenVoorwaarde) then begin // Voer wat magic uit; // Toon error dat variabele niet Ok is exit; end; // Verander wat anders if (specifiekeVoorwaarde) then begin // Doe wat extra voorbereidend werk end; if (weerAndereVoorwaarde) then begin // Doe de uiteindelijke magic end else begin // Doe nog wat leuks wat op magic lijkt end; end; |
Iemand?
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Mooi voorbeeld van het Inner Platform Effect.
Ik dacht meer aan Soft Coding
Ik kan alleen dat plaatje van de grafische rule-engine niet meer vinden
[ Voor 8% gewijzigd door MBV op 24-08-2010 12:51 ]
1
| $res = mysql_query("SELECT username FROM loginusers WHERE username='".$username."' AND username != '".$username."'"); |
Om te kijken of de gebruikersnaam al bestaat.
👑

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
[ Voor 11% gewijzigd door .oisyn op 25-08-2010 16:48 ]
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.
Alleen loop je dan meteen tegen het probleem aan dat je de staat van de database veranderd door hem te observeren.oisyn schreef op woensdag 25 augustus 2010 @ 16:48:
Da's een quantum mechanische database. Er wordt gezocht naar een rij die in de superpositie staat waarbij de kolom username zowel wel als niet overeenkomt met $username. Lijkt me geen slecht programmeervoorbeeld.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Dus MySQL is een quantummechanische database?Woy schreef op woensdag 25 augustus 2010 @ 16:55:
[...]
Alleen loop je dan meteen tegen het probleem aan dat je de staat van de database veranderd door hem te observeren
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Af en toe, als de stand van de zon, maan en venus zo staan dat de qm-bit van mysql op 2 staatSebazzz schreef op woensdag 25 augustus 2010 @ 17:03:
[...]
Dus MySQL is een quantummechanische database?
Best handig, met quantum entanglement hoef je replication niet meer aan te zetten. Je hebt zelfs geen netwerkverbinding meer nodigLye schreef op woensdag 25 augustus 2010 @ 20:16:
[...]
Af en toe, als de stand van de zon, maan en venus zo staan dat de qm-bit van mysql op 2 staat
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.
Ik zal toch moeten testen of de functie wel werkt als de zon, de maan en venus in de goede stand staan.
👑
Het is makkelijker als je in de buurt van de LHC woont.ajakkes schreef op donderdag 26 augustus 2010 @ 07:30:
Ik heb nu al een tijdje geprobeerd om de qm-bit zelf op twee te krijgen maar dat lukt niet. Kan iemand hier mee helpen of moet ik hier een nieuw topic voor openen.
Ik zal toch moeten testen of de functie wel werkt als de zon, de maan en venus in de goede stand staan.
https://niels.nu
Vergeet dan meteen de vogel-laat-stokbrood-vallen routine niet te unittesten..Hydra schreef op donderdag 26 augustus 2010 @ 14:20:
[...]
Het is makkelijker als je in de buurt van de LHC woont.
CoC: MISSeR | Steam: r3veng
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| function bla(){ LastMonthYear='201107'; var month = parseInt(LastMonthYear.substr(4,2),10); var year = parseInt(LastMonthYear.substr(0,4),10); var noOfDays = getNumberOfDays(month, year); var lastDate = '' + LastMonthYear + setLengthTwo(noOfDays); } //converts days and months to two characters (e.g. 8 -> 08) function setLengthTwo(string) { var temp = ''+string; if (temp.length >= 2) {return temp;} else if (temp.length < 2) {temp = '0'+temp; return temp;} } |
en nog eentje:
1
| amount = Math.round(amount+0.49); //round up to integer |
Werkt allemaal prima, daar niet van
[ Voor 14% gewijzigd door BarôZZa op 31-08-2010 04:37 ]
Een try-except-end zonder code in de except?? Iew ..CodeCaster schreef op dinsdag 24 augustus 2010 @ 12:26:
Alle Den Haaglol ten spijt kwam ik vanmorgen weer een pareltje tegen. Ik ben pertinent tegen geneste if's. Het lijkt wel of men hier alleen positieve waarden aan een if wil geven, en "exit is een soort goto dus kun je beter niet gebruiken". Ik heb dus if's van een keer of tien diep gezien...
Dat levert dus zulke code op:
[...]
En daar heb ik meer dan 100 regels code weggeknipt. Totaal niet te volgen, hoewel dat ook aan gebrek aan functionaliteit van de IDE kan liggen.
Ik zou het zo doen, quick & dirty:
Delphi:
1 2 3 4 5 6 7 8 9 [...] try // Doe magic-achtige dingen except end; exit; end [...]
Iemand?
Als je het al doet, dan met een heleboel commentaar waarom het _echt_ noodzakelijk is..
-
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
In Java-land lopen ook wel puristen rond die vinden dat je een return in een method alleen aan het eind moet zetten. Vervolgens is de opvatting als je meer dan 3 control-structures moet nesten dat je dan beter een stuk code moet refactoren.CodeCaster schreef op dinsdag 24 augustus 2010 @ 12:26:
Ik ben pertinent tegen geneste if's. Het lijkt wel of men hier alleen positieve waarden aan een if wil geven, en "exit is een soort goto dus kun je beter niet gebruiken". Ik heb dus if's van een keer of tien diep gezien...

De regel-van-de-duim voor mij is: "Minder code is beter." Dat geldt ook voor het "oppervlak" dat een stuk code inneemt.
Hey ... maar dan heb je ook wat!
Nikss maakt je code leesbaarder wanneer je een deel van je code extract naar een aparte private method, mits je een duidelijke naam voor die methode kiest. Mensen die vinden dat er een maximum lengte is voor methodenamen moeten daarentegen standrechtelijk worden geëxecuteerd.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Yes, maar de grap zat hem vooral in het feit dat setLengthTwo(noOfDays) aangeroepen wordt. Ik ben nog geen maand van minder dan 10 dagen tegengekomen
Nee, maar wel de dagen 1 t/m 9. Nou is dat natuurlijk prima op te lossen met een display maskje ergens, maar goed.BarôZZa schreef op dinsdag 31 augustus 2010 @ 13:23:
[...]
Yes, maar de grap zat hem vooral in het feit dat setLengthTwo(noOfDays) aangeroepen wordt. Ik ben nog geen maand van minder dan 10 dagen tegengekomen
Dagen 1 tm 9 zijn irrelevant.
Ik heb het een enkele keer wel eens gehad op het moment dat er een onjuiste exceptie gegeven werd in third-party code, waarvan wij de broncode niet hadden.Laurens-R schreef op dinsdag 31 augustus 2010 @ 11:09:
Zoiets kan gewoon haast niet nodig zijn, omdat je dan feitelijk logic-by-exception (ik verzin hem terplekke; excuus als hier een officielere term voor bestaat) aan het implementeren bent. Exceptions zijn tenslotte exceptional. Exceptions zijn wat mij betreft een uiterst redmiddel.
Psst: StrToIntDef()CodeCaster schreef op dinsdag 31 augustus 2010 @ 11:14:
Ik heb het stuk code niet meer, geen idee ook meer waar het vandaan kwam (nogal veel code voorbij zien komen de afgelopen week), maar volgens mij was het een parse van een string naar een int, waarbij de int eerst op 0 was gezet. Dat kan natuurlijk ook in de except, maar ik vond het de moeite niet waard om te verplaatsen.
-
mwah.. De grootste WTF in die code vind ik meer dat eerst de 0 er af gesloopt wordt door de parseInt om hem gelijk daarna weer toe te voegen, maar dat kan ook bij het aanpassen van het voorbeeld ontstaan zijn.BarôZZa schreef op dinsdag 31 augustus 2010 @ 13:35:
Er wordt een functie aangeroepen die de lengte van de maand geeft, zoals ik al zei.
Dagen 1 tm 9 zijn irrelevant.
Er is een heel groot grijs gebied vanaf 'afwijken van de happyflow' tot aan 'computercrash'.Laurens-R schreef op dinsdag 31 augustus 2010 @ 11:09:
Exceptions zijn wat mij betreft een uiterst redmiddel.
Exceptions zijn een ideale manier om aanroepende code op de hoogte te brengen van een probleem wat lokaal niet afgehandeld kan worden.
[ Voor 31% gewijzigd door Janoz op 31-08-2010 13:53 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Er wordt een functie getNumberOfDays aangeroepen met die integers, daar is dat voor.Janoz schreef op dinsdag 31 augustus 2010 @ 13:49:
[...]
mwah.. De grootste WTF in die code vind ik meer dat eerst de 0 er af gesloopt wordt door de parseInt om hem gelijk daarna weer toe te voegen, maar dat kan ook bij het aanpassen van het voorbeeld ontstaan zijn.
Voor de rest een hoop copy pasta. Is trouwens van een zeer groot bedrijf.
1
2
3
4
5
6
7
8
9
10
11
12
| for($i = 1; $i <= 31; $i++) { $month = date("m", strtotime($values['startDate'])); $year = date("Y", strtotime($values['startDate'])); $date = $year.$month.$i; if ( ($date >= $values['startDate']) && ($date <= $values['endDate']) ) { $rd = substr($date,0,4)."-".substr($date,4,2)."-".substr($date,6,2)."T00:00:00"; doeIets(); } } |
Versimpeld voorbeeld van een systeem dat ik moet onderhouden en het staat vol met dit soort dingen

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dat, en ook meer van dat soort dingen, lijkt me echt een gevalletje gebrek aan bekendheid (of beschikbaarheid) met datum-API's, standaard (binnen PHP of JS zelf) of als externe bibliotheek. NIH syndroom, maar ook wel The Developer's Dilemma (alhoewel het in dezen een beginnende variant daarvan lijkt te zijn).G70boX schreef op dinsdag 31 augustus 2010 @ 15:44:
Nu het toch over datums gaat....
PHP:
1// hax
Versimpeld voorbeeld van een systeem dat ik moet onderhouden en het staat vol met dit soort dingen.
(Samenvatting voor degenen die niet op TDWTF durven kijken: programmeurs hebben vaak een hekel aan saaie code en willen graag (te) complexe dingen maken (ofwel: de bestaansreden van TDWTF))
(Edit: URL fixxed, TDWTF moet geen uitroeptekens of komma's in zijn URLs gebruiken. Thanks nescafe!)
[ Voor 5% gewijzigd door YopY op 31-08-2010 16:51 ]
Jaja, wat gebeurd er als de start & enddate in 2 verschillende maanden liggen...G70boX schreef op dinsdag 31 augustus 2010 @ 15:44:
Nu het toch over datums gaat....
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 for($i = 1; $i <= 31; $i++) { $month = date("m", strtotime($values['startDate'])); $year = date("Y", strtotime($values['startDate'])); $date = $year.$month.$i; if ( ($date >= $values['startDate']) && ($date <= $values['endDate']) ) { $rd = substr($date,0,4)."-".substr($date,4,2)."-".substr($date,6,2)."T00:00:00"; doeIets(); } }
Versimpeld voorbeeld van een systeem dat ik moet onderhouden en het staat vol met dit soort dingen.
Assumptions are the mother of all fuck ups | iRacing Profiel
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Ja, alhoewel het, tenminste in Java en tenminste volgens bepaalde bronnen die er vandaag dingen over ge'blogd' hebben qua performance niet eens zoveel uit maakt.Laurens-R schreef op dinsdag 31 augustus 2010 @ 11:09:
Zoiets kan gewoon haast niet nodig zijn, omdat je dan feitelijk logic-by-exception (ik verzin hem terplekke; excuus als hier een officielere term voor bestaat) aan het implementeren bent. Exceptions zijn tenslotte exceptional. Exceptions zijn wat mij betreft een uiterst redmiddel.
Maar als het niet zoveel uit maakt moet je gewoon programmeren zodat het logisch is.
(hij geeft overigens ook wel een elegante oplossing voor het 'if null return X' ding - maak een nullobject die X teruggeeft. Als programmeur moet je er dan natuurlijk wel voor zorgen dat je nooit en te nimmer dingen op null initialiseert of null teruggeeft - een methode die ik tegenwoordig zoveel mogelijk probeer toe te passen, ook al programmeer ik niet zoveel)
Verwijderd


Heb er maar 1 woord voor:
Epic fail..

Dat zijn typisch (wigwams) van die dingen die een developer doet tijdens development, en dan vooral als hij nog niet helemaal goed weet wat er gebeurt, maar die vergeten worden en gewoon zo gelaten worden.Verwijderd schreef op vrijdag 03 september 2010 @ 03:11:
Ik wil zo weinig mogelijk van mezelf kunnen posten, maar dit is wel heel erg...Bij een hickup van de database server, werd (tot 5 min. geleden) de db username en password weergeven in de PDO Exception.
Heb er maar 1 woord voor:
Epic fail..
Verwijderd
Van mezelf, doordat hij geen verbinding kon maken met de database gooide hij een Exception die ik niet gevangen hebMichali schreef op vrijdag 03 september 2010 @ 09:25:
Is dat een fout van jezelf of van PDO? Waarom gebeurde dat dan en hoe heb je het opgelost?
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ik kwam zojuist gewoon een functie tegen die een willekeurige folder van je harde schijf inleest. Ik kreeg alleen een jeukend gevoel toen ik las in de specificatie dat hij niet verder dan 3 niveau's diep in de onderliggende folderstructuur kon 'scannen'. Kijk ik in de code; kom ik het volgende tegen... (in psuedocode):
1
2
3
4
5
6
7
8
9
10
11
12
| folderCount = GetSubFolderCount() if folderCount > 0 then foreach (subfolder in Folders) //scancode hier... folderCount = GetSubFolderCount() if folderCount > 0 then foreach (subfolder in Folders) //scancode hier... folderCount = GetSubFolderCount() if folderCount > 0 then foreach (subfolder in Folders) ...etc |
you get the picture....
... recursie is voor velen blijkbaar een moeilijk concept, maar ik denk niet dat je dan in een bedrijf software moet gaan ontwikkelen

[ Voor 6% gewijzigd door Laurens-R op 03-09-2010 10:06 ]

Kater? Eerst water, de rest komt later
Verwijderd
... ander leuk voorbeeldje in diezelfde app was de import functionaliteit van data in de SQL Server database. Dat ging niet echt op een manier van regel voor regel inlezen en een stored procedure gebruiken... zelfs een INSERT statement was al te veel gevraagd... Want wat doe je als je in 1 keer data wilt dumpen in een tabel... (houd je vast):
- start een batch script.
- remove all constraints van een tabel (anders gaat het import proces natuurlijk 'zeuren')
- plemp de data direct in die tabel via een command line tool
- alle constraints weer aanzetten
- hoop dat data voldoet aan de constraints.
- start de hoofdapplicatie
- start met bidden.
Niet in de message, in de stack trace.Janoz schreef op vrijdag 03 september 2010 @ 09:38:
Nou, dan is de grootste WTF dus echt niet van jezelf. Degene die de credentials in de message zet is degene die gekielhaald moet worden.
1
2
3
4
5
| exception 'PDOException' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host 'pietjepuk' (1)' in /var/www/test/Database.php:21 Stack trace: #0 /var/www/test/Database.php(21): PDO->__construct('mysql:dbname=te...', 'user', 'password') #1 /var/www/test/index.php(52): Database->Connect() #2 {main} |
Ik weet niet of ik dat een WTF moet vinden, lijkt me eerder by design. Je moet de stacktrace gewoon nooit buiten debug laten outputten.
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ach... Mijn werkgever vind security maar tijdverspilling en zowat alles hier heeft generieke passwords, geen passwords, guest accounts of default passwords...Verwijderd schreef op vrijdag 03 september 2010 @ 09:31:
[...]
Van mezelf, doordat hij geen verbinding kon maken met de database gooide hij een Exception die ik niet gevangen heb, en daar staat dan dus gebruikersnaam en wachtwoord als plaintext in.
Nu wordt het wel afgevangen en gelogd..
En wachtwoord veranderd voor zekerheid.
Ja ook de databases van het kloksysteem, urenregistratie, hrm-pakket en moar
Je moet niet de waardes van de variabelen laten outputten omdat je nooit weet wie die dingen leest. C# toont je het type en de naam van de parameter, maar niet de waarde.CodeCaster schreef op vrijdag 03 september 2010 @ 10:40:
[...]
Niet in de message, in de stack trace.
code:
1 2 3 4 5 exception 'PDOException' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host 'pietjepuk' (1)' in /var/www/test/Database.php:21 Stack trace: #0 /var/www/test/Database.php(21): PDO->__construct('mysql:dbname=te...', 'user', 'password') #1 /var/www/test/index.php(52): Database->Connect() #2 {main}
Ik weet niet of ik dat een WTF moet vinden, lijkt me eerder by design. Je moet de stacktrace gewoon nooit buiten debug laten outputten.
We are shaping the future
Dit topic is gesloten.
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.