No trees were harmed in the creation of this message, but several thousand electrons were mildly inconvenienced.
Wat gaat er 12 januari 2016 gebeuren?
Collega met de meest beroerde muzieksmaak heeft besloten dat de radio aan moet. Op een of andere dance-kutzender.
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Ik weet niet of je de Numerical Recipes in C wel eens gezien hebt? Dat stroomt over van de korte variabelenamen en als ik het lees moet ik huilen. Willekeurig voorbeeld uit een willekeurig bestand genaamd dsprsax.c:RayNbow schreef op vrijdag 08 augustus 2014 @ 10:03:
[...]
Wat is er mis met korte variabelenamen?
Haskell:
1 2 foldr f z [] = z foldr f z (x:xs) = x `f` foldr f z xs
Is toch prima leesbaar?
1
2
3
4
5
6
7
8
9
10
11
| void dsprsax(double *sa, unsigned long *ija, double *x, double *b, unsigned long n) { void nrerror(); unsigned long i,k; if (ija[1] != n+2) nrerror("dsprsax: mismatched vector and matrix"); for (i=1;i<=n;i++) { b[i]=sa[i]*x[i]; for (k=ija[i];k<=ija[i+1]-1;k++) b[i] += sa[k]*x[ija[k]]; } } |
Bron: http://home.uchicago.edu/...rograms/golding/dsprsax.c
What. The. Fuck.
[ Voor 7% gewijzigd door HuHu op 08-08-2014 12:04 ]
Gefeliciteerd.Ealanrian schreef op vrijdag 08 augustus 2014 @ 12:03:
Behalve dat ik ook ben aangenomen voor Computer science op Utwente denk ik niet veel.
We are shaping the future
Meenemen naar buiten en schotje hagel achter het schuurtjeFiresphere schreef op vrijdag 08 augustus 2014 @ 12:00:
#^@%&#%$^&%*^(
Collega met de meest beroerde muzieksmaak heeft besloten dat de radio aan moet. Op een of andere dance-kutzender.
Lekker op de bank
Tja, het ding heeft wel een eenheid om beter overweg te kunnen met getallen met drijvende komma. Ze kunnen er eigenlijk toch wel FPU neerzetten, het is niet alsof mensen die niet weten wat een FPU is er nu wel wijzer op worden.Alex) schreef op vrijdag 08 augustus 2014 @ 11:44:
Op de homepage zag ik een advertorial voor de Gouden NAS, waarin werd doorgelinkt naar de productpagina van de Synology DS415play. Bij de unique selling points viel me het volgende op:
[...]
Als dat nou eens legaal was met bepaalde zaken....ZaZ schreef op vrijdag 08 augustus 2014 @ 12:11:
[...]
Meenemen naar buiten en schotje hagel achter het schuurtje
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Hij heeft waarschijnlijk dezelfde mening over jouw beroerde muzieksmaak....Firesphere schreef op vrijdag 08 augustus 2014 @ 12:00:
#^@%&#%$^&%*^(
Collega met de meest beroerde muzieksmaak heeft besloten dat de radio aan moet. Op een of andere dance-kutzender.
Dat iemand van andere muziek houd, maakt zijn/haar muzieksmaak natuurlijk nog niet beroerd...
tenzij het over palingsound gaat natuurlijk
Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site
Ja, en er wordt niets verwijdert, maar je kan ook niets meer uploaden totdat je de ruimte weer vrijmaakt zodat je onder je limiet komt.whoami schreef op vrijdag 08 augustus 2014 @ 09:51:
[...]
Wat gebeurt er eigenlijk met die 1TB als je uw Office 365 abbo opzegt of niet meer verlengd ? Val je dan terug op de standaard 15gb ?
Ik wilde gaan neer zetten dat het er gewoon uitziet als een wiskunde formule die is omgezet op een nogal vage manier, maar dit ziet er wel heel vaag uit. Die i, j en k kan ik me nog wel voorstellen, maar ija?HuHu schreef op vrijdag 08 augustus 2014 @ 12:01:
[...]
C:
1 2 3 4 5 6 7 8 9 10 11 void dsprsax(double *sa, unsigned long *ija, double *x, double *b, unsigned long n) { void nrerror(); unsigned long i,k; if (ija\[1] != n+2) nrerror("dsprsax: mismatched vector and matrix"); for (i=1;i<=n;i++) { b\[i]=sa\[i]*x\[i]; for (k=ija\[i];k<=ija[i+1]-1;k++) b\[i] += sa\[k]*x[ija\[k]]; } }
Bron: http://home.uchicago.edu/...rograms/golding/dsprsax.c
What. The. Fuck.
En mijn c kennis en kennis van deze library is overduidelijk niet voldoende, want wat bedoelen ze nou weer met b\[i]?
Er is nogal een verschil tussen je eigen muziek opdringen (op volume standje 11), t.o.v. wat ik eventueel aan zou zetten.Acid_Burn schreef op vrijdag 08 augustus 2014 @ 12:24:
[...]
Hij heeft waarschijnlijk dezelfde mening over jouw beroerde muzieksmaak....
Dat iemand van andere muziek houd, maakt zijn/haar muzieksmaak natuurlijk nog niet beroerd...
tenzij het over palingsound gaat natuurlijk
Ik hou gewoon rekening met m'n collega's, en zorg dus voor iets algemeens wat niet storend is.
Da's heel iets anders dan zijn klootzakgedrag.
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Gelukkig kun je aan de functienaam aflezen wat het doet. Ow wacht...Caelorum schreef op vrijdag 08 augustus 2014 @ 12:32:
[...]
Ik wilde gaan zetten dat het er gewoon uitziet als een wiskunde formule die is omgezet op een nogal vage manier, maar dit ziet er wel heel vaag uit. Die i, j en k kan ik me nog wel voorstellen, maar ija?
En mijn c kennis en kennis van deze library is overduidelijk niet volgoende, want wat bedoelen ze nou weer met b\[i]?
Volgens mij gaat er iets mis met escaping in jouw code quote. En ook al in mijn quote van jou zo te zienCaelorum schreef op vrijdag 08 augustus 2014 @ 12:32:
[...]
Ja, en er wordt niets verwijdert, maar je kan ook niets meer uploaden totdat je de ruimte weer vrijmaakt zodat je onder je limiet komt.
[...]
Ik wilde gaan neer zetten dat het er gewoon uitziet als een wiskunde formule die is omgezet op een nogal vage manier, maar dit ziet er wel heel vaag uit. Die i, j en k kan ik me nog wel voorstellen, maar ija?
En mijn c kennis en kennis van deze library is overduidelijk niet voldoende, want wat bedoelen ze nou weer met b\[i]?
Doet me denken aan mijn minst productieve tijd ooit.Firesphere schreef op vrijdag 08 augustus 2014 @ 12:00:
#^@%&#%$^&%*^(
Collega met de meest beroerde muzieksmaak heeft besloten dat de radio aan moet. Op een of andere dance-kutzender.
Ik kan gewoon iemand's muziek gewoon niet negeren en als ik dan ook nog naar slechte muziek moet luisteren (er wordt geen goede dance gedraaid op radiozenders, alleen blanke hoempa hoempa klompendans house met te veel compressie) terwijl ik het niet kán negeren dan is dat gewoon echt zwaar funest voor mijn productiviteit.Firesphere schreef op vrijdag 08 augustus 2014 @ 12:33:
[...]
Er is nogal een verschil tussen je eigen muziek opdringen (op volume standje 11), t.o.v. wat ik eventueel aan zou zetten.
Ik hou gewoon rekening met m'n collega's, en zorg dus voor iets algemeens wat niet storend is.
Da's heel iets anders dan zijn klootzakgedrag.
iOS developer
Dit.BikkelZ schreef op vrijdag 08 augustus 2014 @ 12:50:
[...]
Doet me denken aan mijn minst productieve tijd ooit.
[...]
Ik kan gewoon iemand's muziek gewoon niet negeren en als ik dan ook nog naar slechte muziek moet luisteren (er wordt geen goede dance gedraaid op radiozenders, alleen blanke hoempa hoempa klompendans house met te veel compressie) terwijl ik het niet kán negeren dan is dat gewoon echt zwaar funest voor mijn productiviteit.
Algemene pop-muziek op normaal volume is best te negeren, maar een muzieksoort die mijn concentratie volledig doorbreekt is gewoon kut.
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!

