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: 516179
Meningen en feiten zijn iets heel anders. We hebben met z'n allen afgesproken een bepaalde golflengte van licht groen te noemen en aantoonbaar (meetbaar) reflecteert gras (onder wit licht) licht met de golflengte die valt in het gebied wat we groen noemen. Dat is dus een feit.Zoijar schreef op dinsdag 17 september 2013 @ 20:47:
[...]
Ik word zo moe van die meningenWat als mijn mening nou is dat al het gras paars is. Zou je daar dan voorbij lezen en denken, och, ja, is z'n mening heh, moet kunnen, vrij land. Of zou je gewoon zeggen, ik denk dat jou mening niet helemaal juist is?
Dat staat nogal ver af van een mening over een codestijl, waar voor zo ver ik weet geen universele afspraken vergelijkbaar met de afspraken rondom kleuren van zijn. Daarnaast is je reactie een voorbeeld van een "Argumentum ad hominem" waarbij je de originele stelling voorbij gaat en in plaats daarvan mijn overige uitspraken aanvalt.
Volgens mij heb ik dat wel gedaan? Ik heb in ieder geval geen tegenargument gezien buiten dat het onzin zou zijn en een achterlijke smiley. Plus een voorbeeld wat niet direct een realistische situatie is en dus geen goed voorbeeld van wat ik bedoel. Let ook op dat ik zeg "waarschijnlijk", er zijn dus prima situaties te bedenken waarbij de code wel goed is en whitespace de enige oplossing is. In de praktijk zal dat echter niet zo snel het geval zijn..oisyn schreef op dinsdag 17 september 2013 @ 22:29:
[...]
Als je niet in staat bent je mening te verdedigen, doe dan ook gewoon niet mee aan de discussie want dan is die mening geen moer waard.
Als je een hele lijst van variabele declaraties met toekenningen hebt dan is het logisch dat je denkt: Pfoe das niet echt leesbaar zo.
Mijn mening is dat je dan niet moet gaan proberen met whitespace het meer leesbaar te maken, maar in plaats daarvan moet kijken naar de structuur van het geheel om te voorkomen dat je een hele lijst variabele declaraties met toekenningen hebt.
Oftewel: Onleesbare code is vaak op een ander niveau niet goed, dat proberen op te lossen met whitespace pakt niet de oorzaak aan, maar slechts een symptoom.
Daarnaast is het qua onderhoud niet echt handig, als je over de grens van spaties van je voorganger heen gaat moeten alle regels worden aangepast.
In de woorden van Robert C Martin met betrekking tot horizontale uitlijning: "If I have long lists that need to be aligned, the problem is the length of the lists, not the lack of alignment."
[ Voor 29% gewijzigd door Anoniem: 516179 op 18-09-2013 09:22 ]
Verwijderd
Het mag zo zijn dat alle golflengtes A < X < B groen genoemd worden, een kleur bestaat niet uit een enkele golflengte, maar uit een menging van verschillende golflengtes. Of een bepaalde kleur groen is is volgens elke standaard weer anders.Anoniem: 516179 schreef op woensdag 18 september 2013 @ 09:04:
[...]
Meningen en feiten zijn iets heel anders. We hebben met z'n allen afgesproken een bepaalde golflengte van licht groen te noemen en aantoonbaar (meetbaar) reflecteert gras (onder wit licht) licht met de golflengte die valt in het gebied wat we groen noemen. Dat is dus een feit.
Een alien met receptoren voor een breed scala aan golflengtes zal waarschijnlijk denken: "WTF waarom zenden jullie TV's alleen mengels van R, G en B uit?!"

[ Voor 22% gewijzigd door .oisyn op 18-09-2013 17:12 ]
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.
Codestijl zou je ook het effect kunnen meten met verschillende tests.Anoniem: 516179 schreef op woensdag 18 september 2013 @ 09:04:
Meningen en feiten zijn iets heel anders. We hebben met z'n allen afgesproken een bepaalde golflengte van licht groen te noemen en aantoonbaar (meetbaar) reflecteert gras (onder wit licht) licht met de golflengte die valt in het gebied wat we groen noemen. Dat is dus een feit.
Dat staat nogal ver af van een mening over een codestijl, waar voor zo ver ik weet geen universele afspraken vergelijkbaar met de afspraken rondom kleuren van zijn. Daarnaast is je reactie een voorbeeld van een "Argumentum ad hominem" waarbij je de originele stelling voorbij gaat en in plaats daarvan mijn overige uitspraken aanvalt.
Dat over die golflengtes is wel grappig: dus dan kunnen we het eens zijn over het feit dat deze twee honden dezelfde kleur hebben, zelfde golflengtes immers

