Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
tabel foo
- id
- created
- xml
tabel foo
- id
- created
- xml
- userid
- modified
- opmerkingen
- verwijziging
1
| XmlDocument xdoc = db.Query("select * from foo").ToXml(); |
De ToXml() functie geeft een XmlDocument met als root node 'foo' (tabelnaam) hierin alle kolommen als velden gemerged met de xml uit de xml kolom.
Nu zit je dus met totale spaghetti code omdat kolommen en xml in de uiteindelijke xml door elkaar lopen. Zoeken waar iets vandaan komt lukt niet (bv 'opmerkingen') door gebruik van de select * ipv select opmerkingen, xml, .... en dan nóg zijn er dingen die uit de xml kolom komen dus die je nooit gaat vinden.
Verder is door het ontbreken van domain objects maar directe cast van query's naar xml er geen enkele vorm van type safety noch de mogelijkheid om te zoeken naar references en ben je feitelijk aangewezen op gut feeling, zoek in alle bestanden en hopen dat het blijft werken.
En dan vinden ze het raar dat het oplossen van één bug meerdere uren kan duren.
Lets remove all security labels and let the problem of stupidity solve itself

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Of, als je echt niet kan kiezen, je gebruikt beide. Zet je data in 2 JSON objecten en zet die dan vervolgens in XML om ze te verzenden.kenneth schreef op zaterdag 15 januari 2011 @ 12:20:
Tja, XML ... dat kan echt niet meerGewoon alles omzetten naar JSON, opslaan in de cloud en het is weer buzzword compliant.

Er was eerst 1 functie die een specifiek iets moet doen maar de andere programmeur vond dat in sommige gevallen die functie 1 dingetje uit de lijst van dingen die hij moest doen niet moest doen.
In plaats van die functie uitbreiden met een parameter om aan te geven of datgene wel of niet gedaan moet worden had hij een kopie gemaakt van de functie en 1 regel eruit weggehaald.
Het probleem hiervan is dat wanneer er een bug in blijkt te zitten de kopie van de functie ook aangepast moet worden. Als je even niet ziet of niet weet dat er een kopie van is dan blijft daar de bug dus bestaan.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Tja, als mensen na 3x niet inzien dat een andere aanpak beter zou zijn, dan verwacht ik van diezelfde mensen ook niet het inzicht om bug-tijden in te schatten...ikke007 schreef op zaterdag 15 januari 2011 @ 12:07:
Ooit vond iemand het een goed plan om álles in XML op te slaan. Maarja, dat moet je weer ergens laten. Dus in de relationele database.
...
Later werd besloten dat het toch handig was om niet alles in XML te doen maar toch enige dingen in kolommen bij te houden.
...
En vervolgens hadden we een programmeur die het handig vondt om zijn query resultaten direct te laten casten naar XML, omdat de output via een XSL werd geconverteerd.
...
En dan vinden ze het raar dat het oplossen van één bug meerdere uren kan duren.
Beetje te gemakkelijk gezegd imo, over het algemeen heb/krijg je gewoon geen tijd om het geheel anders aan te pakken, je moet het doen met hoe het is. En dergelijke veranderingen kan je vaak alleen maar stukje voor stukje doen (waardoor de kans op fouten natuurlijk groter wordt).Gomez12 schreef op maandag 17 januari 2011 @ 00:51:
[...]
Tja, als mensen na 3x niet inzien dat een andere aanpak beter zou zijn, dan verwacht ik van diezelfde mensen ook niet het inzicht om bug-tijden in te schatten...
Tja, als er geen tijd is voor een goede oplossing dan kost gewoon tijd aan de bugfix-kant. Zo simpel is het imho gewoon.Erkens schreef op maandag 17 januari 2011 @ 07:42:
[...]
Beetje te gemakkelijk gezegd imo, over het algemeen heb/krijg je gewoon geen tijd om het geheel anders aan te pakken, je moet het doen met hoe het is. En dergelijke veranderingen kan je vaak alleen maar stukje voor stukje doen (waardoor de kans op fouten natuurlijk groter wordt).
Het kost linksom of rechtsom gewoon allebei extra tijd. Alleen met een betere aanpak heb je eenmalig grote pijn en daarna verlichting op je bugfixes. Zonder betere aanpak heb je doorlopend langere bugfixes en daarna komt ook nog eens een stukje grote pijn omdat dat stukje bij beetje ook gewoon tijd kost en daarna heb je nog langere bugfixes want het is het ook niet echt.
Maarja, dat is ook 1 van de redenen waarom ik voorstander ben van een programma circa 1x per 5 jaar te herschrijven
Code compleet herschrijven is meestal gewoon puur geld verspilling. In het bestaande programma zit al zo veel kennis geïmplementeerd, die vast niet allemaal goed gedocumenteerd is. Je doet sowieso een stap terug als je het opnieuw schrijft, ook al ga je er qua code kwaliteit wel op vooruit.Gomez12 schreef op maandag 17 januari 2011 @ 08:53:
[...]
Maarja, dat is ook 1 van de redenen waarom ik voorstander ben van een programma circa 1x per 5 jaar te herschrijven
Het kan zeker geen kwaad om eens in de zoveel tijd stukken code opnieuw te evalueren, en eventueel te refactoren/herschrijven. Maar het is IMHO geen goed plan om elke keer maar weer opnieuw te beginnen met een programma.
“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.”
Leuk artikel over het rewriten van software: http://www.joelonsoftware.com/articles/fog0000000069.html
Wat je omschrijft is technical debt.Gomez12 schreef op maandag 17 januari 2011 @ 08:53:
[...]
Tja, als er geen tijd is voor een goede oplossing dan kost gewoon tijd aan de bugfix-kant. Zo simpel is het imho gewoon.
Het kost linksom of rechtsom gewoon allebei extra tijd. Alleen met een betere aanpak heb je eenmalig grote pijn en daarna verlichting op je bugfixes.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Bezig met onderhoud, alle forms in een handvol applicaties moeten we een beetje netter maken. Labels uitlijnen, textboxen gelijktrekken, Default / Cancel instellen op buttons, dat soort hersendodend werk. Wel fijn om er even snel doorheen te knallen om de klant blij te maken.
Soms bewerken we ook de caption van een label of form, bijvoorbeeld omdat er "Selecteer een datum." staat. Dan halen we de punt weg. Blijkt dat er bij één van de applicaties een vertalingentabel achter zit die de oorspronkelijke caption als input heeft.