Helaas is de glasplaat die ik mee had besteld in 10 stukken binnen gekomen

Achja, refund is nu al geregeld, en dan haal ik wel een 20x20 spiegel bij de ikea...
Doe oordopjes in of vraag de betreffende collega om dit te doen met zijn herrie. Quit bitching about it.Firesphere schreef op vrijdag 08 augustus 2014 @ 12:57:
[...]
Dit.
Algemene pop-muziek op normaal volume is best te negeren, maar een muzieksoort die mijn concentratie volledig doorbreekt is gewoon kut.
.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?
Hoe gaan jullie om met zulke dingen?
True... dat is gewoon aso.Firesphere schreef op vrijdag 08 augustus 2014 @ 12:33:
[...]
Er is nogal een verschil tussen je eigen muziek opdringen (op volume standje 11), t.o.v. wat ik eventueel aan zou zetten.
Glass Eye Photography | Zelfbouw wireless fightstick | Mijn puzzel site
Let op: Mijn post bevat meningen, aannames of onwaarheden
Gamebuster schreef op vrijdag 08 augustus 2014 @ 13:18:
M'n kattebeest doet oogjes niet meer open en doet niets anders dan liggen en zwiepen met staart (al leg je haar op de grond) terwijl ze normaal springlevend is. Straks maar naar dierenarts...

We are shaping the future
Ja, dat denk ik ook.. Bij \[x] wordt de \ weggehaald als je een quote van een iets in codetags doetStruikrover schreef op vrijdag 08 augustus 2014 @ 12:49:
[...]
Volgens mij gaat er iets mis met escaping in jouw code quote. En ook al in mijn quote van jou zo te zien. b\[i], hehe

Zie dat het al is gemeld: Quoten van code
En succes Gamebuster! Hoop dat het allemaal wel mee gaat vallen...
[ Voor 11% gewijzigd door Caelorum op 08-08-2014 13:42 ]
HuHu schreef op vrijdag 08 augustus 2014 @ 12:01:
[...]
Ik weet niet of je de Numerical Recipes in C wel eens gezien hebt? Dat stroomt over van de korte variabelenamen en als ik het lees moet ik huilen. Willekeurig voorbeeld uit een willekeurig bestand genaamd dsprsax.c:
C:
1 2 3 4 5 6 7 8 9 10 11 void dsprsax(double *sa, unsigned long *ija, double *x, double *b, unsigned long n) { void nrerror(); unsigned long i,k; if (ija[1] != n+2) nrerror("dsprsax: mismatched vector and matrix"); for (i=1;i<=n;i++) { b[i]=sa[i]*x[i]; for (k=ija[i];k<=ija[i+1]-1;k++) b[i] += sa[k]*x[ija[k]]; } }
Bron: http://home.uchicago.edu/...rograms/golding/dsprsax.c
What. The. Fuck.
Het kostte ff wat moeite tot het kwartje viel, maar ik snap de naamgeving. De d staat voor double en sprs voor sparse. Dan staat ax voor de vermenigvuldiging van een matrix A en een vector x.HuHu schreef op vrijdag 08 augustus 2014 @ 12:37:
[...]
Gelukkig kun je aan de functienaam aflezen wat het doet. Ow wacht...
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Da's dus het probleem, betreffende collega wil niet zachter zetten, en het dreunt dus door m'n eigen muziek heen.Korben schreef op vrijdag 08 augustus 2014 @ 13:00:
[...]
Doe oordopjes in of vraag de betreffende collega om dit te doen met zijn herrie. Quit bitching about it.
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
De matrix A (sa in de code) is sparse, dus ija zijn de indices.Caelorum schreef op vrijdag 08 augustus 2014 @ 12:32:
[...]
Ik wilde gaan neer zetten dat het er gewoon uitziet als een wiskunde formule die is omgezet op een nogal vage manier, maar dit ziet er wel heel vaag uit. Die i, j en k kan ik me nog wel voorstellen, maar ija?
De output. als in... A*x = b.En mijn c kennis en kennis van deze library is overduidelijk niet voldoende, want wat bedoelen ze nou weer met b?
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Naar je baas lopen en zeggen dat die muziek zachter moet omdat je anders niet kan werken en dan je voeten op je bureau leggen? Beetje kinderachtig, maar ja.. Soms moet je jezelf gewoon verlagen naar het niveau van je tegenstander als die niet wil luisterenFiresphere schreef op vrijdag 08 augustus 2014 @ 13:51:
[...]
Da's dus het probleem, betreffende collega wil niet zachter zetten, en het dreunt dus door m'n eigen muziek heen.
Verwijderd
Gisteren aangekomen in de US na zo'n 20 uur onderweg geweest te zijn. Praktisch 40 uur niet geslapen (slapen in zo'n vliegtuig is echt een ramp) dus maar vroeg het bed in gegaan gisteren. Meteen perfect kunnen slapen dus zal vandaag totaal geen last van jetlag hebben, lijkt me zo.
Ah okRayNbow schreef op vrijdag 08 augustus 2014 @ 13:53:
[...] De matrix A (sa in de code) is sparse, dus ija zijn de indices. [...]
Jij hebt duidelijk geen last van de bug ^^ ik vroeg me niet af wat b was maar[...] De output. als in... A*x = b.
1
| b\[i] = iets... |
Maar dat is dus de bug en er hoort te staan b[i] ^^
[ Voor 14% gewijzigd door Caelorum op 08-08-2014 13:59 ]
20 uur?! Ben je via Zuid-Afrika gevlogen of zo?Verwijderd schreef op vrijdag 08 augustus 2014 @ 13:57:
Mogguh!
Gisteren aangekomen in de US na zo'n 20 uur onderweg geweest te zijn. Praktisch 40 uur niet geslapen (slapen in zo'n vliegtuig is echt een ramp) dus maar vroeg het bed in gegaan gisteren. Meteen perfect kunnen slapen dus zal vandaag totaal geen last van jetlag hebben, lijkt me zo.
.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?
Mijn kattebeest is 1 maand geleden bevallen, liet ik ze vorige week welgeteld 2 uur buiten is ze opnieuw zwanger en dat terwijl ze volgende week zou gesteriliseerd worden.Gamebuster schreef op vrijdag 08 augustus 2014 @ 13:18:
M'n kattebeest doet oogjes niet meer open en doet niets anders dan liggen en zwiepen met staart (al leg je haar op de grond) terwijl ze normaal springlevend is. Straks maar naar dierenarts...
RTFM!
Wordt jij thuis opgehaald door een privé-jet en daarmee afgezet naast de bestemming?Korben schreef op vrijdag 08 augustus 2014 @ 14:05:
[...]
20 uur?! Ben je via Zuid-Afrika gevlogen of zo?
Oh, ik heb de quote misschien hier en daar aangepast...Caelorum schreef op vrijdag 08 augustus 2014 @ 13:58:
[...]
Jij hebt duidelijk geen last van de bug ^^ ik vroeg me niet af wat b was maarcode:
1 b\[i] = iets...
Maar dat is dus de bug en er hoort te staan b[i] ^^

Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Gamebuster schreef op vrijdag 08 augustus 2014 @ 13:18:
M'n kattebeest doet oogjes niet meer open en doet niets anders dan liggen en zwiepen met staart (al leg je haar op de grond) terwijl ze normaal springlevend is. Straks maar naar dierenarts...