Even tussendoor
Anyway, ik ga geen hele discussie aan over wat waarheid is etc. Ook een mening moet je verdedigen als je hem uit.
[ Voor 6% gewijzigd door Zoijar op 18-09-2013 18:41 ]
35
36
37
38
39
40
41
42
| inters = [] for result in results: p1 = result['pos'][q1] p2 = result['pos'][q2] for item in p1: if item + 1 in p2 and item not in result: inters.append(item) |
Was niet helemaal de bedoeling
My favorite programming language is solder.
Verwijderd
Het is trouwens sneller als je beide lijsten sorteert en er daarna doorheen wandelt. Dat is O( n log(n) ).
1
2
3
4
| b1 = [1,2,3,4] b2 = [0,3,4,5] inters = set(b1).intersection(set(b2)) |
In dit geval wilde ik een intersectie maken van twee lijsten, zonder gebruik te maken van build-ins.
Mijn oplossing werkte wel (soort van), maar is niet echt efficiënt.
My favorite programming language is solder.
Afhangend van verschillende factoren is hashen waarschijnlijk nog sneller. Theoretisch ammortized O(n). Wel meer space O(n) itt O(log n) voor inplace quicksort. Het hangt van je specifieke use-case af. Maar in ieder geval allebei een stuk beter dan O(n^2)Verwijderd schreef op woensdag 18 september 2013 @ 19:50:
Het is trouwens sneller als je beide lijsten sorteert en er daarna doorheen wandelt. Dat is O( n log(n) ).
En parallel wordt het weer een heel ander verhaal.
[ Voor 5% gewijzigd door Zoijar op 18-09-2013 20:02 ]
Anoniem: 529096
Op dezelfde site staat ook een interview met Bjarne Stroustrup waarin hij uitlegt wat zijn motieven waren om de taal C++ te bedenken. http://harmful.cat-v.org/software/c++/I_did_it_for_you_allUit http://harmful.cat-v.org/software/java komt de fantastische opmerking:
This file says it all. http://svn.codehaus.org/g...vy/runtime/ArrayUtil.java
Coding style zijn niet "zomaar" afspraken. Goeie coding style regels komen voort uit:Anoniem: 516179 schreef op woensdag 18 september 2013 @ 09:04:
[...]
Meningen en feiten zijn iets heel anders. We hebben met z'n allen afgesproken een bepaalde golflengte van licht groen te noemen en aantoonbaar (meetbaar) reflecteert gras (onder wit licht) licht met de golflengte die valt in het gebied wat we groen noemen. Dat is dus een feit.
Dat staat nogal ver af van een mening over een codestijl, waar voor zo ver ik weet geen universele afspraken vergelijkbaar met de afspraken rondom kleuren van zijn. Daarnaast is je reactie een voorbeeld van een "Argumentum ad hominem" waarbij je de originele stelling voorbij gaat en in plaats daarvan mijn overige uitspraken aanvalt.
- observaties over hoe het menselijk brein (efficientst) informatie verwerkt
- observaties over hoe het menselijk brein (efficientst) informatie verzamelt
- observaties uit het verleden over wat wel en niet werkt
- observaties over de psyche van de programmeur (lazy bastards
- etc.
Dat jij ze afdoet als "zomaar afspraken" (met een naar ik lees denigrerende ondertoon) toont aan dat je dit nog niet helemaal begrepen hebt.
Er zijn maar 2 stakeholders wanneer je codeert: de eindgebruiker en de persoon die na jou die code moet wijzigen (wat jijzelf kan zijn). Coding rules zijn een onderdeel van het kwaliteitsprocess die voor die 2de stakeholder zorgt.
ASSUME makes an ASS out of U and ME
Inhoud is:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| <?php //makes $page_nr in statement available; global $page_nr; $host="XXX-weggehaald"; $user="XXX-weggehaald"; $password="XXX-weggehaald"; $dbname = "website"; $cxn = mysqli_connect($host, $user, $password, $dbname) or exit ("Couldn't connect to server"); $paginaurl=$_SERVER['REQUEST_URI']; $catchpag1 = 'disclaimer.php'; $pag1 = strpos($paginaurl, $catchpag1); if ($pag1 == 1){ $page_nr = 1; } $catchpag2 = 'contact.php'; $pag2 = strpos($paginaurl, $catchpag2); if ($pag2 == 1){ $page_nr = 2; } $catchpag3 = 'assistance.php'; $pag3 = strpos($paginaurl, $catchpag3); if ($pag3 == 1){ $page_nr = 3; } [..KNIP..] Dat ging dus nog stuk of 30 regels door 8)7 [.. KNIP ..] $query = "SELECT * FROM website WHERE page_nr = ".$page_nr; $result = mysqli_query($cxn,$query) or exit ("Couldn't execute query."); $row = mysqli_fetch_array($result); echo $row['page_content']; mysqli_close($cxn); ?> |
Hmmz. Wat doet het nu?
Zo te zien maakt-ie een sql query, op basis van URL. Wat zou er dan in de tabel 'website' kunnen zitten waar de page_nr zit? Ik keek in de database, onder tabel websites.
En wat tref ik aan in content of page_nr 1?
1
2
3
4
5
6
| <html> <title>blabla</title> <body> Inhoud van die pagina's, overeenkomend met wat er opgevraagd is. </body> </html> |
Iedere content van ieder page_nr (cijfer verschillend) bevat HTML-pagina die allemaal van elkaar verschillen. Okay.. het werkt. Maar ben ik dom, of ontgaat mij het nut hiervan?
Die worden als code uitgespuugd met echo $row, zodat iedere pagina op basis van URL HTML-inhoud weergeeft. Wat is dit.

[ Voor 11% gewijzigd door Hatsieflatsie op 24-10-2013 19:17 ]
Nee, dit is gewoon een complete faal van iemand die de klok heeft horen luiden maar niet weet waar de klepel hangt.
Engineering is like Tetris. Succes disappears and errors accumulate.
Zelden zo'n creatieve 'CMS'-like oplossing gezien. Ben wel benieuwd waarom-ie het zo doet.
[ Voor 27% gewijzigd door Hatsieflatsie op 25-10-2013 13:09 ]
Clash of Clans - MISSeR :: #Y0JU9R98 ::
After all, we are nothing more or less than what we choose to reveal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <!-- dirty patch --> <script type="text/javascript"> function checkDoRedirect() { if (window.location.protocol == 'http:'){ var secureLink = 'https://' + window.location.host + window.location.pathname + window.location.search; window.location.href = secureLink; } } //change || to && to disable quickly! if ( true || false ){ addEvent(window,"load",function(e){checkDoRedirect();}); } </script> |
if true or false.
Oh wacht....
2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI
Gebruik ik ook regelmatig om stukken code aan en af te zetten hoor :-). Het is slordig dat het zichtbaar is op niet-development.Zidane007nl schreef op dinsdag 29 oktober 2013 @ 21:48:
Ik zat net een (saaie en lange) vragenlijst in te vullen van HBO Monitor, maar wat daar onderaan in de broncode staat ...
[...]
if true or false.
Comments hebben het nadeel niet uitvoerbaar te zijn. Ik gebruik het bijvoorbeeld om stukken code snel uit te schakelen en eventueel tijdens debugging een breakpoint te zetten op de IF en geforceerd de IF laten uitvoeren; of rechtstreeks code wijzigen tijdens het debuggen :-) handig hoor.
[ Voor 36% gewijzigd door Styxxy op 30-10-2013 00:18 ]
Dit is natuurlijk gewoon wachten op een developer die er "true && false" in zet en het per ongeluk commitZidane007nl schreef op dinsdag 29 oktober 2013 @ 21:48:
Ik zat net een (saaie en lange) vragenlijst in te vullen van HBO Monitor, maar wat daar onderaan in de broncode staat ...
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!-- dirty patch --> <script type="text/javascript"> function checkDoRedirect() { if (window.location.protocol == 'http:'){ var secureLink = 'https://' + window.location.host + window.location.pathname + window.location.search; window.location.href = secureLink; } } //change || to && to disable quickly! if ( true || false ){ addEvent(window,"load",function(e){checkDoRedirect();}); } </script>
if true or false.
zou ik eerder gaan voorMBV schreef op woensdag 30 oktober 2013 @ 09:45:
waarom zou je niet gewoon "if (true)" neerzetten?
1
2
3
4
| //if (false ) { addEvent(window,"load",function(e){checkDoRedirect();}); } |
Kan je het uitcommenten als je het snel wilt disablen.
Een REST request: api.ekomi.de/v2/getSettings?auth=0123|password&version=cust-1.0.0
Het resultaat: serialized php
Handige API als je niet met PHP werkt.
Maak je niet druk, dat doet de compressor maar
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Vooral ook een handige API voor iemand die bij alle klanten van ekomi een backdoor wil droppen...DJMaze schreef op woensdag 30 oktober 2013 @ 13:27:
Niet echt programmeer code maar wel een WTF?!?
Een REST request: api.ekomi.de/v2/getSettings?auth=0123|password&version=cust-1.0.0
Het resultaat: serialized php
Handige API als je niet met PHP werkt.
Anoniem: 541917
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
| <form method="POST" action="insert.php"> <table border="0" cellpadding="1" width="550" id="table1"> <tr> <td width="340" align="right">Naam:</td> <td width="10"> </td> <td width="200"><input class="form-control input-sm" name="Naam" type="text" size="30" placeholder="Naam" tabindex="1"></td> </tr> <tr> <td width="340" align="right">Adres:</td> <td width="10"> </td> <td width="200"><input class="form-control input-sm" type="text" name="Adres" size="30" tabindex="1" placeholder="Adres"></td> </tr> <tr> <td width="340" align="right">Tel:</td> <td width="10"> </td> <td width="200"><input class="form-control input-sm" type="text" name="Telefoon" size="30" tabindex="1" placeholder="Tel. Nr."></td> </tr> <tr> <td width="340" align="right">Aantal personen:</td> <td width="10"> </td> <td width="200"><input class="form-control input-sm" type="text" name="Personen" size="30" tabindex="1" placeholder="Aantal"></td> </tr> <tr> <td width="340" align="right">Aankomst uur:</td> <td width="10"> </td> <td width="200"><input class="form-control input-sm" type="text" name="Uur" size="30" tabindex="1" placeholder="Uur"></td> </tr> <tr> <td width="340" align="right"> </td> <td width="10"> </td> <td width="200"> </td> </tr> </table> <p>Vertel ons wat je zou willen eten!</p> <table border="0" cellpadding="1" width="550" id="table2"> <tr> <td width="250" height="31"><b>Keuzes:</b></td> <td align="center" width="100" height="31"><b>Hoeveelheid</b></td> <td align="right" height="31" width="60"><b>Prijs </b></td> <td align="right" height="31" width="140"><b>Totaal bedrag</b></td> </tr> <tr> <td width="250">Mosselen met frieten:</td> <td align="center" width="100"> <input type="text" name="Optie1" size="5" tabindex="5"></td> <td align="right" width="60">€ 16</td> <td align="right" width="140"> <input type="text" size="12" tabindex="99"></td> </tr> <tr> <td width="250">Mosselen met brood:</td> <td align="center" width="100"> <input type="text" name="Optie2" size="5" tabindex="5"></td> <td align="right" width="60">€ 16</td> <td align="right" width="140"> <input type="text" size="12" tabindex="99"></td> </tr> <tr> <td width="250">Stoofvlees met frieten</td> <td align="center" width="100"> <input type="text" name="Optie3" size="5" tabindex="5"></td> <td align="right" width="60">€ 10</td> <td align="right" width="140"> <input type="text" size="12" tabindex="99"></td> </tr> <tr> <td width="250">Stoofvlees met brood</td> <td align="center" width="100"> <input type="text" name="Optie4" size="5" tabindex="5"></td> <td align="right" width="60">€ 10</td> <td align="right" width="140"> <input type="text" size="12" tabindex="99"></td> </tr> <tr> <td width="250">Curryworst met frieten</td> <td align="center" width="100"> <input type="text" name="Optie5" size="5" tabindex="5"></td> <td align="right" width="60">€ 3</td> <td align="right" width="140"> <input type="text" size="12" tabindex="99"></td> </tr> <tr> <td width="250">Mosselen met frieten <small>(kinder)</small></td> <td align="center" width="100"> <input style="width:60px;" class="form-control input-sm" type="text" name="Optie6" size="5" tabindex="5" placeholder="0x"></td> <td align="right" width="60">€ 8</td> <td align="right" width="140"> <input style="width:110px" class="form-control input-sm" type="text" size="12" tabindex="99" placeholder="Totaal bedrag"></td> </tr> <tr> <td width="250">Stoofvlees met frieten <small>(kinder)</td> <td align="center" width="100"> <input style="width:60px" class="form-control input-sm" type="text" name="Optie7" size="4" tabindex="5" placeholder="0x" /></td> <td align="right" width="60">€ 5</td> <td align="right" width="140"> <input style="width:110px;" class="form-control input-sm" type="text" size="4" tabindex="99" placeholder="Totaal bedrag"></td> </tr> <tr> <td width="250"> </td> <td align="center" width="100"> </td> <td align="right" width="60"> </td> <td align="right" width="140"> </td> </tr> <tr> <td width="250"> <input class="btn btn-xs btn-success" type="button" value="Submit" onclick="this.form.submit()"> <input class="btn btn-danger btn-xs" type="reset" value="Reset" /> </td> <td align="center" width="100"> </td> <td align="right" width="60"><b>Totaal:</b></td> <td align="right" width="140"><input type="text" name="Bedrag" size="9"></td> </tr> </table> </form> |
Weet begot niet waar ik het vandaan haalde om een week geleden dit te coden!
Het enige wat ik hiet kan aan opmerken is: waarom een tabel als je bootstrap (of een ander framework) gebruikt? Dat is het enige "slechte" wat ik eraan kan zien
Anoniem: 541917
Het is eigenlijk best useless! en gewoon cellspacing enz is toch niet meer van deze tijd? Wel? ben maar een traineewsitedesign schreef op donderdag 31 oktober 2013 @ 00:32:
1x Mosselen met friet AUB!
Het enige wat ik hiet kan aan opmerken is: waarom een tabel als je bootstrap (of een ander framework) gebruikt? Dat is het enige "slechte" wat ik eraan kan zien
Een table is nog wel te verdedigen, border/cellspacing/alignment/widths e.d. doe je in je CSS, maar ik zie nog wel wat andere WTF's:Anoniem: 541917 schreef op donderdag 31 oktober 2013 @ 00:35:
Het is eigenlijk best useless! en gewoon cellspacing enz is toch niet meer van deze tijd? Wel? ben maar een trainee