Dat wordt dus niet alleen een executable opleveren, maar ook een update-script.
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Gelukkig heb je een collega die je dat allemaal (of nouja.. te beginnen met kleine stukjesikke007 schreef op zaterdag 15 januari 2011 @ 12:07:
Ooit vond iemand het een goed plan om álles in XML op te slaan. Maarja, dat moet je weer ergens laten. Dus in de relationele database.
tabel fooLater werd besloten dat het toch handig was om niet alles in XML te doen maar toch enige dingen in kolommen bij te houden.
- id
- created
- xml
tabel fooEn vervolgens hadden we een programmeur die het handig vondt om zijn query resultaten direct te laten casten naar XML, omdat de output via een XSL werd geconverteerd.
- id
- created
- xml
- userid
- modified
- opmerkingen
- verwijziging
C#:
1 XmlDocument xdoc = db.Query("select * from foo").ToXml();
De ToXml() functie geeft een XmlDocument met als root node 'foo' (tabelnaam) hierin alle kolommen als velden gemerged met de xml uit de xml kolom.
Nu zit je dus met totale spaghetti code omdat kolommen en xml in de uiteindelijke xml door elkaar lopen. Zoeken waar iets vandaan komt lukt niet (bv 'opmerkingen') door gebruik van de select * ipv select opmerkingen, xml, .... en dan nóg zijn er dingen die uit de xml kolom komen dus die je nooit gaat vinden.
Verder is door het ontbreken van domain objects maar directe cast van query's naar xml er geen enkele vorm van type safety noch de mogelijkheid om te zoeken naar references en ben je feitelijk aangewezen op gut feeling, zoek in alle bestanden en hopen dat het blijft werken.
En dan vinden ze het raar dat het oplossen van één bug meerdere uren kan duren.

Hallo met Tim
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
| private void volgendeDag(int dag) { String maand = "januari"; if (dag > 31) { maand = "februari"; dag -= 31; if (dag > 28) { maand = "maart"; dag -= 28; if (dag > 31) { maand = "april"; dag -= 31; if (dag > 30) { maand = "mei"; dag -= 30; if (dag > 31) { maand = "juni"; dag -= 31; if (dag > 30) { maand = "Juli"; dag -= 30; if (dag > 31) { maand = "augustus"; dag -= 31; if (dag > 31) { maand = "september"; dag -= 31; if (dag > 30) { maand = "oktober"; dag -= 30; if (dag > 31) { maand = "november"; dag -= 31; if (dag > 30) { maand = "december"; dag -= 30; } } } } } } } } } } } sendDate(dag.ToString(CIBase.Settings.notation) + " " + maand); } |
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.
[ Voor 3% gewijzigd door Woy op 17-01-2011 17:51 ]
“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.”

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Het geintje om te kijken of een dag de laatste dag is van de maand levert soms ook prachtige stukken code opzzattack schreef op maandag 17 januari 2011 @ 17:30:
Onderstaande verschikking kwam ik vorige week woensdag tegen. Probeer je tranen binnen te houden.
Digitaal onderwijsmateriaal, leermateriaal voor hbo
Die is makkelijkgorgi_19 schreef op dinsdag 18 januari 2011 @ 08:33:
[...]
Het geintje om te kijken of een dag de laatste dag is van de maand levert soms ook prachtige stukken code op
1
2
3
4
| public bool IsLastDayOfMonth( this DateTime date ) { return date.Month != date.AddDays(1).Month; } |
“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
| public bool IsLastDayOfMonth( this DateTime date ) { return date.Day == DateTime.DaysInMonth(date.Year, date.Month); } |
Edit: Werkt echter alleen voor de Gregoriaanse kalender, dus mocht je aan een exotische app werken met vreemde kalenders, dan de methode van bovenstaande post gebruiken.
[ Voor 31% gewijzigd door Davio op 18-01-2011 09:56 ]
1
| (int)Convert.ToInt32(rs["Id"]) |
Weet je in ieder geval zeker dat het een int is
Hail to the king baby!
Ampera-e (60kWh) -> (66kWh)
Nu heb ik hier een paar vragenlijsten van een paar jaar geleden met een vraag "Hoevaak is dit de afgelopen 7 dagen voorgekomen?", en deze vraag is als volgt gecodeerd:
0 = 1 dag
1 = 2 dagen
2 = 3 dagen
3 = 4 dagen
4 = 5 dagen
5 = 6 dagen
6 = 7 dagen
echt, waarom?!

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Omdat de codering volledig arbitrair is en verder geen semantische betekenis heeft. Dat jij die vervolgens wel probeert toe te kennen ligt meer aan jou dan aan het systeem
[ Voor 18% gewijzigd door .oisyn op 19-01-2011 14:50 ]
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.
#define IDLE_ANIM(book) mAnims[ NR_BOOK_STATES * MATH_ILog2( mBooks[(book)].id ) + 1 ]
mAnims is 6 groot (3 verschillende boeken welke elke 2 anims (NR_BOOK_STATES) heeft). [0,1; 2,3; 4,5]. Waarom hier een logaritme werd gebruikt is totaal onnodig (werkte wel) (mBooks[].id was dus 1, 2 of 4).
Als dat id wordt gezet op 0, 2 of 4 dan heb je geen logaritme meer nodig.. de programmeur voor mij was een typische wiskunde man
Jij denkt veel te abstract en in termen van 0-based indexing. Nooit had namelijk prima aan 0 toegekend kunnen worden..oisyn schreef op woensdag 19 januari 2011 @ 14:48:
[...]
Omdat de codering volledig arbitrair is en verder geen semantische betekenis heeft. Dat jij die vervolgens wel probeert toe te kennen ligt meer aan jou dan aan het systeem. De codering 0 staat gewoon voor het eerste antwoord in de lijst, niets meer en niets minder. Het eerste antwoord in de lijst is "1 dag".
Het is ook een abstract vraagstuk. De codering heeft niets, maar dan ook niets, met de betekenis van het antwoord te maken. Het is gewoon een id van een rij in een tabel. Bovendien staat "nooit" niet tussen de mogelijke antwoorden, en het is maar de vraag als ie dat wel had gestaan of de bedenker van de antwoorden had gewild dat ie bovenaan stond.Jij denkt veel te abstract
Hoe denk je dat die codering tot stand komt? Iemand vult gewoon een lijstje met antwoorden in, en het systeem gebruikt gewoon een opeenvolgende nummering voor elk antwoord. Waarschijnlijk heeft de invoerder nooit gezien dat de code van "dag 1" op die manier 0 werd, hij vulde gewoon het tabelletje in met antwoorden, met "dag 1" als eerste antwoord. Dat vervolgens afdoen als een slecht programmervoorbeeld slaat compleet nergens op.
[ Voor 36% gewijzigd door .oisyn op 19-01-2011 16:20 ]
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.
Hij denkt zo abstract als een goeie dev dat zou doen. Die getallen hebben niks met de betekenis te maken. Het maakt geen fluit uit of "1 dag" nu 0, 1, of 2000 is. Dat iemand dat hier aandraagt is m.i. een grotere WTF.Vinnienerd schreef op woensdag 19 januari 2011 @ 16:12:
Jij denkt veel te abstract
https://niels.nu
Los daarvan kun je tijdens de verwerking van je resultaten in SPSS of Excel natuurlijk makkelijkk 1 erbij optellen als jouw dat goed uitkomt.
En dat op een overheidswebsite over het EPDppx17 schreef op donderdag 06 januari 2011 @ 18:20:
[...]
Als we dan toch bezig zijn:
http://www.medicatieoverdracht.nl/Logging/message.asp?MessageID=998&MessageStr=%3Cscript%3Ealert%28%27hoi%27%29%3C/script%3E&button=none&url=
Wel heel basic...

Koop of verkoop je webshop: ecquisition.com
Zulke dingen kunnen op meerdere websites van de overheid. Zelfs op sommige ministeriesites. Ook Google-indexatie in combinatie met vertrouwelijke documenten schijnen ze weinig vanaf te wetenmocean schreef op woensdag 19 januari 2011 @ 17:08:
[...]
En dat op een overheidswebsite over het EPD


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.
't is wel een klassiek schoolvoorbeeld van hoe 't niet. Ik ben nu overtuigd, met dat EPD komt 't wel goed.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Geeft me echt vertrouwen in die site.
Het klopt natuurlijk wel, maar geeft nou niet echt een idee van "Die site wordt vaak bijgewerkt". Sowieso kan ieder weldenkend mens wel bedenken wanneer de jaarwisseling is...
[ Voor 42% gewijzigd door Alex) op 19-01-2011 21:22 ]
We are shaping the future
Het doet me überhaupt heel erg denken aan allerlei 1999 sites:Alex) schreef op woensdag 19 januari 2011 @ 21:20:
Ook een mooi stukje kwaliteitscode trouwens:
[afbeelding]
Geeft me echt vertrouwen in die site.
Het klopt natuurlijk wel, maar geeft nou niet echt een idee van "Die site wordt vaak bijgewerkt". Sowieso kan ieder weldenkend mens wel bedenken wanneer de jaarwisseling is...
"Het is nu: woensdag 19 januari 2011"
"De tijd is: 21:27"
"Deze pagina is opgebouwd in 0.4s met 41 database queries"
"U bent de 95773e bezoeker"
etc.
Dat is niet per definitie slecht. Doet google toch ook?mithras schreef op woensdag 19 januari 2011 @ 21:28:
[...]
"Deze pagina is opgebouwd in 0.4s met 41 database queries"
Dus als Google iets doet is het goed? IMHO is het totaal onrelevante informatie voor de bezoeker en kan het dus gewoon weggelaten worden.Avalaxy schreef op woensdag 19 januari 2011 @ 21:31:
[...]
Dat is niet per definitie slecht. Doet google toch ook?
Tsja, Google heeft een heel leger aan mensen met een academisch diploma die daar ongetwijfeld een stuk meer over hebben nagedacht dan jij. Ik vertrouw er dan maar op dat daar kennelijk toch een reden voor is.hostname schreef op woensdag 19 januari 2011 @ 21:39:
[...]
Dus als Google iets doet is het goed? IMHO is het totaal onrelevante informatie voor de bezoeker en kan het dus gewoon weggelaten worden.
[ Voor 25% gewijzigd door .oisyn op 19-01-2011 21:45 ]
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 vind ik het ook niets toevoegen.
Mooie argumentum ad verecundiamAvalaxy schreef op woensdag 19 januari 2011 @ 21:42:
[...]
Tsja, Google heeft een heel leger aan mensen met een academisch diploma die daar ongetwijfeld een stuk meer over hebben nagedacht dan jij. Ik vertrouw er dan maar op dat daar kennelijk toch een reden voor is.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Soms moet je verder kijken dan je neus lang is....oisyn schreef op woensdag 19 januari 2011 @ 16:17:
[...]
Het is ook een abstract vraagstuk. De codering heeft niets, maar dan ook niets, met de betekenis van het antwoord te maken. Het is gewoon een id van een rij in een tabel. Bovendien staat "nooit" niet tussen de mogelijke antwoorden, en het is maar de vraag als ie dat wel had gestaan of de bedenker van de antwoorden had gewild dat ie bovenaan stond.
Hoe denk je dat die codering tot stand komt? Iemand vult gewoon een lijstje met antwoorden in, en het systeem gebruikt gewoon een opeenvolgende nummering voor elk antwoord. Waarschijnlijk heeft de invoerder nooit gezien dat de code van "dag 1" op die manier 0 werd, hij vulde gewoon het tabelletje in met antwoorden, met "dag 1" als eerste antwoord. Dat vervolgens afdoen als een slecht programmervoorbeeld slaat compleet nergens op.
Met de uitslagen van deze vragenlijsten wordt nog jaren gewerkt, ze worden gedeeld en gekopieerd naar andere databases etc. Bovendien was in ditzelfde onderzoek op een later tijdstip inderdaad de optie "0=nooit" toegevoegd gevolgd door 1=1 dag 2=2 dagen etc.
Je kan dan als databaseontwerper wel bij hoog en bij laag volghouden dat het een codering is en niets met de betekenis van het antwoord te maken heeft.. maar bij deze vraag ("hoeveel dagen?") is het gewoon smeken om fouten.
mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider
Smeken om fouten? Degene die denkt dat de codering iets zegt over het antwoord is dit topic waardig. Zolang je dat in je achterhoofd houdt, weet je dat je de codering eerst moet converteren naar een waarde waar je iets mee kan.BdR schreef op woensdag 19 januari 2011 @ 23:51:
maar bij deze vraag ("hoeveel dagen?") is het gewoon smeken om fouten.
Overigens
Ik redeneerde niet vanuit de rol als databaseontwerper, maar idd, dan geldt het ook.Je kan dan als databaseontwerper
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.
Verwijderd
De inhoud is vaak ook een zaak van de beheerder, oftewel een eindgebruiker vanuit het standpunt van de programmeur. Wat die beheerder doet moet hij lekker zelf weten, zo lang het binnen de scope van de applicatie valt moet de applicatie er gewoon netjes mee om kunnen gaan.
Ik ben het er wel mee eens, de key / codering zegt niks over de betekenis. Ik kan me wel voorstellen dat een programmeur denkt dat de waardes overeen komen met aantal dagen, maar dat zou feitelijk nergens op gebaseerd zijn, het zou dus een aanname zijn. En aannames...
Ampera-e (60kWh) -> (66kWh)
Als je het echt puristisch wil doen, moet je gebruik maken van een tweede array die de integer-waarde waarmee gerekend moet worden, opslaat. Maar da's moeilijk doen terwijl het ook makkelijk kan
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
Sorry maar dit slaat natuurlijk helemaal nergens op.Zyppora schreef op donderdag 20 januari 2011 @ 08:45:
Ik kan me best voorstellen dat in beginsel de indexing van een array niets met de values van die array te maken moet hebben. Echter zijn er voorbeelden te bedenken waarbij een bepaalde overeenkomst daarin wenselijk is, bijvoorbeeld wanneer er gerekend moet worden in een agenda of zo. Het leven van de developer wordt dan een stuk makkelijker als '1 dag' de index 1 heeft, '2 dagen' index 2, etc.
Als je het echt puristisch wil doen, moet je gebruik maken van een tweede array die de integer-waarde waarmee gerekend moet worden, opslaat. Maar da's moeilijk doen terwijl het ook makkelijk kan
Een indexering in een array heeft gewoon per definitie niets met de waarden die deze bevat te maken. Als per toeval de data samenvalt met het arrayindex, so be it, maar dan nog mag je daar geen gebruik van maken.
Het heeft niets met moeilijk doen of puristisch te maken, het gaat om fundamentele verschillen.
Het voorbeeld van je agenda snap ik niet helmaal. Hoezo sla je in een agenda ' 2 dagen' op?
Dat is dan niet zo slim om de waarden van de antwoorden te veranderen.BdR schreef op woensdag 19 januari 2011 @ 23:51:
[...]
Soms moet je verder kijken dan je neus lang is...
Met de uitslagen van deze vragenlijsten wordt nog jaren gewerkt, ze worden gedeeld en gekopieerd naar andere databases etc. Bovendien was in ditzelfde onderzoek op een later tijdstip inderdaad de optie "0=nooit" toegevoegd gevolgd door 1=1 dag 2=2 dagen etc.
Je kan dan als databaseontwerper wel bij hoog en bij laag volghouden dat het een codering is en niets met de betekenis van het antwoord te maken heeft.. maar bij deze vraag ("hoeveel dagen?") is het gewoon smeken om fouten.
Maar vragen om fouten? Waarom zou het hier ineens fout gaan omdat je de index ook als de waarde van het antwoord zou kunnen interpreteren? Bij antwoorden 0=vaak 1=af en toe 2=soms gaat het dan nooit fout
Een groot systeem maak je niet in je eentje, er zijn altijd andere programmeurs en users die met jouw code en data moeten werken. En je maakt jezelf niet populair binnen zo'n team als je de Sheldon-achtige purist gaat uithangen (Big Bang Theory
Het maakt rekenen met datums makkelijker, datum+aantaldagen is makkelijker dan datum+aantaldagen+1, tenzij aantaldagen=7 dan datum (o.i.d.).EddoH schreef op donderdag 20 januari 2011 @ 09:31:
Het voorbeeld van je agenda snap ik niet helmaal. Hoezo sla je in een agenda ' 2 dagen' op?
mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider
Het gaat er niet om purist/makkelijke samenwerking/leesbaarheid.
Dat er data als volgt opgeslagen is:
[0] -> 1
[1] -> 2
[3] -> 3
is niet vreemd/onlogisch/onleesbaar of wat dan ook: de index is per definitie niet verbonden met de data.
Dat er gevallen zijn dat ze wel 1 op 1 overeenkomen doet daar niets aan af.
60 = 1 minuut
3600 = 1 uur
86400 = 1 dag, oeps, we moeten van 16 bits naar 32 bits overgaan.
31536000 = 1 jaar
Dan is het opeens wel logisch om 1 2 3 4 5 te gebruiken. (of 0 1 2 3 4)
Wat mij betreft is zelf het volgende goed :
1 = 1 dag
2 = 4 dagen
3 = 2 dagen
5 = 7 dagen
6 = 6 dagen
10 = 3 dagen
11 = 5 dagen
20 = nooit
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Je moet dan ook rekenen met de waarden, niet met de sleutels. De sleutels hadden evengoed a=1 dag, b=2 dagen, c=3 dagen, ... kunnen zijn, of αβγ, of абв. Dat ze in dit geval toevallig beiden binnen het domein {0..7} vallen doet daar niets aan af.BdR schreef op donderdag 20 januari 2011 @ 10:18:
Het maakt rekenen met datums makkelijker, datum+aantaldagen is makkelijker dan datum+aantaldagen+1, tenzij aantaldagen=7 dan datum (o.i.d.).
Die conversie is een probleem dat je vaker zult tegenkomen. Namelijk ook wanneer je antwoorden {'s ochtends, 's middags, 's avonds} waren en iemand daar {'s nachts, 's ochtends, 's middags, 's avonds} van maakt. Dan moet je óók converteren, en dat staat helemaal los van of de data en de sleutels in hetzelfde domen vallen.BdR schreef op woensdag 19 januari 2011 @ 23:51:
et de uitslagen van deze vragenlijsten wordt nog jaren gewerkt, ze worden gedeeld en gekopieerd naar andere databases etc. Bovendien was in ditzelfde onderzoek op een later tijdstip inderdaad de optie "0=nooit" toegevoegd gevolgd door 1=1 dag 2=2 dagen etc.
[ Voor 39% gewijzigd door ValHallASW op 20-01-2011 10:33 ]
En wat te bedenken als er een 8 = meer dan 7 dagen bijkomt?ValHallASW schreef op donderdag 20 januari 2011 @ 10:30:
[...]
Je moet dan ook rekenen met de waarden, niet met de sleutels. De sleutels hadden evengoed a=1 dag, b=2 dagen, c=3 dagen, ... kunnen zijn, of αβγ, of абв. Dat ze in dit geval toevallig beiden binnen het domein {0..7} vallen doet daar niets aan af.
Als je aan de vraag "Hoevaak is dit de afgelopen 7 dagen voorgekomen?" de antwoordmogelijkheid "meer dan 7 dagen" toevoegd, dan heb je een probleem van een heel andere orde.M1lamb3r schreef op donderdag 20 januari 2011 @ 10:50:
[...]
En wat te bedenken als er een 8 = meer dan 7 dagen bijkomt?
Maar hoe dan ook, I've made my point. Degenen die cijferreeksen zoals 1..7 willen opslaan als 1=1, 2=4, 3=2 etc. moeten dat vooral doen.
mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider
Uiteraard kun je de volgorde/waarde/type van de index naar eigen believen kiezen, met de values zou dan nog niets mogen gebeuren. Ik zeg ook absoluut niet dat je ervan moet uitgaan dat er enige correlatie is tussen indexes en values, behalve dat ze consistent door het systeem gebruikt worden.EddoH schreef op donderdag 20 januari 2011 @ 10:29:
Maar je mist het principe helemaal.
Het gaat er niet om purist/makkelijke samenwerking/leesbaarheid.
Dat er data als volgt opgeslagen is:
\[0] -> 1
\[1] -> 2
\[3] -> 3
is niet vreemd/onlogisch/onleesbaar of wat dan ook: de index is per definitie niet verbonden met de data.
Dat er gevallen zijn dat ze wel 1 op 1 overeenkomen doet daar niets aan af.
Ik zeg alleen dat het in sommige situaties praktischer is om daar wel enige correlatie tussen te hebben.
1
2
3
4
5
6
7
8
9
10
11
| // Array met te kiezen dagen $dagen = array( 1 => '1 dag', 2 => '2 dagen', 3 => '3 dagen' ); // code om de dropdown box te laten zien met de waarden foreach ($dagen as $key => $value) { echo "<option value=".$key.">".$value."</option>"; } |
En dan in de vervolgpagina laat je daadwerkelijk de afspraken voor die dagen zien:
1
| $query = "SELECT * FROM afspraken WHERE date >= ".$vandaag." AND date <= ".$vandaag + $_POST['dagen']; |
Even puur ter illustratie in semi-pseudocode zonder verdere checks of SQL injectie e.d.
Misschien dat je liever zoiets had gezien?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| // Array met te kiezen dagen $dagen = array( 0 => '1 dag', 1 => '2 dagen', 2 => '3 dagen' ); // Index - value mapping die nodig is omdat er geen verband is tussen index en value $dagen_index_mapping = array( 0 => 1, 1 => 2, 2 => 3 ); // code om de dropdown box te laten zien foreach ($dagen_index_mapping as $key => $value) { echo "<option value=".$key.">".$dagen[$value]."</option>"; } |
1
2
3
4
5
6
7
8
| // Index - value mapping die nodig is omdat er geen verband is tussen index en value $dagen_index_mapping = array( 0 => 1, 1 => 2, 2 => 3 ); $query = "SELECT * FROM afspraken WHERE date >= ".$vandaag." AND date <= ".$vandaag + $dagen_index_mapping[$_POST['dagen']]; |
Is politiek correct, maar (zeker in kleinere projecten/scripts) niet echt praktisch als je het mij vraagt.
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
De codering zegt niets over de waarde die erbij hoort.
Dat je nu een stukje PHP post waarin je 3 regels kan besparen omdat het aantal dagen toevallig overeenkomen met de index van de array doet er niets aan af.
Als je je voorbeeld nu met weken, jaren, datums zou implementeren, dan gaat die hele vlieger toch niet op?
Oftewel: in dit ene specifieke voorbeeld komt het toevallig goed uit dat het aantal dagen ook de index van de array is. Dat zegt toch niets over de codering van waarden, en je originele ' slechtste programmeervoorbeeld' ?
[ Voor 63% gewijzigd door EddoH op 20-01-2011 11:20 ]
*facepalm*Zyppora schreef op donderdag 20 januari 2011 @ 11:03:
// Index - value mapping die nodig is omdat er geen verband is tussen index en value
$dagen_index_mapping = array(
0 => 1,
1 => 2,
2 => 3
);
Je hébt de values al, alleen ben je zo stom geweest om ze als string op te slaan. Je moet die waardes gebruiken, niet een extra mapping maken of weet ik veel wat. De situatie is namelijk de volgende:
1
| $dagen = array("1 dag", "2 dagen", "3 dagen"); |
terwijl het logischer was geweest om dat op te slaan als
1
| $dagen = array(1,2,3); |
dan wordt je output
1
2
3
| foreach ($dagen as $key => $value) { echo "<option value=".$key.">".$dagen[$value]. "dag(en) </option>"; } |
waardoor je gewoon in je SQL had kunnen doen:
1
| $query = "SELECT * FROM afspraken WHERE date >= ".$vandaag." AND date <= ".$vandaag + $dagen[$_POST['dagen']]; |
En eventueel had je natuurlijk die $dagen array anders op kunnen maken, door er een (ID, getalswaarde, displaywaarde)-tuple van te maken. Dan vang je het dag(en) wat netter af (of je gebruikt je favoriete i18n-lib daarvoor)
[ Voor 10% gewijzigd door ValHallASW op 20-01-2011 13:26 ]
Als je een vragen lijst hebt waar de drie genoemde elementen de hele tijd gescheiden zijn, moet je niet ineens de index en waarde gaan combineren omdat dat toevallig even handiger is. Dat zou ik wel doen als je een klein formpje moet maken, maar een systeem vol met vragenlijsten ga je eerder naar een generieke oplossing.
Edit: wat je dus in je toevoeging (vanaf 'eventueel') beschrijft..
[ Voor 5% gewijzigd door !null op 20-01-2011 13:47 ]
Ampera-e (60kWh) -> (66kWh)
Geen probleem, totdat iemand besluit dat de id en de waarden overeen moeten komen (zoals hier gebeurde). Ik denk echter dat de meeste mensen het met jou eens zullen zijn, MBV.MBV schreef op donderdag 20 januari 2011 @ 16:35:
Ik snap werkelijk niet waar deze discussie heengaat. Er is kennelijk iets van een database met vragen voor een enquete. Daarin heeft iemand 7 waardes toegevoegd: 1 dag, 2 dagen, .... 7 dagen. Die hebben een automatisch gegenereerd uniek id. Wat is daar het grote probleem van?
Niet veel code gezien zeker,Avalaxy schreef op maandag 24 januari 2011 @ 19:54:
Heeft iemand ervaring met de voteitup plugin van Wordpress? Man, ik heb nog nooit zulke bagger code gezien
* YopY projecteert.
Voornamelijk zelfbouwYopY schreef op maandag 24 januari 2011 @ 20:47:
[...]
Niet veel code gezien zeker,.
* YopY projecteert.
Maar nee, dit is echt bizar gewoon... Wtf

http://plugins.trac.wordpress.org/browser/vote-it-up/trunk
[ Voor 3% gewijzigd door MBV op 24-01-2011 22:49 ]
Ik zie hier wel wat amusants... Maar, inderdaad, voor de korte indruk die ik er van heb niet heel erg afwijkend van "gewoon php".MBV schreef op maandag 24 januari 2011 @ 22:48:
@Avalaxy: waar dan? Ik heb net even door de SVN heen gebladerd, en zie niet echt schokkende WTF's. Behalve dan de extreem slechte indentation, verder is het 'gewoon' PHP, niet bijzonder.
http://plugins.trac.wordpress.org/browser/vote-it-up/trunk
[ Voor 9% gewijzigd door RobIII op 24-01-2011 23: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
Verwijderd
Als ik voor het gemak even naar voteitup.php kijk:MBV schreef op maandag 24 januari 2011 @ 22:48:
@Avalaxy: waar dan? Ik heb net even door de SVN heen gebladerd, en zie niet echt schokkende WTF's. Behalve dan de extreem slechte indentation, verder is het 'gewoon' PHP, niet bijzonder.
http://plugins.trac.wordpress.org/browser/vote-it-up/trunk
- Idd zuigende indenting
- Zwaar gebrek aan OOP
- Functies van >200 regels lang, die écht heel veel meer doen dan de functienaam doet vermoeden
- Megamengsel van presentatie en logica door elkaar heen
- Geen enkele vorm van inline documentatie (dat gedeelte helemaal bovenaan kan ik geen documentatie noemen)
- PHP globals?
- Een switch statements met een hele zooi geneste if / else statements (niet eens elseif) waarvan ik denk... okeeeeeeeeee?
- Er is geen enkele vorm van codeconventie te vinden (geen spaties voor/na operators vs. wel spaties voor/na operators, haakjes die telkens weer anders staan (de ene keer op de Java manier, de andere keer op de C# manier).
- Het gebruik maken van deprecated methodes.
En dan heb ik het nog niet gehad over de "library" van >1000 regels code waar ook geen touw aan vast te knopen valt, de compleet onoverzichtelijke database die er achter hangt, de "magische" methodes die maar "iets" doen zonder dat dat ook maar enigszins duidelijk wordt uit de naam wat dat precies is...
Zoiets als dit kan echt 100x makkelijker
Gelukkig dan maar dat ik niet van plan ben mezelf nog meer dan 5 jaar bezig te houden met PHPalex3305 schreef op maandag 24 januari 2011 @ 23:10:
Klinkt als een uit de hand gelopen hobby project. Werk bijvoorbeeld maar eens met CMS Made Simple, krijg je hetzelfde idee, alhoewel ze nu wel aan de weg aan het timmeren zijn. Overigens vind ik de punten die je aanhaalt niet bijster bijzonder voor PHP... Eigenlijk best triest.
IMDB vote history | Next-gen OS, audio en video player, search engine en Movie DB

Het is daar gewoon een zooitje en plugins schrijven kán bijna alleen op die manier. Eén keer heb ik iets in Wordpress moeten doen, daarna meteen maar afgesproken dat we nooit meer Wordpress aanbieden, wat een ramp was dat

1
2
3
4
5
6
7
8
9
10
| <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; ?> </body> </html> |
De wijze les: Je controleert dat het vrijdag is door de datum te nemen, te converteren naar een locale-afhankelijke drie-letterige string, en te vergelijken met een stringwaarde. Indentatie en whitespace is niet belangrijk, en je zou code en HTML door elkaar heen moeten gebruiken.
Dat is het eerste dat een verse PHP-er leert, en dat blijft nog lange tijd hangen.
En Wordpress is een mooi product... aan de voorkant, ik durf de code niet te bekijken
Edit @ V: Excuus, my bad
[ Voor 4% gewijzigd door YopY op 25-01-2011 20:46 ]
Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.
1
2
3
4
5
6
7
| protected override void OnPreRender(EventArgs e) { if(DateTime.Now.DayOfWeek == DayOfWeek.Friday) { someLiteral.Text = "Have a nice weekend!"; } } |
Way better.
We are shaping the future
Verwijderd
Op zich heb je wel gelijk, alleen als je met slechte code aankomt bij een forum(tweakers bv) en een topic opent dan wordt je toch wel gelijk de grond in gemeptYopY schreef op dinsdag 25 januari 2011 @ 11:34:
Stiekem moet er gewoon een club doorgewinterde ontwikkelaars zich op PHP (OS) projecten storten en al die dingen in één keer oplossen. Goed voorbeeld doet goed volgen. Liefst ook het hele internet omgooien, er wordt veel onzin en suboptimale zooi verkondigd als je naar PHP tutorials zoekt. Klein willekeurig voorbeeld: eerste hit op 'php tutorials' is het bekende w3schools. Wat leren ze je aan bij de eerste les if / else?
PHP:
1 2 3 4 5 6 7 8 9 10 <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; ?> </body> </html>
De wijze les: Je controleert dat het vrijdag is door de datum te nemen, te converteren naar een locale-afhankelijke drie-letterige string, en te vergelijken met een stringwaarde. Indentatie en whitespace is niet belangrijk, en je zou code en HTML door elkaar heen moeten gebruiken.
Dat is het eerste dat een verse PHP-er leert, en dat blijft nog lange tijd hangen.
En Wordpress is een mooi product... aan de voorkant, ik durf de code niet te bekijken.
Al doende leert men
Alex) schreef op dinsdag 25 januari 2011 @ 11:46:
C#:
1 2 3 4 5 6 7 protected override void OnPreRender(EventArgs e) { if(DateTime.Now.DayOfWeek == DayOfWeek.Friday) { someLiteral.Text = "Have a nice weekend!"; } }
Way better.
1
2
| if (Zend_Date::now()->equals(5, Zend_Date::WEEKDAY_8601)) { } |
En ook met Cake, Symphony of CodeIgniter, dat werkt soortgelijk
[ Voor 8% gewijzigd door mithras op 25-01-2011 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.
Dat dus.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Maar zo te zien is het de vijfde dag van de week (vrijdag dus).
Edit: en iemand was mij al weer voor.
[ Voor 13% gewijzigd door Jaap-Jan op 25-01-2011 12:14 ]
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
De ISO 8601 nummering van dagen van de week (voorbeeld).
Je had ook Zend_Date::WEEKDAY_NARROW kunnen gebruiken ("F") of Zend_Date::WEEKDAY_NAME ("Friday") maar die zijn localized en dat is niet handig in je i18n app
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Tja, voor een berichtje als "Have a nice weekend" is het natuurlijk voldoende om aan te nemen dat het weekend op zaterdag en zondag valt._js_ schreef op dinsdag 25 januari 2011 @ 12:57:
Maar zelfs al gebruik je DayOfWeek.Friday dan ben je nog niet van je locale-afhankelijkheid af. Een weekend kan immers op donderdag en vrijdag vallen, op vrijdag en zaterdag, alleen vrijdag, of op zaterdag en zondag.
Je kan ook te nitpickerig zijn.
Tjah, w3schools... het wordt dringend tijd dat die website offline wordt gehaald of helemaal wordt aangepast.YopY schreef op dinsdag 25 januari 2011 @ 11:34:
Klein willekeurig voorbeeld: eerste hit op 'php tutorials' is het bekende w3schools. Wat leren ze je aan bij de eerste les if / else?
PHP:
1 2 3 4 5 6 7 8 9 10 <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; ?> </body> </html>
De wijze les: Je controleert dat het vrijdag is door de datum te nemen, te converteren naar een locale-afhankelijke drie-letterige string, en te vergelijken met een stringwaarde. Indentatie en whitespace is niet belangrijk, en je zou code en HTML door elkaar heen moeten gebruiken.
Dat is het eerste dat een verse PHP-er leert, en dat blijft nog lange tijd hangen.
http://www.w3fools.com
Verwijderd
Ik moet zeggen, tijdens het leren van SQL, PHP en Html heb ik in het begin veel gekeken naar W3Schools, ik dacht eigenlijk dat het van het W3C was. Ik snap nu wel dat het niet zo is, maar toch als beginnend programmeur kijk je op tegen zo'n website.YopY schreef op dinsdag 25 januari 2011 @ 11:34:
Stiekem moet er gewoon een club doorgewinterde ontwikkelaars zich op PHP (OS) projecten storten en al die dingen in één keer oplossen. Goed voorbeeld doet goed volgen. Liefst ook het hele internet omgooien, er wordt veel onzin en suboptimale zooi verkondigd als je naar PHP tutorials zoekt. Klein willekeurig voorbeeld: eerste hit op 'php tutorials' is het bekende w3schools. Wat leren ze je aan bij de eerste les if / else?
PHP:
1 2 3 4 5 6 7 8 9 10 <html> <body> <?php $d=date("D"); if ($d=="Fri") echo "Have a nice weekend!"; ?> </body> </html>
De wijze les: Je controleert dat het vrijdag is door de datum te nemen, te converteren naar een locale-afhankelijke drie-letterige string, en te vergelijken met een stringwaarde. Indentatie en whitespace is niet belangrijk, en je zou code en HTML door elkaar heen moeten gebruiken.
Dat is het eerste dat een verse PHP-er leert, en dat blijft nog lange tijd hangen.
En Wordpress is een mooi product... aan de voorkant, ik durf de code niet te bekijken.
Misschien is het een idee om een keer collectief zelf zo'n website op te zetten. Met tutorials op dit gebied.
Maar wie dat was en welke site dat betrof, ik heb geen idee meer
2. Nog een tutorial site?

áls er een tutorialsite zou komen zou ik het opzetten als een verzameling regelmatig voorkomende tutorials / FAQs die regelmatig opnieuw nagekeken worden op actualiteit, correctheid, nieuwe inzichten, ontwikkelde best practices, en gewoon Verbeteringen. Een sociale variant zou een pagina zijn met een aantal tutorials die de gebruikers omhoog kunnen stemmen, maar dat zou iets teveel content en keuze op één pagina hebben (en last krijgen van papegaaistemmen). Nog een variant zou een openbare wiki zijn, maar dan heb je weer het risico dat er misinformatie inkomt als het niet strak gemodereerd wordt door experts.
Edit: ah was al gepost
[ Voor 21% gewijzigd door RambOe op 25-01-2011 21:02 ]
Een expression gebruikt als statement ís gewoon een statement.www.w3schools.com/JS/js_statements.asp.
[JavaScript code (or just JavaScript) is a sequence of JavaScript statements.]
Apparently declarations and expressions can go right to hell (since JavaScript only is a sequence of statements).
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.
Battle.net - Jandev#2601 / XBOX: VriesDeJ
Een rijbewijs halen geeft niet de garantie van een goede chauffeurJan_V schreef op dinsdag 25 januari 2011 @ 21:52:
Niet zo negatief he, je kunt je wel W3Schools certificeren, dus het is goed
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
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.