Sterkte.
I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!
Daarom dus poezen niet buiten laten totdat ze gesteriliseerd zijn ^^ Anders is het lopende band werk. Vooral als je wat actieve katers in een straal van 10km hebt wonen (want vaak wel zo is)._Moe_ schreef op vrijdag 08 augustus 2014 @ 14:06:
[...]
Mijn kattebeest is 1 maand geleden bevallen, liet ik ze vorige week welgeteld 2 uur buiten is ze opnieuw zwanger en dat terwijl ze volgende week zou gesteriliseerd worden.
Verwijderd
Ik ben thuis vertrokken om 2 uur 's nachts. Om 6 uur 's ochtends had ik mijn vlucht van Brussel naar Amsterdam om dan rond 8 uur een vlucht te hebben naar Detroit. Het is zo'n 8 uur vliegen dus dat wil zeggen dat ik om 10 uur lokale tijd aan kwam (16 uur hier). Dan nog een laatste vlucht van daar waarop ik 2 uur heb moeten wachten en die zelf nog een uur duurde. Uiteindelijk kom je dan aan op de luchthaven maar moet je nog naar het hotel geraken: weer even wachten op de shuttle dienst van het hotel dus. Eenmaal aangekomen snel de douche in en meteen terug aan het werk (het was uiteindelijk nog maar 3 uur in de namiddag dus kon ik nog snel een paar uren werken).Korben schreef op vrijdag 08 augustus 2014 @ 14:05:
[...]
20 uur?! Ben je via Zuid-Afrika gevlogen of zo?
Dus nee, ik ben niet via Zuid-Afrika gevlogen maar ik heb ook geen privéjet waar ik van thuis kan opstappen en die me vlak voor het werk af zet.
Uhm, WAT?!?!Verwijderd schreef op vrijdag 08 augustus 2014 @ 14:21:
[...]
Eenmaal aangekomen snel de douche in en meteen terug aan het werk (het was uiteindelijk nog maar 3 uur in de namiddag dus kon ik nog snel een paar uren werken).
We are shaping the future
Euh ja, wat is daar vreemd aan? Het is gewoon een vlucht met een overstap.
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.
U gaat door voor de koelkastRayNbow schreef op vrijdag 08 augustus 2014 @ 13:48:
[...]
[...]
Het kostte ff wat moeite tot het kwartje viel, maar ik snap de naamgeving. De d staat voor double en sprs voor sparse. Dan staat ax voor de vermenigvuldiging van een matrix A en een vector x.