- "Hoeveelheid" waar ik persoonlijk "Aantal" gebruikt zou hebben, "Tel" i.p.v. voluit "Telefoon(nummer)" (want wat kosten die paar letters extra je? En waarom in de placeholder dan "Tel. Nr."?) en dat soort (kleine) tekstuele dingetjes...
- Voor alles een textbox
- Het zelf laten invullen van 't totaal
- Het inconsistente gebruik van placeholders (dan weer wel, dan weer niet)
- Hoewel "toegestaan", de tabindex vind ik erg onlogisch (waarom niet gewoon sequentieel?)
- Bovenop voorgenoemde border/cellspacing/alignment/widths e.d. ook nog eens inline styles
- Table cells met ... (Her-en-der had mogelijk zelfs een colspan gekund i.p.v. een <td> </td>)
- Markup voor "kolomkoppen" (<td><b>Blaat</b></td> i.p.v. gewoon th's gebruiken: <th>Blaat</th>)
- onclick="this.form.submit()" op de submitbutton. Why?
[ Voor 24% gewijzigd door RobIII op 31-10-2013 01:18 ]
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
Anoniem: 541917
Mijn excuses was de bedoeling niet. Ik dacht dat het een slechtste programmeervoorbeeld waardig was!RobIII schreef op donderdag 31 oktober 2013 @ 01:03:
[...]
Een table is nog wel te verdedigen, border/cellspacing/alignment/widths e.d. doe je in je CSS, maar ik zie nog wel wat andere WTF's:
[afbeelding]Maar having said all that: ik vind 't niet echt "Slechtste programmeervoorbeelden"-waardig en het is niet de bedoeling dat je hier stiekem/verkapt code-reviews gaat (laten) doen.
- "Hoeveelheid" waar ik persoonlijk "Aantal" gebruikt zou hebben, "Tel" i.p.v. voluit "Telefoon(nummer)" (want wat kosten die paar letters extra je? En waarom in de placeholder dan "Tel. Nr."?) en dat soort (kleine) tekstuele dingetjes...
- Voor alles een textbox
- Het zelf laten invullen van 't totaal
- Het inconsistente gebruik van placeholders (dan weer wel, dan weer niet)
- Hoewel "toegestaan", de tabindex vind ik erg onlogisch (waarom niet gewoon sequentieel?)
- Bovenop voorgenoemde border/cellspacing/alignment/widths e.d. ook nog eens inline styles
- Table cells met ... (Her-en-der had mogelijk zelfs een colspan gekund i.p.v. een <td> </td>)
- Markup voor "kolomkoppen" (<td><b>Blaat</b></td> i.p.v. gewoon th's gebruiken: <th>Blaat</th>)
- onclick="this.form.submit()" op de submitbutton. Why?
1
| ClientSubsystems::GetInstance()->GetGraphicsSubsystem()->GetRenderer()->GetDevice()->GetDeviceFactory()->GetAssetResourceFactory() |
Waarschijnlijk omdat bootstrap juist styling heeft voor tables? .. bedoel, een nette grid bouwen met divs is leuk en aardig, maar zebra-stripes maken gaat een stuk makkelijker met tables in bootstrap .wsitedesign schreef op donderdag 31 oktober 2013 @ 00:32:
1x Mosselen met friet AUB!
Het enige wat ik hiet kan aan opmerken is: waarom een tabel als je bootstrap (of een ander framework) gebruikt? Dat is het enige "slechte" wat ik eraan kan zien
Mind, voor formulieren hebben ze weer andere (discuseerbaar betere) oplossingen, maar ik zou dat niet de wtf noemen.
Een van de testers zou mij laten zien hoe hun testproces gaat, want er zaten verrekte veel bugs in de vorige release. Die kerel demonstreert mij hoe hij het aanmeldproces van een nieuwe consument test. Onderdeel van dit proces is dat de consument zijn (mobiele) telefoonnummer moet bevestigen door middel van een SMS met bevestigingscode. Omdat het pakket vooralsnog alleen Nederlandse consumenten bedient moet het telefoonnummer beginnen met 06.
Thuisgekomen test ik het softwarepakket (in testmodus) door mijn eigen 06-nummer in te vullen en jawel, ik krijg gewoon een SMSje.Tester vult een willekeurig 06-nummer in en klikt op 'Confirm'
Ik: Wordt er nu niet gewoon een SMS verstuurd naar dat nummer?
Tester: Nee hoor, ik draai de software in testmodus en dan wordt er geen SMS verstuurd.
Ik:Weet je dat heel zeker?
Tester: Ja, dit heb ik al honderd keer gedaan.
Certified smart block developer op de agile darkchain stack. PM voor info.
Je kan het ook omdraaien: Waarom bootstrap gebruiken om het gedrag van tabellen te emuleren?wsitedesign schreef op donderdag 31 oktober 2013 @ 00:32:
1x Mosselen met friet AUB!
Het enige wat ik hiet kan aan opmerken is: waarom een tabel als je bootstrap (of een ander framework) gebruikt? Dat is het enige "slechte" wat ik eraan kan zien
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Hopelijk niet 100x hetzelfde nummer, anders is die willekeurige persoon (indien bestaand) redelijk gepestNot Pingu schreef op dinsdag 05 november 2013 @ 16:45:
Een tijdje geleden was ik op bezoek bij de softwaretoko in de Oekraïne waar we een softwarepakket laten ontwikkelen. Ik heb er al eens eerder wat van gepost.
Een van de testers zou mij laten zien hoe hun testproces gaat, want er zaten verrekte veel bugs in de vorige release. Die kerel demonstreert mij hoe hij het aanmeldproces van een nieuwe consument test. Onderdeel van dit proces is dat de consument zijn (mobiele) telefoonnummer moet bevestigen door middel van een SMS met bevestigingscode. Omdat het pakket vooralsnog alleen Nederlandse consumenten bedient moet het telefoonnummer beginnen met 06.
[...]
Thuisgekomen test ik het softwarepakket (in testmodus) door mijn eigen 06-nummer in te vullen en jawel, ik krijg gewoon een SMSje.
We are shaping the future
https://niels.nu
06-12345678 was ooit van iemand bij KPN.Alex) schreef op dinsdag 05 november 2013 @ 21:31:
06-12345678 is toch gewoon een geldig nummer? Een vriend van me heeft dat nummer wel eens gebeld en kreeg iemand z'n voicemail.
Door alle kansloze telefoontjes wordt dit nummer nu niet meer gebruikt
Death smiles at us all, all a man can do is smile back.
PSN
1
2
3
4
| min_number_length = 1 # constant in class max_number_length = 14 # constant in class regex = "\d{" + min_number_length + ", " + max_number_length + "}" if regex.match input_string # input string if valid |
[ Voor 9% gewijzigd door Gamebuster op 12-11-2013 14:48 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
1
| if($blaat == '01110' || $blaat == '01150' || $blaat == '01165' || $blaat == '02040' || $blaat == '02106' || $blaat == '02910' || $blaat == '02946' || $blaat == '02965' || $blaat == '02966' || $blaat == '02968' || $blaat == '02969' || $blaat == '02971' || $blaat == '02974' || $blaat == '02975' || $blaat == '03683' || $blaat == '03831' || $blaat == '03922' || $blaat == '03993' || $blaat == '03994' || $blaat == '03995' || $blaat == '03996' || $blaat == '05017' || $blaat == '05018' || $blaat == '05019' || $blaat == '05038' || $blaat == '05040' || $blaat == '05045' || $blaat == '05060' || $blaat == '05193' || $blaat == '05194' || $blaat == '05195' || $blaat == '05196' || $blaat == '05197' || $blaat == '05200' || $blaat == '05210'|| $blaat == '05202' || $blaat == '05201' || $blaat == '05250' || $blaat == '05385' || $blaat == '05386'|| $blaat == '05387' || $blaat == '05395' || $blaat == '05396' || $blaat == '05409' || $blaat == '05411' || $blaat == '05412' || $blaat == '05413' || $blaat == '05414' || $blaat == '05417' || $blaat == '05421' || $blaat == '05423' || $blaat == '05431' || $blaat == '05425' || $blaat == '05426' || $blaat == '05430' || $blaat == '05431' || $blaat == '05432' || $blaat == '05433' || $blaat == '05434' || $blaat == '05436' || $blaat == '05561' || $blaat == '05591' || $blaat == '05610' || $blaat == '05636' || $blaat == '05638' || $blaat == '05645' || $blaat == '05681' || $blaat == '06010' || $blaat == '06110' || $blaat == '06115' || $blaat == '06117' || $blaat == '06118' || $blaat == '06119' || $blaat == '10905' || $blaat == '10910' || $blaat == '10911' || $blaat == '10912' || $blaat == '10913' || $blaat == '10950' || $blaat == '10955' || $blaat == '10990' || $blaat == '10991' || $blaat == '10992' || $blaat == '10993' || $blaat == '55000' || $blaat == '55002' || $blaat == '55003' || $blaat == '55004' || $blaat == '55006') |
Is toch makkelijker te lezen dan het gebruik van in_array()douweegbertje schreef op donderdag 14 november 2013 @ 14:42:
PHP:
1 if($blaat == '01110' || $blaat == '01150' || $blaat == '01165' || $blaat == '02040' || $blaat == '02106' || $blaat == '02910' || $blaat == '02946' || $blaat == '02965' || $blaat == '02966' || $blaat == '02968' || $blaat == '02969' || $blaat == '02971' || $blaat == '02974' || $blaat == '02975' || $blaat == '03683' || $blaat == '03831' || $blaat == '03922' || $blaat == '03993' || $blaat == '03994' || $blaat == '03995' || $blaat == '03996' || $blaat == '05017' || $blaat == '05018' || $blaat == '05019' || $blaat == '05038' || $blaat == '05040' || $blaat == '05045' || $blaat == '05060' || $blaat == '05193' || $blaat == '05194' || $blaat == '05195' || $blaat == '05196' || $blaat == '05197' || $blaat == '05200' || $blaat == '05210'|| $blaat == '05202' || $blaat == '05201' || $blaat == '05250' || $blaat == '05385' || $blaat == '05386'|| $blaat == '05387' || $blaat == '05395' || $blaat == '05396' || $blaat == '05409' || $blaat == '05411' || $blaat == '05412' || $blaat == '05413' || $blaat == '05414' || $blaat == '05417' || $blaat == '05421' || $blaat == '05423' || $blaat == '05431' || $blaat == '05425' || $blaat == '05426' || $blaat == '05430' || $blaat == '05431' || $blaat == '05432' || $blaat == '05433' || $blaat == '05434' || $blaat == '05436' || $blaat == '05561' || $blaat == '05591' || $blaat == '05610' || $blaat == '05636' || $blaat == '05638' || $blaat == '05645' || $blaat == '05681' || $blaat == '06010' || $blaat == '06110' || $blaat == '06115' || $blaat == '06117' || $blaat == '06118' || $blaat == '06119' || $blaat == '10905' || $blaat == '10910' || $blaat == '10911' || $blaat == '10912' || $blaat == '10913' || $blaat == '10950' || $blaat == '10955' || $blaat == '10990' || $blaat == '10991' || $blaat == '10992' || $blaat == '10993' || $blaat == '55000' || $blaat == '55002' || $blaat == '55003' || $blaat == '55004' || $blaat == '55006')
RTFM!
eh ja/nee..._Moe_ schreef op donderdag 14 november 2013 @ 16:11:
[...]
Is toch makkelijker te lezen dan het gebruik van in_array()
Het gaat hier niet perse om DIT voorbeeld, maar om de gedachte erachter. Als je dit soort code -moet- gaan gebruiken heb je iets structureel niet goed gedaan als je uiteindelijk zover komt dat je een IF vergelijking moet maken van zoveel karakters..
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.
Overigens (als je dit wil doen) is een in_array() imo waaaaay beter leesbaar. De array var kan je een goede naam geven en het scheelt tig keer '|| $blaat = ' pasten.
{signature}
Regeren is vooruitschuiven
Is er dan niemand die er een regex voor kan verzinnen?
Ik weet het gebruik niet, maar verschil leesbaarheid tussen een goed geindente array en een goed geindente if-constructie vind ik niet echt heel erg groot hoor.Overigens (als je dit wil doen) is een in_array() imo waaaaay beter leesbaar. De array var kan je een goede naam geven en het scheelt tig keer '|| $blaat = ' pasten.
Als het echt 100% zeker eenmalig is (zijn dit soort constructies nooit maargoed) dan vind ik dit mits goed geindent en van commentaar voorzien wel te verdedigen (of beter gezegd ik zie de toegevoegde waarde van een array / in_array niet, de leesbaarheid is toch minimaal met een array-constructor of een if-statement van 80 regels).
Alhoewel ik het persoonlijk wel 100% zeker in een array zou dumpen omdat dit lijstje over 6 maanden ergens anders ook moet gaan werken en over 7 maanden moet het uitgebreid gaan worden met 2 waardes en over 8 maanden moeten er 15 waardes uit en over 8 maanden en 1 week krijg je een rare bug-melding binnen omdat de lijstjes toch niet 100% gelijk zijn ( of nog leuker, je moet het lijstje ergens anders hergebruiken maar dan minus 1 waarde, dan denk je een bug te fixen door het 1e lijstje te copy-pasten naar het 2e en dan introduceer je een nieuwe bug)
Natuurlijk niet, dan zou het een slecht programmeervoorbeeld zijn.Gomez12 schreef op vrijdag 15 november 2013 @ 01:16:
[...]
Is er dan niemand die er een regex voor kan verzinnen?
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.
1
2
3
| $blaatValues = array('01110', '01150', ... ); $blaatTest = array_map($blaatValues, function ($value) { return '$blaat == ' . "'$value'"; }); $blaatInBlaatValues = eval(implode($blaatTest, ' || ')); |
HuHu schreef op vrijdag 15 november 2013 @ 08:04:
Een goed programmeervoorbeeld zou zoiets zijn:
PHP:
1 2 3 $blaatValues = array('01110', '01150', ... ); $blaatTest = array_map($blaatValues, function ($value) { return '$blaat == ' . "'$value'"; }); $blaatInBlaatValues = eval(implode($blaatTest, ' || '));
RTFM!
eh ja, behalve dat ik alles kan zien. Maar verder prima hoor als jij dit netjes vindt!HuHu schreef op donderdag 14 november 2013 @ 21:09:
Ik vind het altijd wel grappig dat mensen "structurele fouten" kunnen afleiden uit één regel code.
Op het moment dat een IF statement moet gaan maken van 500 karakters+ dan doe je toch echt iets fout..

[ Voor 15% gewijzigd door Douweegbertje op 19-11-2013 11:12 ]
Ik dacht in eerste instantie ook: "is toch niets mis mee"....totdat ik de scollbar onder de code-snippet zag...douweegbertje schreef op dinsdag 19 november 2013 @ 11:11:
[...]
eh ja, behalve dat ik alles kan zien. Maar verder prima hoor als jij dit netjes vindt!
Op het moment dat een IF statement moet gaan maken van 500 karakters+ dan doe je toch echt iets fout..
Diablo III: <GOT> Pteer#2475 --- POE: Dwergux
Ja, jij... maar wij niet. Eén zo'n regel duidt niet per se op "structurele" fouten, het kan ook een maandagochtendregel zijn.douweegbertje schreef op dinsdag 19 november 2013 @ 11:11:
[...]
eh ja, behalve dat ik alles kan zien. Maar verder prima hoor als jij dit netjes vindt!
Op het moment dat een IF statement moet gaan maken van 500 karakters+ dan doe je toch echt iets fout..
Op basis van één regel iets structureel (kan ik de nadruk nog harder op "structureel" leggen?) fout noemen is nogal voorbarig.
Overigens zeg ik nergens dat ik het netjes vind. Ik ken de context verder ook niet. Maar om op basis van één regel, één regel (!), iets "structureel" (dat is: alle regels) fout te noemen... nah, daar krijg je mij niet in mee.
Met één regel als 'voorbeeld' kun je toch concreet zien of het nou goed of slecht is? Vervolgens kun je toch heel makkelijk zeggen of dát nu fout is, of dat het structureel fout gaat?HuHu schreef op dinsdag 19 november 2013 @ 13:39:
[...]
Ja, jij... maar wij niet. Eén zo'n regel duidt niet per se op "structurele" fouten, het kan ook een maandagochtendregel zijn.
Op basis van één regel iets structureel (kan ik de nadruk nog harder op "structureel" leggen?) fout noemen is nogal voorbarig.
Overigens zeg ik nergens dat ik het netjes vind. Ik ken de context verder ook niet. Maar om op basis van één regel, één regel (!), iets "structureel" (dat is: alle regels) fout te noemen... nah, daar krijg je mij niet in mee.
Ik bedoel, stel dat je een function rand hebt, die hard 5 returned.. dan kun je zeggen dat die functie gewoon ruk is. Verder kun je dan weer geen conclusie trekken of de rest structureel fout is. Echter met mijn voorbeeld weet je dat het structureel niet goed zit, anders hoefde je namelijk geen bizare IF constructie te maken met die gare data.
Indien het structureel goed zat, heb je geen vage statements nodig. Dan heb je bijvoorbeeld de data beter geordend al dan niet mooi in een DB gezet. Je wilt gewoon -niet- zulke statements hebben, en heb je dat wel.. dan gaat er -ergens- iets mis. Structureel dus.
Misschien definieer ik structureel in deze context wat verkeerd. Voor mij betekend in dit geval dat het 'vanaf het begin' al fout gaat, dat je uiteindelijk bij zo'n constructie komt.
In ieder geval heb ik al 3000 regels aan code aangepast naar een kleine 200-300.
Zoals ik zei: wellicht is het een maandagochtendregel. Het is niet netjes, maar ook niet fout... en als het bij één zo'n actie blijft is het niet structureel. Misschien is het zelfs automatisch gegenereerde code vanuit één of ander project en was dit de makkelijkste aanpak. Wellicht compileert het naar iets beters/snellers dan een in_array() functie voor elkaar kan krijgen en is dit optimaal in de gegeven situatie.
Allemaal overwegingen die zo'n regel aannemelijk maken en niet per se "structureel fout".
Als je de framerate unlocked via een console command naar 60 fps dan loopt het spel 2x zo snel, want normaal is het locked op 30 fps

YouTube: Let's not play Need for Speed: Rivals
Waarom is dit een vaag statement? Het is gewoon een if-statement met ietwat veel mogelijkheden maar waar ligt dit grens anders qua mogelijkheden?douweegbertje schreef op dinsdag 19 november 2013 @ 13:50:
[...]
Indien het structureel goed zat, heb je geen vage statements nodig. Dan heb je bijvoorbeeld de data beter geordend al dan niet mooi in een DB gezet. Je wilt gewoon -niet- zulke statements hebben, en heb je dat wel.. dan gaat er -ergens- iets mis. Structureel dus.
En zie ook de mensen die het in een array willen doen, dan maak je het leesbaarder maar je "vaagheid" zit er nog steeds in.
Ook met wat jij "mooi in een DB gezet" noemt houd je dezelfde basis-premisse (als ... dan) alleen heb je de data opeens verstopt in een ander systeem.
Ik ben erg van het leesbaar zijn van code en als dit voorbeeld gewoon een weinig gebruikt iets is dan is een dbase voornamelijk obfuscating en voor de rest niets.
Sorry maar wat is daar nou leesbaar aan? Prima, je weet dat het een if statement is, maar zo simpel lees je niet wat hij vergelijkt. Daarnaast zijn er gewoon oplossingen dat je bepaalde waardes in de DB kunt zetten en dat je hier -geen- IF statement meer hoeft te gebruiken, noch alles moet ophalen. Zet jij ook alle usernames en password in je .php bestand en loop je die in een foreach om te kijken of iemand mag inloggen? In feite is dat precies de zelfde vergelijking. Je hoeft niet over obfuscating te beginnen, want dat is het niet.Gomez12 schreef op dinsdag 19 november 2013 @ 22:29:
[...]
Waarom is dit een vaag statement? Het is gewoon een if-statement met ietwat veel mogelijkheden maar waar ligt dit grens anders qua mogelijkheden?
En zie ook de mensen die het in een array willen doen, dan maak je het leesbaarder maar je "vaagheid" zit er nog steeds in.
Ook met wat jij "mooi in een DB gezet" noemt houd je dezelfde basis-premisse (als ... dan) alleen heb je de data opeens verstopt in een ander systeem.
Ik ben erg van het leesbaar zijn van code en als dit voorbeeld gewoon een weinig gebruikt iets is dan is een dbase voornamelijk obfuscating en voor de rest niets.
Kom eens met echte code die zulke IF-statements gebruikt, ik weet vrij zeker dat ik daar wel wat beters voor kan verzinnen. Het jammere is dat ik niet al mijn code kan dumpen hier, noch mijn fix.
Och tegenwoordig is het niet meer echt gebruikelijk om de simulatiesnelheid aan de framerate te koppelen, maar zo enorm slecht is het nou ook weer niet.SmokingCrop schreef op dinsdag 19 november 2013 @ 22:20:
Need for Speed: Rivals is ook een voorbeeld van slechtste programmeervoorbeelden
Als je de framerate unlocked via een console command naar 60 fps dan loopt het spel 2x zo snel, want normaal is het locked op 30 fps![]()
YouTube: Let's not play Need for Speed: Rivals
Dat zijn je eigen woorden. Ik zei dat ALS je zo'n IF statement MOET gebruiken, dat je al bij het begin fout gaat.HuHu schreef op woensdag 20 november 2013 @ 09:52:
Kom jij eerst maar eens met "bewijs" dat één enkel slecht if-statement gegarandeerd equivalent is aan "structureel slechte code".
1
| if($blaat == '01110' || $blaat == '01150' || $blaat == '01165' || $blaat == '02040' || $blaat == '02106' || $blaat == '02910' || $blaat == '02946' || $blaat == '02965' || $blaat == '02966' || $blaat == '02968' || $blaat == '02969' || $blaat == '02971' || $blaat == '02974' || $blaat == '02975' || $blaat == '03683' || $blaat == '03831' || $blaat == '03922' || $blaat == '03993' || $blaat == '03994' || $blaat == '03995' || $blaat == '03996' || $blaat == '05017' || $blaat == '05018' || $blaat == '05019' || $blaat == '05038' || $blaat == '05040' || $blaat == '05045' || $blaat == '05060' || $blaat == '05193' || $blaat == '05194' || $blaat == '05195' || $blaat == '05196' || $blaat == '05197' || $blaat == '05200' || $blaat == '05210'|| $blaat == '05202' || $blaat == '05201' || $blaat == '05250' || $blaat == '05385' || $blaat == '05386'|| $blaat == '05387' || $blaat == '05395' || $blaat == '05396' || $blaat == '05409' || $blaat == '05411' || $blaat == '05412' || $blaat == '05413' || $blaat == '05414' || $blaat == '05417' || $blaat == '05421' || $blaat == '05423' || $blaat == '05431' || $blaat == '05425' || $blaat == '05426' || $blaat == '05430' || $blaat == '05431' || $blaat == '05432' || $blaat == '05433' || $blaat == '05434' || $blaat == '05436' || $blaat == '05561' || $blaat == '05591' || $blaat == '05610' || $blaat == '05636' || $blaat == '05638' || $blaat == '05645' || $blaat == '05681' || $blaat == '06010' || $blaat == '06110' || $blaat == '06115' || $blaat == '06117' || $blaat == '06118' || $blaat == '06119' || $blaat == '10905' || $blaat == '10910' || $blaat == '10911' || $blaat == '10912' || $blaat == '10913' || $blaat == '10950' || $blaat == '10955' || $blaat == '10990' || $blaat == '10991' || $blaat == '10992' || $blaat == '10993' || $blaat == '55000' || $blaat == '55002' || $blaat == '55003' || $blaat == '55004' || $blaat == '55006') |
Dus wat doe je hier? Je gaat vergelijken of een waarde, in dit geval '$blaat' gelijk is aan één van de 100+ waardes. Sinds wanneer is dit logisch?
Dus wat je kan doen, is netjes een tabel maken in je DB. Je zet hier elke waarde in, met vervolgens 'iets' wat aangeeft wat het is. Zo kun je een simpele query uitvoeren op jouw waarde om terug te krijgen wat je er mee moet doen. Mijn stukje code bestond uit ongeveer nog 10-15 van dit soort statements. Uiteindelijk heb ik dit netjes in de DB gezet, wordt gecached en vervolgens heb ik elke keer de waarde wat ik moet uitvoeren.
Dan nog, waarom moet ik mensen overtuigen dat het vergelijken van 100+ waardes gewoon bad practice is?
Op het moment dat jij weet dat je een waarde met 100 dingen moet conditioneren, dan ga je iets verzinnen zodat je niet zulke statements krijgt. Als je niet nadenkt en dingen gaat bouwen, kun je hier tegen aan lopen en dan kun je het inderdaad zo oplossen maar dan heb je het naar mijn mening structureel fout gedaan.
Maar prima verder, ik heb eigenlijk niet heel veel zin om nog verder te moeten gaan, met verdedigen. Ik zal wel anders na denken over bepaalde dingen.
Dat je hierdoor niet eens de kracht van je computer kan gebruiken, is gewoon wél heel erg.. Dit is een miljoenen spel en niet even een spelletje dat je zelf gemaakt hebt.Caelorum schreef op woensdag 20 november 2013 @ 11:15:
[...]
Och tegenwoordig is het niet meer echt gebruikelijk om de simulatiesnelheid aan de framerate te koppelen, maar zo enorm slecht is het nou ook weer niet.
Dat is misschien net het probleem.. dat ze dit niet eens erg vinden.
[ Voor 8% gewijzigd door Caelorum op 20-11-2013 11:50 ]
1
| var newval = element.value.split('.').join('').toUpperCase().split('').join('.'); |
It gets the job done... (automatisch punten zetten als je voorletters typt, abc wordt A.B.C.).
Roses are red, violets are blue, unexpected '{' on line 32.
Het is iets wat je in eerste deel van een gamedevelopment tutorial doet om te zien waarom dit zo slecht is. Mijn gamedev ervaring komt niet veel verder dan gepruts in XNA, maar hier had ik toch echt het gevoel: "Wat die mensen bij EA doen kan ik veel beter".Caelorum schreef op woensdag 20 november 2013 @ 11:15:
[...]
Och tegenwoordig is het niet meer echt gebruikelijk om de simulatiesnelheid aan de framerate te koppelen, maar zo enorm slecht is het nou ook weer niet.
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Dan moet je wel weten waarom het zo slecht is. Als je maar op 1 hardware configuratie focust en je alle (of iig voorspelbare) resources hebt dan is het helemaal zo slecht nog niet. Dat het uiteindelijk in een PC versie komt is dan wel een redelijke fuckup, aan de andere kant: het werkt wel en wie weet was het wel helemaal niet de bedoeling om een PC versie te maken en om het nou achteraf nog te gaan veranderen is vragen om problemen.boe2 schreef op vrijdag 22 november 2013 @ 13:41:
[...] Het is iets wat je in eerste deel van een gamedevelopment tutorial doet om te zien waarom dit zo slecht is. [...]
De meeste gamedevelopmenttutorials bespreken dan ook niet het simultaan ontwikkelen van één game voor meerdere platforms, onder tijdsdruk, voor een miljoenenpubliek, waarbij er zo goed als niets fout mag gaan.boe2 schreef op vrijdag 22 november 2013 @ 13:41:
[...]
Het is iets wat je in eerste deel van een gamedevelopment tutorial doet om te zien waarom dit zo slecht is. Mijn gamedev ervaring komt niet veel verder dan gepruts in XNA, maar hier had ik toch echt het gevoel: "Wat die mensen bij EA doen kan ik veel beter".
Dat er dan iemand is die zelf het spel gaat lopen aanpassen en vervolgens boos wordt... tsja, pech dan.
Mmh, ik vind hem wel ok eigenlijk. Het enige wat ik liever zou zien is een filter op [a-zA-Z] ipv .split('.').join(''). Het is wel typisch zo'n stukje code dat je van commentaar moet voorzien om uit te leggen dat hij initialen formatWernerL schreef op vrijdag 22 november 2013 @ 13:12:
Ik kom zojuist dit pareltje tegen. Moet ik mezelf hier voor schamen?
code:
1 var newval = element.value.split('.').join('').toUpperCase().split('').join('.');
It gets the job done... (automatisch punten zetten als je voorletters typt, abc wordt A.B.C.).
Er zit alleen wel een bugje in, hij genereert geen punt na de laatste letter.
Ik ben eigenlijk wel benieuwd wie een mooiere constructie weet te verzinnen. Voor Javascript weet ik weinig beters (maar ik ben ook geen JS-programmeur meestal), maar in Python zou ik het zo doen:
1
2
| initials = 'abc' ''.join([c.upper() + '.' for c in initials if c.isalpha()]) |
Dit is nou typisch zo'n scenario waarin je wel regular expressions zou moeten gebruiken:deadinspace schreef op vrijdag 22 november 2013 @ 16:36:
Ik ben eigenlijk wel benieuwd wie een mooiere constructie weet te verzinnen.
1
2
3
4
5
6
7
| function formatInitials( str ) { var regexp = /([a-z])\.|([a-z])/gi; return str.replace( regexp, function( _, p1, p2 ) { return ( p1 || p2 ).toUpperCase() + "."; }); }; |
Ook fout, net als bij TS. Het "slechte programmeervoorbeeld" hier is dat er van uitgegaan wordt dat mensen hun eigen naam of initialen niet kunnen spellen, en dat alle namen en initialen in het vaste stramien van 1 letter per punt passen, wat natuurlijk niet waar is. Er zijn meer dan genoeg namen, ook in het Nederlands, waar de naam wordt afgekort naar 2 of meer letters. En als je naar internationale namen gaat kijken dan ga je helemaal de mist in. Laat mensen lekker zelf beslissen hoe ze aangesproken willen worden, hoe een brief geadresseerd moet worden en wat hun volledige naam is.R4gnax schreef op vrijdag 22 november 2013 @ 20:01:
[...]
Dit is nou typisch zo'n scenario waarin je wel regular expressions zou moeten gebruiken:
JavaScript:
1 2 3 4 5 6 7 function formatInitials( str ) { var regexp = /([a-z])\.|([a-z])/gi; return str.replace( regexp, function( _, p1, p2 ) { return ( p1 || p2 ).toUpperCase() + "."; }); };
Edit: zie ook www.kalzumeus.com/2010/06...mers-believe-about-names/
[ Voor 4% gewijzigd door _js_ op 22-11-2013 20:43 ]
Dat is meer een slecht requirements engineering voorbeeld dan een slecht programmeervoorbeeld._js_ schreef op vrijdag 22 november 2013 @ 20:36:
[...]
Ook fout, net als bij TS. Het "slechte programmeervoorbeeld" hier is dat er van uitgegaan wordt dat mensen hun eigen naam of initialen niet kunnen spellen, en dat alle namen en initialen in het vaste stramien van 1 letter per punt passen, wat natuurlijk niet waar is.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php } // Als het een mobieltje is, dan is dit een schakelaartje om naar de Desktop versie te gaan if (($mobileswitch=="yes") && ($mobile=="yes")){ ?> <div class="boxbg"> <p align="right"> <a href="./switch.php">Desktop versie</a> </div> <br /> <?php } // Als het een mobieltje is, dan is dit een schakelaartje om naar de Mobiele versie te gaan if (($mobileswitch=="yes") && ($mobile=="no")){ ?> <div class="boxbg"> <p align="right"> <a href="./switch.php">Mobiele versie</a> </div> <br /> <?php } ?> |
En dan het volgende in switch.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php $expire=time()+60*60*24*365; // Eigenlijk beetje overbodig, want dat cookie zou moeten bestaan, anders kan je hier niet eens komen... if (isset($_COOKIE['mobile'])) { $mobile = $_COOKIE['mobile']; } // Ja, als het ja is, wordt het toch gewoon nee! if ($mobile=="yes") { $mobile = ('no'); } // Anders was het nee, dan wordt het eh.. ja! Dat heb je wel vaker met een switch. else { $mobile = ('yes'); } // Gooi dat gelijk ff in dat cookie, dan is dat ook weer voor elkaar. setcookie("mobile", "$mobile", $expire, "/", "blablabla.nl"); // laten we dan de pagina even verversen, dan werkt het ook nog... header("Location: ./"); ?> |
[ Voor 0% gewijzigd door TimothyW op 22-11-2013 23:20 . Reden: even toegevoegd wat de tweede code is... ]
We are shaping the future
maar is dit wel oké?
if ($mobile=="yes") {
$mobile = ('no');
ik zie daar eerst twee == en daaronder eentje. dan zie ik "yes" en daaronder 'no' en die no staat dan tussen haakjes, het zal allemaal wel, ik heb het zo verzonnen, meer trial and error geweest dan kunde. Dus vraag me wel af of dit niet simpeler kan, of beter. Ik zie mijn code altijd als poep
We are shaping the future
En het verhaal met == en = is me ook ineens weer helder, toen ik het in elkaar stak, kwam ik dat inderdaad tegen, maar wist totaal niet meer waarom dat nou was, dit maakt het helder.
boolean iemand?
This message was sent on 100% recyclable electrons.
Zou een absolute URL moeten zijn volgens de specs.
Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?
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
61
62
63
64
65
66
67
68
69
| var toSend = from q1 in Connections where (from q2 in contractRules where (from q3 in contracts where q3.LabelID == Label && (from q4 in switches where ( (from q5 in switchRules where q5.Status == "Done" && new[] { "Requirement1", "Requirement2" } .Contains(q5.Message) && q5.SwitchDate != null && q5.SwitchDate <= DateTime.Today select q5.LineID) .Contains( q4.BeginLineID ?? 0) || (from q5 in switchRules where q5.Status == "Done" && new[] { "Requirement3", "Requirement4" } .Contains(q5.Message) && q5.SwitchDate != null && q5.SwitchDate <= DateTime.Today select q5.LineID) .Contains( q4.EndLineID ?? 0) ) && (from q8 in switches where q8.ContractLineID == q4.ContractLineID group q8 by q8.ContractLineID into g1 select (from q9 in g1 select q9.SwitchID) .Max()).Contains(q4.SwitchID) select q4.ContractLineID).Contains( q2.ContractLineID) select q3.ContractID). Contains(q2.ContractID) select q2.ID).Contains( q1.ID) && q1.SegmentID == segmentId && (from q6 in meters where (from q7 in Reading where q7.Uploaded == false && new[] { "Customer", "Internal" }.Contains(q7.BronID) && (q7.IsJunk == null || !(bool)q7.IsJunk) select q7.MeterID).Contains(q6.MeterID) select q6.ID).Contains(q1.ID) select q1; var result = toSend.ToList(); |
Een linq statement van 66 regels...

EN natuurlijk gaat het nog fout ook....


Behalve dat het slecht leesbaar is, zijn de performance ongelofelijk slecht.
[ Voor 53% gewijzigd door Kwastie op 23-11-2013 21:30 ]
When I get sad i stop being sad and be awesome instead
als je ze goed gebruikt zijn ze snel hoor, maar dit is inderdaad een hoogtedieptepuntjeKwastie schreef op zaterdag 23 november 2013 @ 21:26:
Lambda expressiesmaar dat
.
Behalve dat het slecht leesbaar is, zijn de performance ongelofelijk slecht.
This message was sent on 100% recyclable electrons.
1
2
3
4
5
6
| switch (booleanVar) { case false: booleanVar2 = false; break; } |

[ Voor 4% gewijzigd door PdeBie op 02-12-2013 14:35 ]
Voor alle mensen die vinden dat het commentaar van _js_ ("[alg] Slechtste programmeervoorbeelden deel 5") wat vergezocht is hoop ik niet dat ze ooit bv een IJsbrandt als gebruiker krijgen, of iemand die de schrijver A. F. Th. van der Heijden ergens in kwijt moetWernerL schreef op vrijdag 22 november 2013 @ 13:12:
Ik kom zojuist dit pareltje tegen. Moet ik mezelf hier voor schamen?
code:
1 var newval = element.value.split('.').join('').toUpperCase().split('').join('.');
It gets the job done... (automatisch punten zetten als je voorletters typt, abc wordt A.B.C.).
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
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
| function drawLoadedImage(id) { if (id<10) { document.write('<img src="./images/DarkSide-Of-MU-Sliced_0'+id+'.gif">'); } else { if (id != 14 && id != 17 && id != 18 && id != 26 && id != 33 && id != 36 && id != 38 && id != 48 && id != 49 && id != 50 && id != 51 && id != 47 && id != 29 && id != 19 && id != 21 && id != 22 && id != 24 && id != 27 && id != 28 && id != 30 && id != 32 && id != 34 && id != 37 && id != 39 && id != 41 && id != 42 && id != 43 && id != 44 && id != 46 && id != 52 && id != 54 && id != 55 ) { if (id == 20 || id == 25 || id == 31 || id == 40) { document.write('<div style="width:100%;height:100%;background-color:#333333;"> </div>'); } else { document.write('<img src="./images/DarkSide-Of-MU-Sliced_'+id+'.gif">'); } } } } |
Verwijderd
1
2
3
4
5
6
7
8
9
| <?php if ($not_found) { ob_clean(); header('HTTP/1.1 301 Moved Permanently'); header("Location: http://www.nieuwe-url-yolo.com/"); exit; clean_up_routine_that_does_something_important(); } |
"MIJN CLEANUP ROUTINE WERKT NIET MEER"

[ Voor 5% gewijzigd door Verwijderd op 04-12-2013 19:54 ]
/me opent solution
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
| static void Main(string[] args) { try { // Honderdvierenzeventig regels code met inline bijna alle domeinlogica, // transactieafhandeling, data access en logging foreach(...) { try { // ... } catch (IndexOutOfRangeException ex) { // meld dat het aantal argumenten (args[]) niet klopt } } } catch (Exception ex) { // Log exceptie } } |
Een berg moeilijk te ontcijferen code (want fuck SRP), binnen iedere iteratie van een foreach excepties afvangen die gecheckt hadden kunnen worden of op z'n minst buiten de loop eenmalig opgevangen kunnen worden, yay!
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
| if (ConfigurationManager.AppSettings["Debug"] == "1") { // doe wat debug-dingen } else { // doe wat echte dingen } if (ConfigurationManager.AppSettings["Debug"] == "1") { // doe andere debug-dingen } else { // doe andere echte dingen } if (ConfigurationManager.AppSettings["Debug"] == "1") { // doe nog meer debug-dingen } else { // doe nog meer echte dingen } if (ConfigurationManager.AppSettings["Debug"] == "1") { // doe verschillende debug-dingen } else { // doe verschillende echte dingen } |
Hard-wired debugcode, en zelfs dát verkeerd geimplementeerd
[ Voor 31% gewijzigd door kenneth op 05-12-2013 11:54 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Tja, maar die komt vervolgens weer niet langs andere overijverige ontwikkelaars...begintmeta schreef op maandag 02 december 2013 @ 16:54:
IJsbrandt in plaats van IJsbrandt zou nog een beetje verzachtend werken.
deadinspace schreef op vrijdag 22 november 2013 @ 16:36:
Mmh, ik vind hem wel ok eigenlijk. Het enige wat ik liever zou zien is een filter op [a-zA-Z] ipv .split('.').join('').
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ik denk dat die gast het wel geprobeerd heeft te debuggenkenneth schreef op donderdag 05 december 2013 @ 11:48:
Hard-wired debugcode, en zelfs dát verkeerd geimplementeerd
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Ik zou hiervoor gaan, als ik in een omgeving zou werken waar ik 100% zeker weet dat er geen niet-latijnse karakters in de string zitten. Want dit werkt in bijvoorbeeld arabisch niet goed.deadinspace schreef op vrijdag 22 november 2013 @ 16:36:
Ik ben eigenlijk wel benieuwd wie een mooiere constructie weet te verzinnen. Voor Javascript weet ik weinig beters (maar ik ben ook geen JS-programmeur meestal), maar in Python zou ik het zo doen:
Python:
1 2 initials = 'abc' ''.join([c.upper() + '.' for c in initials if c.isalpha()])
1
2
| initials = 'abc' '{}.'.format('. '.join(c for c in initials.upper() if c.isalpha())) |
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
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.