Dan zou ik toch wat met hoofdletters gaan werken en hernoemen naar dSprsAx, zodat het ook wat makkelijker is om te zien hoe de afkortingen zijn opgedeeld.RayNbow schreef op vrijdag 08 augustus 2014 @ 13:48:
[...]
[...]
Het kostte ff wat moeite tot het kwartje viel, maar ik snap de naamgeving. De d staat voor double en sprs voor sparse. Dan staat ax voor de vermenigvuldiging van een matrix A en een vector x.
Het moet natuurlijk gewoon sparseMatrixVectorMultiply heten. Die d is sowieso overbodig, want de compiler ziet het verschil tussen float en double wel. En de conventie dat een matrix altijd A is en een vector altijd x, is discutabel en verwarrend. Ten slotte is het weglaten van alle klinkers ook onzin (sparse -> sprs).Gropah schreef op vrijdag 08 augustus 2014 @ 15:26:
[...]
Dan zou ik toch wat met hoofdletters gaan werken en hernoemen naar dSprsAx, zodat het ook wat makkelijker is om te zien hoe de afkortingen zijn opgedeeld.
C heeft geen function overloadingHuHu schreef op vrijdag 08 augustus 2014 @ 15:33:
[...]
Die d is sowieso overbodig, want de compiler ziet het verschil tussen float en double wel.
Although there is no restriction on the length of identifiers in the Standard, this is a point that needs a bit of explanation. In Old C, as in Standard C, there has never been any restriction on the length of identifiers. The problem is that there was never any guarantee that more than a certain number of characters would be checked when names were compared for equality—in Old C this was eight characters, in Standard C this has changed to 31.
Ah... dat was ik even vergeten.PrisonerOfPain schreef op vrijdag 08 augustus 2014 @ 16:30:
[...]
C heeft geen function overloadingVerder kan het prima zijn dat die functie naam historisch gezien zo klein *moest* zijn. Daar is bijvoorbeeld dit over te vinden:
[...]
Persoonlijk ben ik nooit een omgeving tegengekomen waarin die beperking daadwerkelijk geldt, en ik programmeer al een jaar of 15 in C. Meestal zijn dit soort functies geschreven door figuren die in de jaren '70 hebben leren programmeren en nooit met hun tijd zijn meegegaan.PrisonerOfPain schreef op vrijdag 08 augustus 2014 @ 16:30:
C heeft geen function overloadingVerder kan het prima zijn dat die functie naam historisch gezien zo klein *moest* zijn. Daar is bijvoorbeeld dit over te vinden:
Aangezien de directory die gelinkt wordt in 2001 voor het laatst geüpdatet is, en het universiteitswebsite betreft (academische code wordt altijd eindeloos gecopy/paste) wil ik best geloven dat die code uit een ander tijdperk stamt.
iOS developer
Ik vermoed dat de programmeurs geinspireerd waren door BLAS. Daarin heb je ook namen als axpy.Soultaker schreef op vrijdag 08 augustus 2014 @ 18:24:
Neemt niet weg dat dit gewoon heel slecht is, en je er heden ten dage echt niet meer mee wegkomt om in een functie zonder commentaar zulke obscure identifiers te gebruiken.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
De eerste druk van Numerical Recipes stamt uit '88.Soultaker schreef op vrijdag 08 augustus 2014 @ 18:24:
[...]
Aangezien de directory die gelinkt wordt in 2001 voor het laatst geüpdatet is, en het universiteitswebsite betreft (academische code wordt altijd eindeloos gecopy/paste) wil ik best geloven dat die code uit een ander tijdperk stamt.
Oh dat ben ik helemaal met je eens - en ze hadden 't de 2e of 3e druk wat mij betreft ook wel aan mogen passen. En zeker tegenwoordig zou die functie gewoon sparseMatrixVectorMultiply of iets dergelijks moeten heten. Maar goed, de context van iedere functie is z'n historie.Neemt niet weg dat dit gewoon heel slecht is, en je er heden ten dage echt niet meer mee wegkomt om in een functie zonder commentaar zulke obscure identifiers te gebruiken.
[ Voor 3% gewijzigd door PrisonerOfPain op 08-08-2014 19:08 ]
Van deur tot deur heb ik er 24 uur over gedaan om in North Carolina te geraken :-)Korben schreef op vrijdag 08 augustus 2014 @ 14:05:
[...]
20 uur?! Ben je via Zuid-Afrika gevlogen of zo?
Om 6:45 de trein in Nijmegen naar Schiphol, om 11:00 steeg ie op met vertraging richting JFK. Wind tegen en om 19:00 GMT+1 op JFK. Daar overstap gemist naar Charlotte. Om 23:00 vlucht naar Atlanta. Om 3:00 vlucht naar Charlotte, om 6:00 taxi naar hotel in the middle of nowhere.
Daar was het toen 0:00 lokale tijd, dus tijd zat om even te douchen en daarna nog aan het werk te gaan. In Nederland was de dag alweer begonnen immers ;-)
Vliegen is kut. Maar boot is langzamer.
[ Voor 12% gewijzigd door armageddon_2k1 op 08-08-2014 22:22 ]
Engineering is like Tetris. Succes disappears and errors accumulate.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Vliegen kan best nice zijn als je binnen europa vliegt en goede connecties van/ naar het vliegveld hebt. Geen extra bagage mee neemt, de app van de vliegtuigmaatschappij gebruikt voor je boardingpass, je op tijd op het vliegveld bent (eg. half uur / uur) en je een chille stoel hebt.armageddon_2k1 schreef op vrijdag 08 augustus 2014 @ 22:19:
Vliegen is kut. Maar boot is langzamer.
Brand los
Ik net alles omgebouwd naar getters en setters en ik merkte een lichte vertraging op plekken...
http://developer.android....-tips.html#GettersSetters
Blijkt Android het af te raden om getters en setters te gebruiken
Ik denk dat die lag niet hieraan ligt, though, want zo veel kan dat toch ook weer niet zijn...
[ Voor 17% gewijzigd door F.West98 op 08-08-2014 23:45 ]
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
Dat betekent dat RoR nu net een beetje volwassen is.Gleighton schreef op vrijdag 08 augustus 2014 @ 23:17:
RoR, is dat niet van vroeger. Dacht dat alle webhipsers daarna naar nodeJS verhuisd waren om nu alles weer opnieuw te doen in Go
iOS developer
Is iets anders dan "Avoid getters/setters"Avoid Internal Getters/Setters
En vergeet deze niet
Before you start optimizing, make sure you have a problem that you need to solve. Make sure you can accurately measure your existing performance, or you won't be able to measure the benefit of the alternatives you try.
[ Voor 58% gewijzigd door Creepy op 09-08-2014 00:51 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
En het meten van de performance is niet moeilijk, ik krijg consequent de melding dat hij 33 frames heeft geskipped.
Ik vermoed dat dat aan de hoge hoeveelheid views die ik in één keer aanmaak ligt...
Misschien wat doen aan threading.
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
Misschien dat de impact binnen C(++) niet zo groot is als bij Android, maar ik ben een fervent voorstander van getters en setters. Ook voor interne variabelen.
If money talks then I'm a mime
If time is money then I'm out of time
Beetje dit dus:
1
2
3
4
5
6
7
8
9
10
11
| class Foo { private String someProperty; public String getSomeProperty() { return someProperty; } public void setSomeProperty(String prop) { someProperty = prop; refreshUI(); } /*******/ } |
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
En met nu ben ik niet helemaal thuis in android, maar ik kan mij voorstellen dat je niet voor elke waarde die je veranderd een UI refresh wil doen, dus ik zou er mee oppassen, maar ja dat is inderdaad handig.
Sowieso verstandig zoveel mogelijk van de main thread af te halen in Android. Eigenlijk op elk mobiel platform wel, behalve wellicht iOS, geen ervaring mee, maar vermoed daar ook wel. Gewoon wat AsyncTasks rondstrooien ^^F.West98 schreef op zaterdag 09 augustus 2014 @ 08:44:
[...]
En het meten van de performance is niet moeilijk, ik krijg consequent de melding dat hij 33 frames heeft geskipped.
Ik vermoed dat dat aan de hoge hoeveelheid views die ik in één keer aanmaak ligt...
Misschien wat doen aan threading.
[ Voor 11% gewijzigd door Caelorum op 09-08-2014 09:25 ]
Ik heb nu een builder die 5*7*±10 = ±350 views aanmaakt, en die is nogal traag

Op mobiel is maar 1/5e ervan direct zichtbaar, op tablets wel alles, maar als ik dat even wat omgooi (dus views maken in Async en dan returnen en uiteindelijk ééntje (container) in de UI stoppen. Denk ik iets sneller.
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
Advies: bouw ook een mechanisme in om de refreshes te bufferen / delayen of wat dan ook. Het kan wel echt tot flinke performanceproblemen leiden als je 5 properties wilt updaten en er dus 5 keer de UI gerefresht wordt, terwijl het maar om 1 handeling gaat.F.West98 schreef op zaterdag 09 augustus 2014 @ 09:18:
Java:
1 2 3 4 5 6 class Foo { public void setSomeProperty(String prop) { refreshUI(); } /*******/ }
Never explain with stupidity where malice is a better explanation
Dit hangt natuurlijk ook van de VM af en of het de boel tijdens runtime nog compileert.Gropah schreef op zaterdag 09 augustus 2014 @ 09:19:
Nadeel is dat een VM zorgt voor een grote performance hit, omdat je een machine emuleert en daarbinnen je werk doet. Dat is over het algemeen een stuk trager dan native commands doen.
Of maak gebruik van een framework als Reactive Extensions en modeleer updates als een observable. Vervolgens kun je bijv. de throttle operators gebruiken.incaz schreef op zaterdag 09 augustus 2014 @ 10:02:
[...]
Advies: bouw ook een mechanisme in om de refreshes te bufferen / delayen of wat dan ook. Het kan wel echt tot flinke performanceproblemen leiden als je 5 properties wilt updaten en er dus 5 keer de UI gerefresht wordt, terwijl het maar om 1 handeling gaat.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Het gaat hier om de selectie van de dropdown, en elke keuze moet weer nieuwe info van internet (of uit DB) halen (een knopje is een extra handeling, en dat is niet gewenst). Als er nog géén keuze is gemaakt in de dropdown (de eerste keer dat het wordt getoond) wordt er ook voorkomen dat er iets wordt geladen (om onnodige falende requests te voorkomen).incaz schreef op zaterdag 09 augustus 2014 @ 10:02:
[...]
Advies: bouw ook een mechanisme in om de refreshes te bufferen / delayen of wat dan ook. Het kan wel echt tot flinke performanceproblemen leiden als je 5 properties wilt updaten en er dus 5 keer de UI gerefresht wordt, terwijl het maar om 1 handeling gaat.
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
Misschien interessant om te kijken:F.West98 schreef op zaterdag 09 augustus 2014 @ 10:34:
[...]
Het gaat hier om de selectie van de dropdown, en elke keuze moet weer nieuwe info van internet (of uit DB) halen (een knopje is een extra handeling, en dat is niet gewenst). Als er nog géén keuze is gemaakt in de dropdown (de eerste keer dat het wordt getoond) wordt er ook voorkomen dat er iets wordt geladen (om onnodige falende requests te voorkomen).
(weliswaar in JS, maar Rx is er ook voor .NET en Java)
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Daar gaat het fout.Matis schreef op zaterdag 09 augustus 2014 @ 09:03:
Toch vind ik het soms fijn om ook interne variabelen via getters en setters te benaderen, omdat je dan altijd controle houdt over pre en postcondities en dat sommige wijzigingen in interne variabelen side effect vereisen.
Ik heb getters/setters nooit begrepen tbh, 9/10 keer zijn ze triviaal en de keer dat ze dat niet zijn hebben ze side-effects die je d'r niet wilt hebben. Een van de argumenten die je nog wel eens hoort is "maar je kunt geen variabelen hebben in je interface" oid, maar dat is natuurlijk ook gewoon onzin. Als je dat nodig hebt in een interface heb je je probleem verkeerd gemoddeled. Hou dingen gewoon lekker expliciet, dat is duidelijker voor iedereen.Caelorum schreef op zaterdag 09 augustus 2014 @ 12:20:
Ik denk ook niet dat ik het in een getter/setter zou oplossen, maar dan echt een aparte functie die niet gebonden is aan een variabele voor zou maken die alles regelt.
[ Voor 4% gewijzigd door PrisonerOfPain op 09-08-2014 12:24 ]
Overigens: ik zie werkelijk niet waarom je geen side effects zou moeten hebben binnen je object - da's toch het hele punt van het programmeren met states? Er is niks mee om een setter te hebben die naast de directe property ook een flag 'changed' zet, en het is dan ook volkomen logisch om de interne call via de setter te laten lopen.
Mischien dat een algeheel andere aanpak ook kan, maar binnen OO is er niets mis met die werkwijze. En je kunt de getters en setters ook gewoon private houden als je dat wilt.
Never explain with stupidity where malice is a better explanation
En met lombok (voor java) is het heel handig om ook gewoon @Data op de class te doen die dan direct getters en setters voor alle properties aanmaakt, en losse setters kan je overriden met je eigen implementatie.
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
Ik begrijp dat jij wel een fan bent van het refactoren van de access naar dat soort variabelen? Want er komt op een gegeven moment dat je toch iets meer wil doen dan puur die variabele ophalen of wegschrijven, waarna je dus al die dingen moet gaan zitten omzetten.PrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 12:23:
[...]
Ik heb getters/setters nooit begrepen tbh, 9/10 keer zijn ze triviaal en de keer dat ze dat niet zijn hebben ze side-effects die je d'r niet wilt hebben.
Dat is dan ook in het algemeen niet echt een goed argument maar meer manier om om een beperking van een taal heen te werken.Een van de argumenten die je nog wel eens hoort is "maar je kunt geen variabelen hebben in je interface"
[ Voor 18% gewijzigd door .oisyn op 09-08-2014 13:18 ]
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.
Dan lijkt me dat een Observer toch voor betere koppeling zorgt hoor.F.West98 schreef op zaterdag 09 augustus 2014 @ 09:18:
Java:
1 2 3 4 5 6 class Foo { public void setSomeProperty(String prop) { someProperty = prop; refreshUI(); } }
Meestal wil je eerder een betere ontkoppeling.t-town schreef op zaterdag 09 augustus 2014 @ 13:30:
[...]
Dan lijkt me dat een Observer toch voor betere koppeling zorgt hoor.
Een observer is in .NET eigenlijk wel wat overkill vind ik; dan kan je beter hetzelfde bekomen door met events te werken. (Dan heb je eigenlijk ook een soort van observer pattern, maar geimplementeerd dmv first class citizens van .NET )
https://fgheysels.github.io/
Is MVC een vies woord op Android ofzo?F.West98 schreef op zaterdag 09 augustus 2014 @ 09:18:
Beetje dit dus:
Java:
1 2 3 4 5 6 7 8 9 10 11 class Foo { private String someProperty; public String getSomeProperty() { return someProperty; } public void setSomeProperty(String prop) { someProperty = prop; refreshUI(); } /*******/ }
Ehh, ik dacht dat ObservableCollection in het .NET framework zat sinds 3.0? En die maakt uiteraard onderwater net zo goed gebruik van events, dus waarom je eigen dingen gaan doen als je ook een bestaand iets kan gebruiken, mits het precies doet wat je wilt?whoami schreef op zaterdag 09 augustus 2014 @ 14:24:
[...]
Een observer is in .NET eigenlijk wel wat overkill vind ik; dan kan je beter hetzelfde bekomen door met events te werken. (Dan heb je eigenlijk ook een soort van observer pattern, maar geimplementeerd dmv first class citizens van .NET )
Mja, het is niet zo super makkelijk te gebruiken als MVVM in MS frameworks
[ Voor 32% gewijzigd door Caelorum op 09-08-2014 14:48 ]
Eigenlijk kan je toch overal wel MVVM gebruiken?Caelorum schreef op zaterdag 09 augustus 2014 @ 14:46:
Mja, het is niet zo super makkelijk te gebruiken als MVVM in MS frameworks
Zou mij niks verbazen als MVVM voor Android bestaat (note: ik ben zelf (nog) geen Android programmeur, ben het wel aan het leren, straks maar weer een hoofdstuk doorwerken).
In verhouding tot hoe vaak je die refactoring uberhaupt moet doen valt dat reuze mee; als het om een class gaat die intern aan het systeem is, is het meestal beperkt tot een klein aantal files. Zo niet, bite the bullet. Meestal gaan die setters je dan toch niet helpen (tenzij je caching oid toe wilt voegen, maar dat kun je wmbt ook beter expliciet doen)..oisyn schreef op zaterdag 09 augustus 2014 @ 13:16:
Ik begrijp dat jij wel een fan bent van het refactoren van de access naar dat soort variabelen? Want er komt op een gegeven moment dat je toch iets meer wil doen dan puur die variabele ophalen of wegschrijven, waarna je dus al die dingen moet gaan zitten omzetten.
Als het gaat om een externe interface van een systeem leg het de abstractie meestal op het niveau van de data transformatie en pass ik inderdaad het liefste structs met publics.
Waarop ik zeg dat het abstractie niveau wat je plaatst gewoon op de verkeerde plek ligt..oisyn schreef op zaterdag 09 augustus 2014 @ 13:16:
Dat is dan ook in het algemeen niet echt een goed argument maar meer manier om om een beperking van een taal heen te werken.
[ Voor 15% gewijzigd door PrisonerOfPain op 09-08-2014 14:56 ]
Waarom zou ik een ObservableCollection moeten gebruiken, als ik gewoon 'iets' wil doen als een of andere property wijzigt, zoals in het eerder aangehaalde code-voorbeeld ?Caelorum schreef op zaterdag 09 augustus 2014 @ 14:46:
[...]
Ehh, ik dacht dat ObservableCollection in het .NET framework zat sinds 3.0? En die maakt uiteraard onderwater net zo goed gebruik van events, dus waarom je eigen dingen gaan doen als je ook een bestaand iets kan gebruiken, mits het precies doet wat je wilt?
https://fgheysels.github.io/
1
2
3
4
5
6
7
8
9
10
11
12
13
| class Foo { private String someProperty; public String getSomeProperty() { return someProperty; } public void setSomeProperty(String prop) { if (!someProperty.equals(prop) { refreshUI(); } } /*******/ } |
HMS schreef op zaterdag 09 augustus 2014 @ 14:33:
Is MVC een vies woord op Android ofzo?
[ Voor 14% gewijzigd door alienfruit op 09-08-2014 15:22 ]
Samenvatting filmpje:
1
2
3
4
5
6
| var sodaCan = new CocaColaCan(); sodaCan.replaceContent("cola", "milk"); var actor = new Actor(); var camera = new HighSpeedCamera(); camera.pointAt(actor); actor.consume(sodaCan); |
[ Voor 12% gewijzigd door Gamebuster op 09-08-2014 15:35 ]
Let op: Mijn post bevat meningen, aannames of onwaarheden
Ik ben sowieso een PHP'er, maar op de één of andere manier mis ik heel het 'doel' van deze discussie
Douweegbertje schreef op zaterdag 09 augustus 2014 @ 15:40:
Kan iemand eens een korte samenvatting geven waar het nu om gaat? Ik bedoel, het gaat toch nu gewoon om het feit dat je een class hebt, waarbij je bijvoorbeeld een waarde aan het object wilt mee geven?
Ik ben sowieso een PHP'er, maar op de één of andere manier mis ik heel het 'doel' van deze discussie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| class Foo { public $bar; public $foo; } // versus class Foo { public function setFoo($foo) { $this->foo = $foo; } public function getFoo() { return $this->foo; } public function setBar($bar) { $this->bar = $bar; } public function getBar() { return $this->bar; } private $foo; private $bar; } |
In verschillende situaties, zoals wanneer het inderdeel is van een interface, en/of bepaalde dingen impliciet in de getter/setters gedaan moeten worden of daarbuiten, etc.
Waar ik persoonlijk getters/setters voor gebruik is om bepaalde data te packen - eg. dingen die in hetzelfde bitfield moeten of dingen die tijdelijk gecompressed worden. Maar dan heb ik die liever apart als getter/setter of pack/unpack oid dan dat het onderdeel is van de normale accessors en dus amper opvalt.
Ohja, beetje kort door de bochtwhoami schreef op zaterdag 09 augustus 2014 @ 15:20:
[...]
Waarom zou ik een ObservableCollection moeten gebruiken, als ik gewoon 'iets' wil doen als een of andere property wijzigt, zoals in het eerder aangehaalde code-voorbeeld ?
Het kan en er bestaan ook wat pogingen voor Android, maar juist door zaken als Data Binding werkt het zo enorm fijn in WP7/8 en WPF. De ondersteuning in het framework is eigenlijk zo goed dat elke poging op Android gewoon in het niets valt met "het echte werk".Ryur schreef op zaterdag 09 augustus 2014 @ 14:55:
[...]
Eigenlijk kan je toch overal wel MVVM gebruiken?
Zou mij niks verbazen als MVVM voor Android bestaat (note: ik ben zelf (nog) geen Android programmeur, ben het wel aan het leren, straks maar weer een hoofdstuk doorwerken).
Dus je gebruikt geen properties in .NET? Dat zijn eigenlijk ook getters/settersF.West98 schreef op zaterdag 09 augustus 2014 @ 13:12:
Ik vond getters/setters eerst ook onzin, en op zich gebruik ik het met .NET applications (web) nauwelijks, maar nu ik states moet onthouden e.d. is het heel handig. Nog niet zozeer getters, maar met name setters zijn handig, bijvoorbeeld als je dus een UI change nodig hebt. Dan kan je de variabele wel direct setten en de UI change los aanroepen, maar dan moet je op 20 plekken dingen aanpassen als die UI change verandert. Dan is het handiger om dat in een setter te hebben.
En met lombok (voor java) is het heel handig om ook gewoon @Data op de class te doen die dan direct getters en setters voor alle properties aanmaakt, en losse setters kan je overriden met je eigen implementatie.
Nothing to see here!
Maak de setters dan ook fluent door ze $this te laten returnenPrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 16:00:
[...]
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Foo { public $bar; public $foo; } // versus class Foo { public function setFoo($foo) { $this->foo = $foo; } public function getFoo() { return $this->foo; } public function setBar($bar) { $this->bar = $bar; } public function getBar() { return $this->bar; } private $foo; private $bar; }
In verschillende situaties, zoals wanneer het inderdeel is van een interface, en/of bepaalde dingen impliciet in de getter/setters gedaan moeten worden of daarbuiten, etc.
Waar ik persoonlijk getters/setters voor gebruik is om bepaalde data te packen - eg. dingen die in hetzelfde bitfield moeten of dingen die tijdelijk gecompressed worden. Maar dan heb ik die liever apart als getter/setter of pack/unpack oid dan dat het onderdeel is van de normale accessors en dus amper opvalt.
Ok, ja ik gebruik het niet anders om het private te houden, en middels get/set te beheren. Daarbij zijn mijn classes meestal zo dat ik vaak geen gets hoef te gebruiken. Eigenlijk gebruik ik meer de sets om waardes door te geven om vervolgens een fatsoenlijk object uiteindelijk terug te krijgen.PrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 16:00:
[...]
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Foo { public $bar; public $foo; } // versus class Foo { public function setFoo($foo) { $this->foo = $foo; } public function getFoo() { return $this->foo; } public function setBar($bar) { $this->bar = $bar; } public function getBar() { return $this->bar; } private $foo; private $bar; }
In verschillende situaties, zoals wanneer het inderdeel is van een interface, en/of bepaalde dingen impliciet in de getter/setters gedaan moeten worden of daarbuiten, etc.
Waar ik persoonlijk getters/setters voor gebruik is om bepaalde data te packen - eg. dingen die in hetzelfde bitfield moeten of dingen die tijdelijk gecompressed worden. Maar dan heb ik die liever apart als getter/setter of pack/unpack oid dan dat het onderdeel is van de normale accessors en dus amper opvalt.
Naar mijn mening; als het allemaal public is, wordt het een zootje.. en dat is dan vooral met PHP...
Meestal is het iets als het volgende, en daarbij ook gelijk mijn probleem vaak;
1
2
3
4
| $berekening = new DataRequest(); $berekening->setKantoor('id'); $berekening->setBepaaldeWaarde('blaat'); $berekening->Query(); |
Toevallig bij deze class los ik errors e.d. op in de class zelf, dus kan ik in de code nog een check doen of het true/false is, maar meestal laat ik het doorlopen en handel ik per 'functie' af of alles aanwezig is om de functie te doen.
Ik heb hier nooit echt een lekkere manier voor gevonden, maar het volgende vind ik namelijk best ruk:
1
2
3
4
5
6
| if(!$brekening->setKantoor('id') { //error } if(.... .... |
Dus wordt het meestal iets als dit;
1
2
3
4
5
6
7
8
9
| $berekening = new DataRequest(); $berekening->setKantoor('id'); $berekening->setBepaaldeWaarde('blaat'); $berekening->Query(); $errors = $berekening->getErrors(); if($errors) { //error log |
Misschien gelijk wel weer totaal offtopic om hier over te 'ranten', maar je moet eigenlijk of; alles doorlopen om vervolgens aan het einde de exceptions te laten zien, of voor elke call een check doen. Nu vang ik dat dan af door bij elke functie te kijken of er een exceptie is en/of de verplichte waardes aanwezig zijn om de functie uit te voeren.. maar het zou makkelijk moeten zijn
dit kan dus eigenlijk niet
1
2
3
| if($error = $blaat->getError()) { // handle error met $error |
Dus dan moet je eigenlijk eerst een check doen, en dan pas een get. Terwijl het ideaal zou zijn om een call te doen en bij !false direct te return in een var te hebben..
[ Voor 5% gewijzigd door Douweegbertje op 09-08-2014 16:39 ]
1
2
3
4
5
6
7
8
| try { $berekening = new DataRequest(); $berekening->setKantoor('id'); $berekening->setBepaaldeWaarde('blaat'); $berekening->Query(); } catch (KantoorException $e) { ... } catch (BepaaldeWaardeException $e) { ... } catch (QueryException $e} { ... } |
En elke setter throwt dus z'n eigen exception?
Als is alles ineens afhandelen zoals je nu doet ook wel mooi, want dan kun je het ineens aan de user tonen. Maar als het om een webapplicatie gaat kun je dan ook client-side al doen.
Zoiets:Douweegbertje schreef op zaterdag 09 augustus 2014 @ 16:36:
dit kan dus eigenlijk niet
PHP:
1 2 3 if($error = $blaat->getError()) { // handle error met $error
Dus dan moet je eigenlijk eerst een check doen, en dan pas een get. Terwijl het ideaal zou zijn om een call te doen en bij !false direct te return in een var te hebben..
1
2
3
| if ( ($error = $blaat->getError()) && $error !== false) { echo $error; } |
[ Voor 32% gewijzigd door HuHu op 09-08-2014 16:45 ]
Maar mijn 'probleem' was meer dat je dus ook echt een exepction moet gebruiken terwijl je dat vrij simpel anders kon doen door te zien of er iets wordt gereturned.
Stel ik wil bepaalde data hebben dan zou je dat dan zo moeten doen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| $blaat = getData(); if(!$blaat) { // niet gelukt dus /***********************/ //simpeler if(!$blaat = getData()) { // error } else { // blaat is aanwezig |
maar laatste voorbeeld gaat dus niet..
Zijn andere manieren, maar wat ik nu even neerzet is één simpele lijn code, die imo iedereen wel snapt.
Wtf? Wat is er mis met een validate() method die aangeeft wat er mis is. Exceptions in setters, het moet niet gekker worden.HuHu schreef op zaterdag 09 augustus 2014 @ 16:41:
En elke setter throwt dus z'n eigen exception?
Heb je gelijk in. Het zou waarschijnlijk beter zijn om het Wikipedia: Builder pattern te gebruiken.PrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 16:56:
[...]
Wtf? Wat is er mis met een validate() method die aangeeft wat er mis is. Exceptions in setters, het moet niet gekker worden.
Dat laatste voorbeeld kun je toch gewoon omdraaien:Douweegbertje schreef op zaterdag 09 augustus 2014 @ 16:53:
hm ja dat moet ik dan maar eens proberen maar ik weet nog niet precies of ik het goed ga krijgen. Het probleem is dat we dikke berekeningen doen en de code nogal legacy is![]()
Maar mijn 'probleem' was meer dat je dus ook echt een exepction moet gebruiken terwijl je dat vrij simpel anders kon doen door te zien of er iets wordt gereturned.
Stel ik wil bepaalde data hebben dan zou je dat dan zo moeten doen.
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $blaat = getData(); if(!$blaat) { // niet gelukt dus /***********************/ //simpeler if(!$blaat = getData()) { // error } else { // blaat is aanwezig
maar laatste voorbeeld gaat dus niet..
Zijn andere manieren, maar wat ik nu even neerzet is één simpele lijn code, die imo iedereen wel snapt.
1
2
3
4
5
| if ( ($blaat = getData()) && $blaat) { // $blaat is aanwezig } else { // error } |
[ Voor 55% gewijzigd door HuHu op 09-08-2014 17:09 ]
Met welke programmeertaal ben jij eigenlijk begonnen? Je kan daar vaak best veel uit halen over hoe iemand nu programmeert. Blijkbaar zijn bepaalde zaken/ideeen best moeilijk af te lerenPrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 16:56:
[...]
Wtf? Wat is er mis met een validate() method die aangeeft wat er mis is. Exceptions in setters, het moet niet gekker worden.
VBA -> PHP -> C++Caelorum schreef op zaterdag 09 augustus 2014 @ 17:29:
[...]
Met welke programmeertaal ben jij eigenlijk begonnen? Je kan daar vaak best veel uit halen over hoe iemand nu programmeert. Blijkbaar zijn bepaalde zaken/ideeen best moeilijk af te leren
VBA is zo kort geweest dat 't niet zo veel invloed heeft gehad, 7 jaar PHP & 8 jaar C++ wel
De aanpak heeft een aantal problemen, zo kun je met de try/catch combo zoals 'ie gepost is maar een error tegelijk afvangen dus je zou het al anders op moeten schrijven (eg, iedere setter in z'n eigen try/catch blok) en je het nu de validatie over je hele class uitgesmeerd ipv dat het netjes op een plek staat. Sterker nog, zelfs de error handling staat overal over uitgesmeerd / word overal herhaalt.
Dit is toch verre van leesbaar?
1
2
3
4
5
6
7
8
9
10
11
12
13
| $berekening = new DataRequest(); try { $berekening->setKantoor('id'); } catch (KantoorException $e) { appendUserError($e); } try { $berekening->setBepaaldeWaarde('blaat'); } catch (BepaaldeWaardeException $e) { appendUserError($e); } try { $berekening->Query(); } catch (QueryException $e} { abortLogicError($e); } |
In plaats van
1
2
3
4
5
6
7
8
9
10
11
12
| $berekening = new DataRequest(); $berekening->kantoor = 'id'; $berekening->bepaaldeWaarde = 'blaat'; $errors = null; if(!$berekening->validate(&$errors)) { appendLogicErrors($errors); } else { try { // deze moet waarschijnlijk blijven $berekening->query(); } catch(QueryException $e) { printLogicError($e); } } |
Of je hebt op voorhand gewoon getters en setters gemaakt en is het vervolgens appeltje-eitje om de boel aan te passen. Het is maar hoeveel manuren je wilt wasten...PrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 14:55:
[...]
In verhouding tot hoe vaak je die refactoring uberhaupt moet doen valt dat reuze mee; als het om een class gaat die intern aan het systeem is, is het meestal beperkt tot een klein aantal files. Zo niet, bite the bullet.
Niet alleen onleesbaar, ook nog eens fout, want na de fout ga je vrolijk door met de rest van de code. Het feit dat elke functie kan gooien impliceert niet dat je na elke functieaanroep ook daadwerkelijk moet catchen.PrisonerOfPain schreef op zaterdag 09 augustus 2014 @ 18:07:
Dit is toch verre van leesbaar?
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 $berekening = new DataRequest(); try { $berekening->setKantoor('id'); } catch (KantoorException $e) { appendUserError($e); } try { $berekening->setBepaaldeWaarde('blaat'); } catch (BepaaldeWaardeException $e) { appendUserError($e); } try { $berekening->Query(); } catch (QueryException $e} { abortLogicError($e); }
1
2
3
4
5
6
7
8
| try { $berekening = new DataRequest(); $berekening->setKantoor('id'); $berekening->setBepaaldeWaarde('blaat'); $berekening->Query(); } catch (UserException $e) { appendUserError($e); } catch (QueryException $e} { abortLogicError($e); } |
(Overigens geen idee of je in PHP meerdere catch clauses kan hebben, maar daar is ook wel omheen te werken)
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.
Daarnaast wat hierboven al is aangegeven. "refreshUI" in een data layer gaan mij de nekharen van overeind staan. Als je dan 10 properties in bulk veranderd zou je 10 keer het scherm refreshen, ook niet echt handig. Alleen de UI laag bepaalt wanneer de UI gerefreshed wordt, en kan daarbij evt. ondersteuning krijgen uit change events/observers die vanuit de data layer getriggerd worden. Waarbij er evt. vanuit de UI zelf de mogelijkheid is om het refreshen uit te schakelen en daarna weer in te schakelen waarbij de nodige elementen worden bijgewerkt. In .NET WinForms zit dat gedeeltelijk in de vorm van Control.SuspendLayout en Control.ResumeLayout. Waarmee je bulk acties op Size/Location/Anchor/Dock kunt uitvoeren zonder dat er elke keer een redraw en recalculate van dingen plaatsvind.
Het is maar net waar je je tijd in wilt stoppen, vooraf met 't aanleggen van al die getters en setters, of achteraf als het daadwerkelijk nodig was..oisyn schreef op zaterdag 09 augustus 2014 @ 18:25:
[...]
Of je hebt op voorhand gewoon getters en setters gemaakt en is het vervolgens appeltje-eitje om de boel aan te passen. Het is maar hoeveel manuren je wilt wasten...
Wel als je meer dan een error per keer af wilt handelen - eg. het opbouwen van een lijst van errors van dingen die een user verkeerd heeft ingevoerd. Met jou / de originele oplossing kun je maar een error weergeven per keer. Ook niet echt handigNiet alleen onleesbaar, ook nog eens fout, want na de fout ga je vrolijk door met de rest van de code. Het feit dat elke functie kan gooien impliceert niet dat je na elke functieaanroep ook daadwerkelijk moet catchen.
Dit topic is gesloten.
Dit topic is niet de plaats om te lopen helpdesken. De Coffee Corner is primair bedoeld als uitlaatklep voor iedereen in de Devschuur® en niet als vraagbaak.