We are shaping the future
Omdat je dan de abstractie direct vanuit je datamodel kan maken. Dus je hebt een genormaliseerde database volgens bepaalde functionele specs neergezet. Stel dat dat een insert-only historisch database model is. Meestal werk je in je applicatie op het nu. De historie is heel vaak niet nodig. Dan kan je in je applicatie SQL implementeren die het nu selecteert, maar je kan ook views maken die standaard een representatie geven van nu. Diezelfde views kan je ook weer gebruiken om data toe te voegen aan je historie (middels triggers) volgens de verwerking die je als database architect / manager verkiest.Hydra schreef op dinsdag 18 juni 2019 @ 16:19:
[...]
Waarom views (dat zijn ook maar gewoon queries) bouwen in je database als je diezelfde queries gewoon vanuit je code kan doen?
Voordeel van een ORM is dat je je zo min mogelijk hoeft druk te maken over het onderliggende model. Zolang je mapping maar klopt. Door de abstractie naar de database te verplaatsen behoud je dat voordeel bij complexere queries, zodat voor het perspectief van je ORM simpele CRUD actie overblijven.
[ Voor 15% gewijzigd door CurlyMo op 18-06-2019 16:38 ]
Sinds de 2 dagen regel reageer ik hier niet meer
Hangt af of je verantwoordelijk bent voor externe bugs.Hydra schreef op dinsdag 18 juni 2019 @ 15:49:
[...]
De eiken buiten 't gebouw hier zitten vol met eikenprocessierups-clusters. Telt dat ook?
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
DevWouter schreef op dinsdag 18 juni 2019 @ 10:33:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
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!
Firesphere schreef op woensdag 19 juni 2019 @ 07:14:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel
Mijn eerste reactie: "Hey, die heeft precies dezelfde naam als de zanger van Iron Maiden.". Check ik vervolgens de website...Marcj schreef op woensdag 19 juni 2019 @ 07:49:
Ik loop vandaag en morgen nog rond bij de GOTO Amsterdam conferentie. Zijn er nog meer tweakers die daar rond lopen? Gisteren begon het met Bruce Dickinson als keynote speaker, dat was informatiever dan ik verwacht had.

Ik ben zeker niet tegen het maken van views (doe het zelf ook meestal; ook een vorm van documentatie) maar dan voegt een ORM weinig meer toe. Je kunt dan een ORM vaak niet eens zelf meer SQL laten bouwen dus je moet de queries op de views vaak al hard-coden. Dan gebruik je de ORM alleen nog maar als row-mapper. En dan gebruik ik liever gewoon een row-mapper.CurlyMo schreef op dinsdag 18 juni 2019 @ 16:28:
Voordeel van een ORM is dat je je zo min mogelijk hoeft druk te maken over het onderliggende model. Zolang je mapping maar klopt. Door de abstractie naar de database te verplaatsen behoud je dat voordeel bij complexere queries, zodat voor het perspectief van je ORM simpele CRUD actie overblijven.
Helaas niet. Ik vergeet 'em iedere keer, terwijl 't wel een goeie conferentie is. Laatste keer dat ik er was, was 5 jaar geleden.Marcj schreef op woensdag 19 juni 2019 @ 07:49:
Ik loop vandaag en morgen nog rond bij de GOTO Amsterdam conferentie. Zijn er nog meer tweakers die daar rond lopen? Gisteren begon het met Bruce Dickinson als keynote speaker, dat was informatiever dan ik verwacht had.
[ Voor 24% gewijzigd door Hydra op 19-06-2019 09:27 ]
https://niels.nu
Zijn we het op dat punt via een omweg toch eensHydra schreef op woensdag 19 juni 2019 @ 09:26:
[...]
Dan gebruik je de ORM alleen nog maar als row-mapper. En dan gebruik ik liever gewoon een row-mapper.
Sinds de 2 dagen regel reageer ik hier niet meer
Ik gebruik nu Spring Data (JPA/Hibernate) voor queries en die doet dus alles voor mij qua mapping e.d. Welke Rowmapper raad jij aan? Want ik merk dat de rowmapper van Spring gewoon neerkomt op "Map zelf de zaken uit de resultset" terwijl ik nu alles via annotations laat mappen (en dat graag zo houd).Hydra schreef op woensdag 19 juni 2019 @ 09:26:
[...]
Ik ben zeker niet tegen het maken van views (doe het zelf ook meestal; ook een vorm van documentatie) maar dan voegt een ORM weinig meer toe. Je kunt dan een ORM vaak niet eens zelf meer SQL laten bouwen dus je moet de queries op de views vaak al hard-coden. Dan gebruik je de ORM alleen nog maar als row-mapper. En dan gebruik ik liever gewoon een row-mapper.
Anders kan ik net zo goed heel Spring JDBC negeren en gewoon zelf queries bouwen met preparedstatements en de resultset zelf afhandelen
Edit: Ah ik zie al dat BeanPropertyRowMapper het zelf kan op basis van kolomnamen in de tabel en variabelenamen in je model. Hm. Kwestie van verschil tussen tabelnaam en variabelenaam oplossen met aliassen. Okido.
[ Voor 9% gewijzigd door Merethil op 19-06-2019 09:52 ]
Graag gedaanMerethil schreef op woensdag 19 juni 2019 @ 09:48:
Edit: Ah ik zie al dat BeanPropertyRowMapper het zelf kan op basis van kolomnamen in de tabel en variabelenamen in je model. Hm. Kwestie van verschil tussen tabelnaam en variabelenaam oplossen met aliassen. Okido.
(Ja die dus)
https://niels.nu
Sinds de 2 dagen regel reageer ik hier niet meer
@.oisyn zit in de C++ hoek toch? Misschien hij.CurlyMo schreef op woensdag 19 juni 2019 @ 10:08:
Verder geen C specialisten hier die meer kunnen vertellen over Transactional Memory en de implementatie ervan?
https://niels.nu
Nope maar zag er toch wel leuk uit. Ik ben wel op de devops day volgende week: https://devopsdays.org/Marcj schreef op woensdag 19 juni 2019 @ 07:49:
Ik loop vandaag en morgen nog rond bij de GOTO Amsterdam conferentie. Zijn er nog meer tweakers die daar rond lopen? Gisteren begon het met Bruce Dickinson als keynote speaker, dat was informatiever dan ik verwacht had.
Ik heb weleens een STM library in C++ gemaakt om mee te experimenteren, maar nooit iets gedaan met compiler danwel hardware support.CurlyMo schreef op woensdag 19 juni 2019 @ 10:08:
Verder geen C specialisten hier die meer kunnen vertellen over Transactional Memory en de implementatie ervan?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik ben er nooit mee bezig geweest, maar zonder hardware support (want snelheid) lijkt het me niet veel toevoegen tov een lock/unlock constructie eigenlijk.CurlyMo schreef op woensdag 19 juni 2019 @ 10:08:
Verder geen C specialisten hier die meer kunnen vertellen over Transactional Memory en de implementatie ervan?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Mits de aanname klopt van wat ik eerder heb gelezen. Dat zo'n constructie slimmer is aangezien het niet een heel code blok blokkeert, maar alleen dat deel dat mogelijk conflicten oplevert. Zoals het voorbeeld van het invoegen of verwijderen bij een linked list.farlane schreef op woensdag 19 juni 2019 @ 11:50:
[...]
Ik ben er nooit mee bezig geweest, maar zonder hardware support (want snelheid) lijkt het me niet veel toevoegen tov een lock/unlock constructie eigenlijk.
Sinds de 2 dagen regel reageer ik hier niet meer
Het hangt heel erg van de situatie af. Transactional operaties zijn veel finer grained dan locks, dus er zijn zeker cases waar transactions geen contention hebben, terwijl een lock dat typisch wel heeft. Heb je daarentegen gewoon erg veel contention op dezelfde data, dan wint het idd niet van locks. Bovendien heb je geen last van de nadelen van locks, zoals deadlocks.farlane schreef op woensdag 19 juni 2019 @ 11:50:
[...]
Ik ben er nooit mee bezig geweest, maar zonder hardware support (want snelheid) lijkt het me niet veel toevoegen tov een lock/unlock constructie eigenlijk.
[ Voor 5% gewijzigd door .oisyn op 19-06-2019 12:47 ]
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.
De beste man is naast zanger best wel een bezig bijtje. Meerdere bedrijven, pragmatisch en gedreven in bijna alles wat hij doet. En ook best wel een tikkie egocentrisch, maar dat moet je denk ik ook wel zijn om zo ver te komen in het leven.Marcj schreef op woensdag 19 juni 2019 @ 07:49:
Ik loop vandaag en morgen nog rond bij de GOTO Amsterdam conferentie. Zijn er nog meer tweakers die daar rond lopen? Gisteren begon het met Bruce Dickinson als keynote speaker, dat was informatiever dan ik verwacht had.
Enige waar hij juist op papier het minste over te zeggen heeft is de band, want daar zwaait Steve Harris de scepter over.
Driving a cadillac in a fool's parade.
Okay, daar kan ik inkomen. Ik vraag me wel af hoeveel complexiteit (ik denk aan caches bijvoorbeeld) en resources (in feite het je een kopie van alle data in elke transactie nodig) het toevoegt/nodig heeft om lekker te functioneren....oisyn schreef op woensdag 19 juni 2019 @ 12:45:
[...]
Het hangt heel erg van de situatie af. Transactional operaties zijn veel finer grained dan locks, dus er zijn zeker cases waar transactions geen contention hebben, terwijl een lock dat typisch wel heeft. Heb je daarentegen gewoon erg veel contention op dezelfde data, dan wint het idd niet van locks. Bovendien heb je geen last van de nadelen van locks, zoals deadlocks.
Zijn er ueberhaupt werkende implementaties (hardware danwel software) die gebruikt worden?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Pseudo code:
1
2
3
4
5
| array[1][1][1] = 1 array[1][1][2] = 2; array[1][1][3] = 3; array[1][2] = 2; delete array[1][1]; |
In dit geval wordt de hele geneste structuur array[1][1] verwijderd. In een single threaded applicatie werkt dat prima.
Nu heb ik alleen de situatie dat meerdere threads dezelfde array proberen te bewerken. Stel nu dat meerdere threads exact het stukje pseudo code van hierboven proberen uit te voeren. Er komt een moment dat zodra thread 1 de delete uitvoer thread 2 probeert array[1][1][2] op 2 te zetten. Op een of andere manier moet thread 2 wachten totdat de delete klaar is of thread 1 weten dat dat stukje in de array toch nog in gebruik is.
Hoe implementeer je nu zoiets robuust? Ik zit de hele avond te stoeien, maar kom er niet goed uit.
TDLR: Hoe bouw je een atomic hash table?
Sinds de 2 dagen regel reageer ik hier niet meer
"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
Het probleem van STM is dat er veel problemen zijn. Hoe ga je om met een rollback? Je zou dan geen functies kunnen aanroepen in het TM block, of je moet met annotaties gaan werken. I/O kan sowieso niet teruggedraaid worden, dus die kun je dan ook niet gebruiken in TM. Hoe weet de compiler dat?farlane schreef op woensdag 19 juni 2019 @ 21:18:
[...]
Okay, daar kan ik inkomen. Ik vraag me wel af hoeveel complexiteit (ik denk aan caches bijvoorbeeld) en resources (in feite het je een kopie van alle data in elke transactie nodig) het toevoegt/nodig heeft om lekker te functioneren...
Zijn er ueberhaupt werkende implementaties (hardware danwel software) die gebruikt worden?
En het belangrijkste waarom het niet in de meeste compilers zit: C++ is een zero-overhead language. Als je met de hand een betere (presterende) code kunt schrijven dat wat het STM blok doet, is het een nutteloze abstractie. Waarom zit het er dan in als language feature? En zoals Herb dat zegt: Dan is het geen C++, maar Java.
STM is leuk voor MCAS datastructuren, en geen zeker vervanging voor alle locks.
Dit zijn deels de redenen waarom Clang geen TM heeft. Je kunt wel de GNU implementatie aanzetten in Clang, maar die is gebrekkig. De third-party libraries die er zijn lossen bovengenoemde problemen ook niet op.
* RobIII wijst naar de topicwarning. Open even een topic per onze Quickstart
[ Voor 85% gewijzigd door RobIII op 20-06-2019 15:09 ]
MichielPH schreef op maandag 24 juni 2019 @ 15:10:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Mugwump schreef op maandag 24 juni 2019 @ 15:40:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
Mugwump schreef op maandag 24 juni 2019 @ 15:40:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
MichielPH schreef op maandag 24 juni 2019 @ 15:47:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
.edit: lol. clear:both for the lose

[ Voor 14% gewijzigd door .oisyn op 24-06-2019 16:30 ]
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.
.oisyn schreef op maandag 24 juni 2019 @ 16:17:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
.edit: lol. clear:both for the lose
MichielPH schreef op maandag 24 juni 2019 @ 17:11:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
MichielPH schreef op maandag 24 juni 2019 @ 15:10:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
Wie geeft er nou floats door als de vraag over het restgetal van een deling van ints gaat. Wel precies zij he ;-)
[ Voor 17% gewijzigd door armageddon_2k1 op 24-06-2019 21:01 ]
Engineering is like Tetris. Succes disappears and errors accumulate.
MichielPH schreef op maandag 24 juni 2019 @ 15:10:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
Douweegbertje schreef op maandag 24 juni 2019 @ 20:45:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
Neh dat laatste is overduidelijk een gevalletje van een premature optimalisatieMichielPH schreef op maandag 24 juni 2019 @ 21:21:
[...]
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
(bij de grote code-klop-clubs, moet je neem ik toch aan, wel wat optimalisaties achter de hand houden om nog lekker lang wat billable hours er tegen aan te kunnen gooien.)
Andersom wil jij misschien ook niet dat de opdrachten letterlijk op internet komen (anders zou je deze hopelijk ook beter verwoord hebben). Dus de antwoorden dan ook maar niet.
Ja, het zou een bron van al dan niet bijzondere/originele/gekke/slechte codevoorbeelden kunnen zijn maar eigenlijk kan je er niets mee. Helaas pindakaas, laat ‘t maar lekker iets tussen jou en een sollicitant.
[ Voor 3% gewijzigd door Voutloos op 24-06-2019 23:04 ]
{signature}
Als het een fixed price-project is? Vergeet het maar. Bij Fixed Price betaalt de klant niet meer dan wat is afgesproken.gekkie schreef op maandag 24 juni 2019 @ 22:32:
[...]
(bij de grote code-klop-clubs, moet je neem ik toch aan, wel wat optimalisaties achter de hand houden om nog lekker lang wat billable hours er tegen aan te kunnen gooien.)
Als je meer nodig hebt moet je met hangende pootjes naar de klant, en hopen dat je een goed verhaal hebt (bijvoorbeeld: significant meerwerk door een onverwachte API-wijziging). Maar het kan ook zijn dat de klant zegt "Nee, dit is het en ik verwacht dat je levert conform afspraak."
Bij Time and Material (T&M) wordt er inderdaad gewerkt met billable hours, maar dat is geen vrijbrief om maar wat aan te prutsen. Een klant wil -in de regel- verantwoording zien voor de gemaakte uren en zal niet zomaar blijven betalen. Als je een beetje pech hebt schakelen ze een derde partij in om het geleverde werk te reviewen. Als die dan een rapport oplevert waarin staat dat er slordig werk is opgeleverd, slaat de klant je daarmee om je oren. Voor jou 3 anderen hoor
Dat wil niet zeggen dat elke onhandigheid of slordigheid je meteen problemen kan opleveren. Als er een nette oplossing wordt opgeleverd, maar er zitten een paar regels code in zoals hierboven getoond, dan is dat te vergeven. Als het project echter al 3 maanden achterloopt op schema en uit een review blijkt dat het lasagne-met-gehaktballencode is dan kun je een moeilijk gesprek verwachten.
[ Voor 14% gewijzigd door Alex) op 24-06-2019 23:18 ]
We are shaping the future
yeah yeah, niet alles is een overheidsproject dat is waar ... maar dat is meer curry-in-a-hurry dan italiaansekeuken bij mijn wetenAlex) schreef op maandag 24 juni 2019 @ 23:15:
[...]
Als het een fixed price-project is? Vergeet het maar. Bij Fixed Price betaalt de klant niet meer dan wat is afgesproken.
Als je meer nodig hebt moet je met hangende pootjes naar de klant, en hopen dat je een goed verhaal hebt (bijvoorbeeld: significant meerwerk door een onverwachte API-wijziging). Maar het kan ook zijn dat de klant zegt "Nee, dit is het en ik verwacht dat je levert conform afspraak."
Bij Time and Material (T&M) wordt er inderdaad gewerkt met billable hours, maar dat is geen vrijbrief om maar wat aan te prutsen. Een klant wil -in de regel- verantwoording zien voor de gemaakte uren en zal niet zomaar blijven betalen. Als je een beetje pech hebt schakelen ze een derde partij in om het geleverde werk te reviewen. Als die dan een rapport oplevert waarin staat dat er slordig werk is opgeleverd, slaat de klant je daarmee om je oren. Voor jou 3 anderen hoor
Dat wil niet zeggen dat elke onhandigheid of slordigheid je meteen problemen kan opleveren. Als er een nette oplossing wordt opgeleverd, maar er zitten een paar regels code in zoals hierboven getoond, dan is dat te vergeven. Als het project echter al 3 maanden achterloopt op schema en uit een review blijkt dat het lasagne-met-gehaktballencode is dan kun je een moeilijk gesprek verwachten.
Ik ben ook geen fan van sollicitanten afrekenen op één zo'n opdrachtje. Zenuwen of een kleine blackout kunnen er toe leiden dat iemand het gewoon even niet ziet. Laat bij dit soort opdrachtjes in ieder geval de sollicitant uitleg geven bij wat hij of zij heeft proberen te doen. Waarom maakt de kandidaat bepaalde keuzes en wat zijn de overwogen opties?Voutloos schreef op maandag 24 juni 2019 @ 23:03:
Met extra duiding wordt het verhaal niet echt beter. Goh, summen met minder boilerplate (subjectief) en kennis van de modulo operatie, whoopie.
Andersom wil jij misschien ook niet dat de opdrachten letterlijk op internet komen (anders zou je deze hopelijk ook beter verwoord hebben). Dus de antwoorden dan ook maar niet.
Ja, het zou een bron van al dan niet bijzondere/originele/gekke/slechte codevoorbeelden kunnen zijn maar eigenlijk kan je er niets mee. Helaas pindakaas, laat ‘t maar lekker iets tussen jou en een sollicitant.
Ik doe regelmatig code reviews bij collega's waar ik vreemde dingen zie en dan vind ik het ergste nog dat de vraag waarom een bepaalde implementatie is gekozen en welke afwegingen er gemaakt zijn wordt beantwoord met "oh dat heb ik uit een ander project geknipt en geplakt'.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Soort van openboek tentamen dus, in mijn ogen over het algemeen de betere tentamens.
Als je in dit geval nog nooit wat met de remainder hebt gedaan (ok kans is in dit geval niet heel groot, meestal ben je wel eens een situatie tegen gekomen om iets evens en onevens aan te geven maar goed), kan ik me voorstellen dat je het wel snel in documentatie gevonden zou kunnen hebben.
En dat laatste zou je ook als kwaliteit kunnen beschouwen.
Een string-operatie gebruiken om een rekenkundige bewerking uit te voeren vind ik anders best een relevante factor om mee te nemen bij de beoordeling.Voutloos schreef op maandag 24 juni 2019 @ 23:03:
Met extra duiding wordt het verhaal niet echt beter. Goh, summen met minder boilerplate (subjectief) en kennis van de modulo operatie, whoopie.
Ik ben zelf eigenlijk nooit formeel op sollicitatie geweest voor een developerpositie. Via een vriend heb ik we een voorbeeld gekregen van vragen die zij stellen bij een sollicitatie:
Je hebt een kubus van 10 bij 10 bij 10 steentjes van 1 bij 1 bij 1cm. Hoeveel steentjes zitten er aan de buitenkant? Neem ons door je denkproces, leg alles uit en hier heb je een pak papier
Het gaat dus niet echt om programmeren maar meer om je denkproces. Je ziet hier wel verschil in, hoe mensen het aanpakken en hoe ze met hints omgaan. Maar dit is echt iets heel basaals en is vaak binnen 10 minuten wel volledig doorsproken.
Een praktische opdracht die past bij de functie.Gropah schreef op dinsdag 25 juni 2019 @ 11:36:
Ben wel benieuwd jullie dan wel als goede sollicitatie (opdracht) beschouwen voor een progarmmeerpositie.
Een web developer zou ik een simpele web api laten bouwen, een frontend ervoor bouwen, database modelleren etc.
Dan zie je wat iemand voor werkervaring meeneemt als je kijkt naar wat hij of zij zelf erbij betrekt (qua security, performance, schaalbaarheid, testbaarheid etc).
Een opdracht over een kubus is leuk (ik begin al te puzzelen
PS
Er zit een wetmatigheid in het aantal steentjes.
2 vlakken zijn volledig, 10x10
2 vlakken missen de randen, 8x10
2 vlakken missen de randen rondom, 8x8
Dus 2 x (100 + 80 + 64) = 488 steentjes.
Een eenvoudiger alternatief is substractie. 10^3 - 8^3 = 1000 - 512 = 488.
[ Voor 19% gewijzigd door Lethalis op 25-06-2019 12:01 ]
Ask yourself if you are happy and then you cease to be.
Dan moet je iemand al een basis geven, want anders gaat dat niet lukken. Of het gaat te veel tijd kosten. Misschien heeft die persoon geen ervaring met de desbetreffende framework en libraries, waardoor het weer lastiger wordt.Lethalis schreef op dinsdag 25 juni 2019 @ 11:53:
[...]
Een praktische opdracht die past bij de functie.
Een web developer zou ik een simpele web api laten bouwen, een frontend ervoor bouwen, database modelleren etc.
Dan zie je wat iemand voor werkervaring meeneemt als je kijkt naar wat hij of zij zelf erbij betrekt (qua security, performance, schaalbaarheid, testbaarheid etc).
Een opdracht over een kubus is leuk (ik begin al te puzzelen), maar zegt zo weinig over iemand zijn toepasbare kennis.
Wij vragen altijd of ze zelf iets kunnen laten zien voor zover mogelijk, en dan stellen we daar een paar vragen over. Bijvoorbeeld waarom ze bepaalde keuzes hebben gemaakt, dan pik je de bullshitters er vaak snel uit.
Dat werkt ook natuurlijk.ThomasG schreef op dinsdag 25 juni 2019 @ 11:59:
[...]
Wij vragen altijd of ze zelf iets kunnen laten zien voor zover mogelijk, en dan stellen we daar een paar vragen over. Bijvoorbeeld waarom ze bepaalde keuzes hebben gemaakt, dan pik je de bullshitters er vaak snel uit.
Ask yourself if you are happy and then you cease to be.
Eens kijken:Gropah schreef op dinsdag 25 juni 2019 @ 11:36:
Ben wel benieuwd jullie dan wel als goede sollicitatie (opdracht) beschouwen voor een progarmmeerpositie. Ik zit niet vaak in de positie om zo'n gesprek af te nemen, maar merk wel dat ik het moeilijk vind om wat goeds te vinden.
Ik ben zelf eigenlijk nooit formeel op sollicitatie geweest voor een developerpositie. Via een vriend heb ik we een voorbeeld gekregen van vragen die zij stellen bij een sollicitatie:
Je hebt een kubus van 10 bij 10 bij 10 steentjes van 1 bij 1 bij 1cm. Hoeveel steentjes zitten er aan de buitenkant? Neem ons door je denkproces, leg alles uit en hier heb je een pak papier
Het gaat dus niet echt om programmeren maar meer om je denkproces. Je ziet hier wel verschil in, hoe mensen het aanpakken en hoe ze met hints omgaan. Maar dit is echt iets heel basaals en is vaak binnen 10 minuten wel volledig doorsproken.
- hoekposities van 1 steentje per hoek, 8 hoekposities in totaal = 8 steentjes
- ribben van (10 - 2) = 8 steentjes per rib, 4 + 4 + 4 = 12 ribben in totaal = 96 steentjes
- "binnen"vlakken van 8 bij 8 steentjes = 64 steentjes per vlak, 6 vlakken in totaal = 384
totaal: 488 steentjes.
Het is makkelijker om een kubus van 8x8x8 af te trekken van de volledige van 10x10x10gekkie schreef op dinsdag 25 juni 2019 @ 12:06:
[...]
Eens kijken:
- hoekposities van 1 steentje per hoek, 8 hoekposities in totaal = 8 steentjes
- ribben van (10 - 2) = 8 steentjes per rib, 4 + 4 + 4 = 12 ribben in totaal = 96 steentjes
- "binnen"vlakken van 8 bij 8 steentjes = 64 steentjes per vlak, 6 vlakken in totaal = 384
totaal: 488 steentjes.
Maar dat bedacht ik ook pas later

Ask yourself if you are happy and then you cease to be.
Ik snap het idee, maar:Lethalis schreef op dinsdag 25 juni 2019 @ 11:53:
[...]
Een praktische opdracht die past bij de functie.
Een web developer zou ik een simpele web api laten bouwen, een frontend ervoor bouwen, database modelleren etc.
Dan zie je wat iemand voor werkervaring meeneemt als je kijkt naar wat hij of zij zelf erbij betrekt (qua security, performance, schaalbaarheid, testbaarheid etc).
[...]
- Het word dan echt een opdracht waar iemand wat tijd voor moet vrijmaken/hebben
- Aangenomen dat er niets als basis word gegeven, weet je niet of iemand dan ook lekker kan werken binnen het framework wat je op het werk hebt
Zit wat in, maar dan ben je wel heel erg aan het leunen op de cultuur dat developers in hun vrije tijd ook met programmeren bezig moeten zijn. En dat is iets wat ik persoonlijk niet zou willen aanwakkeren of vanuit zou willen gaan.ThomasG schreef op dinsdag 25 juni 2019 @ 11:59:
[...]
Wij vragen altijd of ze zelf iets kunnen laten zien voor zover mogelijk, en dan stellen we daar een paar vragen over. Bijvoorbeeld waarom ze bepaalde keuzes hebben gemaakt, dan pik je de bullshitters er vaak snel uit.
Dat is inderdaad het antwoord. De volgende stap zou zijn om het generieker te maken voor een kubus van N bij N bij N. Daarna de vraag of ze die formule kunnen versimpelen, om te kijken of ze uiteindelijk op dit kunnen komen:gekkie schreef op dinsdag 25 juni 2019 @ 12:06:
[...]
Eens kijken:
- hoekposities van 1 steentje per hoek, 8 hoekposities in totaal = 8 steentjes
- ribben van (10 - 2) = 8 steentjes per rib, 4 + 4 + 4 = 12 ribben in totaal = 96 steentjes
- "binnen"vlakken van 8 bij 8 steentjes = 64 steentjes per vlak, 6 vlakken in totaal = 384
totaal: 488 steentjes.
Lethalis schreef op dinsdag 25 juni 2019 @ 12:07:
[...]
Het is makkelijker om een kubus van 8x8x8 af te trekken van de volledige van 10x10x10
Maar dat bedacht ik ook pas later
klopt, maar goed ze willen toch een beetje systematische uitleg ?Lethalis schreef op dinsdag 25 juni 2019 @ 12:07:
[...]
Het is makkelijker om een kubus van 8x8x8 af te trekken van de volledige van 10x10x10
Maar dat bedacht ik ook pas later
Zullen ze het krijgen ook
Overigens wel gek, doe het eigenlijk regelmatig met solid-modelling, kubusjes van elkaar aftrekken, toch niet de eerste gedachte, eerst maar systematisch opbouwen ipv de simpelste oplossing kiezen.
[ Voor 20% gewijzigd door gekkie op 25-06-2019 12:36 ]
Alle steentjes minus steentjes die *niet* aan de buitenkant liggen. Best systematisch.gekkie schreef op dinsdag 25 juni 2019 @ 12:26:
[...]
klopt, maar goed ze willen toch een beetje systematische uitleg ?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Misschien maar gewoon compieleren van maken ipv compileren.
[ Voor 33% gewijzigd door gekkie op 25-06-2019 12:41 ]
Als iemand met een dergelijk antwoord komt dan zijn dat gewoon bonuspunten. Een hele elegante oplossing voor wat er gevraagd is, waar je meestal niet direct aan denkt. Soort out of the box denken, maar dan inside the boxgekkie schreef op dinsdag 25 juni 2019 @ 12:26:
[...]
klopt, maar goed ze willen toch een beetje systematische uitleg ?
Ik zat zelf te denken aan 6*10x10 - 12*10 + 8.
6 vlakken van 10x10. Maar dan tel je de edges dubbel, dus 12 edges van 10 blokjes eraf. Maar dan haal je er per hoekpunt weer een teveel af, dus 8 hoekpunten er weer bij.
In het generieke geval dus: 6n2 - 12n + 8.
Met de andere oplossing: n3 - (n-2)3
= n3 - (n - 2)(n2 - 4n + 4)
= n3 - ((n3 - 4n2 + 4n) - (2n2 - 8n + 8))
= n3 - (n3 - 4n2 + 4n - 2n2 + 8n - 8)
= n3 - (n3 - 6n2 + 12n - 8)
= n3 - n3 + 6n2 - 12n + 8
= 6n2 - 12n + 8
QED
[ Voor 48% gewijzigd door .oisyn op 25-06-2019 12:54 ]
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.
Klopt..oisyn schreef op dinsdag 25 juni 2019 @ 12:42:
[...]
Als iemand met een dergelijk antwoord komt dan zijn dat gewoon bonuspunten. Een hele elegante oplossing voor wat er gevraagd is, waar je meestal niet direct aan denkt. Soort out of the box denken, maar dan inside the box
Interessante mengeling van additie en subtractieIk zat zelf te denken aan 6*10x10 - 12*10 + 8.
6 vlakken van 10x10. Maar dan tel je de edges dubbel, dus 12 edges van 10 blokjes eraf. Maar dan haal je er per hoekpunt weer een teveel af, dus 8 hoekpunten er weer bij.
Vele wegen die naar Rome leiden ...
Vul eens 1 in
Gaat bij mij natuurlijk ook fout, maar je mag het bereik van een domein nooit vergeten.
Dus volgende stappen zijn alle input kleiner dan 0 niet accepteren, en een if statement voor de 0 en 1 situatie.
Ask yourself if you are happy and then you cease to be.
Doet er niet toe, gevraagd werd op een kubus van 10 groot. De generalisatie naar n deed ik om te bewijzen dat hij overeenkwam met de andere oplossing, en niet alleen toevallig bij n=10
[ Voor 6% gewijzigd door .oisyn op 25-06-2019 13: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.
Maar de generalisatie is dus alleen maar geldig als de generaal geen andere dingen zit te doen in het kleinste hokje. Kortom het stinkt.oisyn schreef op dinsdag 25 juni 2019 @ 13:11:
[...]
Doet er niet toe, gevraagd werd op een kubus van 10 groot. De generalisatie naar n deed ik om te bewijzen dat hij overeenkwam met de andere oplossing, en niet alleen toevallig bij n=10
Geef mij maar eens een generieke oplossing die werkt voor n=1 of n=2, ben erg benieuwd.gekkie schreef op dinsdag 25 juni 2019 @ 13:13:
[...]
Maar de generalisatie is dus alleen maar geldig als de generaal geen andere dingen zit te doen in het kleinste hokje. Kortom het stinkt
Overigens is de oplossing die .oisyn gaf met de vlakken - ribben + hoeken ook de oplossing die ik zelf als eerste had.
Maar goed, de vraag was dus: als niet dit soort dingen, wat dan wel? En nu het toch over dit soort vraagstukken gaat: zijn er nog mensen die meer van dit soort dingetjes weten? Vind ze zelf wel grappig en kunnen handig zijn om te weten voor sollicitaties
We namen aan dat de n3 - (n-2)3 correct was. Mijn oplossing geeft exact dezelfde output als die oplossing. Het domein komt dus automatisch ook overeen met die oplossing.gekkie schreef op dinsdag 25 juni 2019 @ 13:13:
[...]
Maar de generalisatie is dus alleen maar geldig als de generaal geen andere dingen zit te doen in het kleinste hokje
Maar goed, zelfde bijdehandmodus dan:
En wat als n=√5? Of n=34+5i?Lethalis schreef op dinsdag 25 juni 2019 @ 13:05:
Dus volgende stappen zijn alle input kleiner dan 0 niet accepteren, en een if statement voor de 0 en 1 situatie.
[ Voor 26% gewijzigd door .oisyn op 25-06-2019 13:31 ]
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.
Maar dan is er toch geen generalisatie mogelijk zonder ook de grenzen aan generieke oplossing te geven (en de uitzonderingsgevallen eventueel los te definieren in dit geval), zoals iemand eerder al aangaf ?Gropah schreef op dinsdag 25 juni 2019 @ 13:17:
[...]
Geef mij maar eens een generieke oplossing die werkt voor n=1 of n=2, ben erg benieuwd.
Ook eentje die ik als eerste overwogen heb, maar toch maar gekozen voor volledig opbouwen / addities ipv een mengeling met subtracties.Overigens is de oplossing die .oisyn gaf met de vlakken - ribben + hoeken ook de oplossing die ik zelf als eerste had.
Op zich een mengeling kan geen kwaad, dit test wat (ruimtelijk)inzicht en eventueel decomposen van je probleem in hapbare brokken. Stukje waarbij je wel syntax en taalkennis test hoeft ook niet per se verkeerd te zijn zoals het remainder probleem in feite was. Bij de gekozen oplossing zou doorvragen op het waarom van de oplossing misschien naar voren hebben gebracht dat deze oplossing gekozen is omdat men niet zeker wist of en hoe er een remainder functies is in die taal (sommatie idem dito). Afhankelijk van het gewenste niveau van de kandidaat.Maar goed, de vraag was dus: als niet dit soort dingen, wat dan wel? En nu het toch over dit soort vraagstukken gaat: zijn er nog mensen die meer van dit soort dingetjes weten? Vind ze zelf wel grappig en kunnen handig zijn om te weten voor sollicitaties
Basic tooling is misschien ook nog wel iets om aan te stippen.
Als er gewerkt moet worden met (SQL) databases, daar wat vragen over, optimalisatie van een query ?
Er lijkt me op zich genoeg te verzinnen, al blijft het belangrijkste het waarom van de gekozen oplossing.
Vraag is ook of en hoeveel je parate kennis wilt testen en hoeveel op inzicht en het kunnen vergaren en interpreteren van de benodigde kennis op dat moment.
En als je bij de TU/e in de sollicitatiecommissie zit is het makkelijk .. to be V or not to be V.
Owhhh maar dan heb ik nog een veel kortere en eenvoudigere generieke oplossing voor dat domein:.oisyn schreef op dinsdag 25 juni 2019 @ 13:29:
[...]
We namen aan dat de n3 - (n-2)3 correct was. Mijn oplossing geeft exact dezelfde output als die oplossing. Het domein komt dus automatisch ook overeen met die oplossing.
488.
Maar goed misschien zijn we nu alle sollicitatie-bonus-punten wel weer aan het verspelen als muggeziftende autisten.
[ Voor 13% gewijzigd door gekkie op 25-06-2019 13:40 ]
Maar het domein was niet n=10.gekkie schreef op dinsdag 25 juni 2019 @ 13:36:
Owhhh maar dan heb ik nog een veel kortere en eenvoudigere generieke oplossing voor dat domein:
488.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik blijf het als een programmeur zien, dus wanneer je alleen een unsigned integer als input accepteert, hoef je ook alleen de 0 en 1 situatie af te vangen
Uiteindelijk wil je correcte code. Dus het is niet eens zo bijdehand bedoeld van mij
Ask yourself if you are happy and then you cease to be.
Brrr, unsigned ints voor generieke getallen...Lethalis schreef op dinsdag 25 juni 2019 @ 13:42:
[...]
Ik blijf het als een programmeur zien, dus wanneer je alleen een unsigned integer als input accepteert
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.
Kan ik begrijpen, de afweging:.oisyn schreef op dinsdag 25 juni 2019 @ 14:04:
[...]
Brrr, unsigned ints voor generieke getallen...
1. uint dwingt positief getal af, maar heeft als nadeel dat het een veel hogere waarde kan hebben dan een int (met risico op overflow ergens anders in de code).
2. int gebruiken kan ook, als je een ArgumentException geeft bij een negatief getal (al dan niet met behulp van een framework).
3.De overdreven oplossing kan een custom type zijn.
Choose your poison
Ask yourself if you are happy and then you cease to be.
Maar dat is ook maar een arbitraire regel die in de verste verte niet opweegt tegen de problemen die je krijgt met het mixen van ints en uints in code. Je zult hoe dan ook je domein af moeten dekken. Als je bijvoorbeeld de n3 - (n-2)3 oplossing pakt mag n ook niet groter zijn dan 1290 bij een 32 bits signed int (al blijft het bij two's complement op zich wel lang goed gaan). Het testen op 0 is nauwelijks extra moeiteLethalis schreef op dinsdag 25 juni 2019 @ 14:12:
[...]
Kan ik begrijpen, de afweging:
1. uint dwingt positief getal af.
[ Voor 5% gewijzigd door .oisyn op 25-06-2019 14: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.
Een generieke formule die werkt voor n=1 of n=2, is er niet. Als je er een sequence van maakt is de 2nd difference steeds een stap van 12, behalve bij n=1 en n=2 (19 tussen 1 en 2, 8 tussen 2 en 3). Zonder check daarop gaat het dus niet werken.Gropah schreef op dinsdag 25 juni 2019 @ 13:17:
[...]
Geef mij maar eens een generieke oplossing die werkt voor n=1 of n=2, ben erg benieuwd.
Een hele crappy pseudo-recursieve functie die daar gebruikt van maakt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| let fn = (n) => { if (n == 1) { return 1; } else if (n == 2) { return 4; } else if (n == 3) { return 26; } // return 30 + 12 * (n - 4) + fn(n - 1); // edit: return (12 * n - 18) + fn(n - 1); } |
Edit: domme fout, n=2 is natuurlijk 8.
1
2
3
4
5
6
7
8
9
| fn = (n) => { if (n == 1) { return 1; } else if (n == 2) { return 8; } return (12 * n - 18) + fn(n - 1); } |
[ Voor 13% gewijzigd door ThomasG op 25-06-2019 15:09 ]
Komt nog eens bij dat dit een vrij 'standaard' vraag is, en je er dus, als je hem vaker gehad hebt, heel snel doorheen bent. Het is de som van de lengte van de ribben en het oppervlak tussen die ribben. En dat weet ik dan omdat 't toevallig terugkwam in de Advent of Code deze winterGropah schreef op dinsdag 25 juni 2019 @ 11:36:
Het gaat dus niet echt om programmeren maar meer om je denkproces. Je ziet hier wel verschil in, hoe mensen het aanpakken en hoe ze met hints omgaan. Maar dit is echt iets heel basaals en is vaak binnen 10 minuten wel volledig doorsproken.
https://niels.nu
2 *n2 + 2 * ((n-2) *n) + 2 * ((n-2) * (n-2)) werkt ook gewoon voor n=2.ThomasG schreef op dinsdag 25 juni 2019 @ 14:40:
[...]
Een generieke formule die werkt voor n=1 of n=2, is er niet. Als je er een sequence van maakt is de 2nd difference steeds een stap van 12, behalve bij n=1 en n=2 (19 tussen 1 en 2, 8 tussen 2 en 3). Zonder check daarop gaat het dus niet werken.
Een hele crappy pseudo-recursieve functie die daar gebruikt van maaktJavaScript:Speciale cases voor 1 en 2 en x^3-x(-2)^3 is waarschijnlijk gewoon de efficiëntste manier.
1 2 3 4 5 6 7 8 9 10 11 12 let fn = (n) => { if (n == 1) { return 1; } else if (n == 2) { return 4; } else if (n == 3) { return 26; } return 30 + 12 * (n - 4) + fn(n - 1); }
Die formule is gebaseerd op het idee dat je het in drie stappen bepaalt. De twee zijkanten zijn dan n*n. Daarna de voor en achterkant 'zonder de zijkanten' (dus 2 keer n * (n-2)). dan de boven en onderkant zonder zijkanten en voor- en achterkant, dus 2 keer (n-2)*(n-2).
Volgens mij ontkom je voor 1 niet aan een special case, al heb ik er ook niet heel diep over nagedacht.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
n=2: 23 - (0)3 = 8
[ Voor 3% gewijzigd door F.West98 op 25-06-2019 16:48 ]
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
Programmeren is niet alleen systematisch denken of slimme algoritmes verzinnen. Het heeft naar mijn mening ook een creatieve kant.
Structureren, ordenen, het grote plaatje zien, zinnige interfaces bedenken, interactie tussen componenten modelleren, documenteren, handigheid met diverse tools, zelfinzicht, omgaan met feedback, omgaan met teamleden, datastructuren, goede tests schrijven, documentatie lezen, jezelf willen verbeteren, communiceren en ga zo maar door. Allemaal zaken die je niet test met puzzeltjes, maar die voor functioneren een team ook heel zijn om dingen gedaan te krijgen.
Hoe je in al deze zaken inzicht krijgt tijdens een sollicitatiegesprek is dan weer een 2e
Inderdaad koude rillingen. Vaak wordt er ergens anders in de code weer gebruik gemaakt van signed ints bij invoer of het resultaat want "we voeren alleen kleine getallen in" of dat men toch om een gekke reden negatieve waardes gaat invoeren..oisyn schreef op dinsdag 25 juni 2019 @ 14:04:
[...]
Brrr, unsigned ints voor generieke getallen...
Simpel, als sollicitant vragen wat een bedrijf belangrijk vind en als bedrijf aangeven wat jij belangrijk vindt. Vervolgens kijken of je visie op die punten overeenkomt en hoe je dat kan bewijzen.EddoH schreef op dinsdag 25 juni 2019 @ 22:05:
Toch zie ik persoonlijk niet zo het nut van 'wiskundige' puzzeltjes in bij het zoeken naar een goede programmeur. Natuurlijk als je in een specifieke industrie of domein zit kan het toegevoegde waarde hebben, maar ik ken genoeg slimme mensen die een zootje van hun code maken en ook niet makkelijk inzien hoe het beter kan.
Programmeren is niet alleen systematisch denken of slimme algoritmes verzinnen. Het heeft naar mijn mening ook een creatieve kant.
Structureren, ordenen, het grote plaatje zien, zinnige interfaces bedenken, interactie tussen componenten modelleren, documenteren, handigheid met diverse tools, zelfinzicht, omgaan met feedback, omgaan met teamleden, datastructuren, goede tests schrijven, documentatie lezen, jezelf willen verbeteren, communiceren en ga zo maar door. Allemaal zaken die je niet test met puzzeltjes, maar die voor functioneren een team ook heel zijn om dingen gedaan te krijgen.
Hoe je in al deze zaken inzicht krijgt tijdens een sollicitatiegesprek is dan weer een 2e
Ik zie sollicitatiegesprekken altijd als een spelletje en om een spel te winnen moet je bekend zijn met de regels
"Doubt—the concern that my views may not be entirely correct—is the true friend of wisdom and (along with empathy, to which it’s related) the greatest enemy of polarization." -- Václav Havel
Vervolgens niet perse over de schouder mee kijken maar wel enigszins aanwezig zijn. Qua opdracht staat er vooral gespecificeerd dat men voor deze ene keer excessief veel comments moet maken, qua denkwijzes etc.
Uiteindelijk lopen we er samen doorheen en ik ben vooral benieuwd naar het proces, hoe/wat iemand zoekt en hoe iemand iets oplost.
Men wordt zeker niet afgerekend op hoeveel ze kunnen doen, dat vertel ik al aan het begin. Ik vertel sowieso wat de bedoeling is en waar ik allemaal naar kijk (het totaal plaatje dus).
Dit is vaak dan na een eerste "persoonlijk" gesprek, en visa-versa laat ik van alles van het bedrijf / applicatie zien.
Toentertijd in elk geval nooit een slechte keuze genomen met het aannemen
Want grote getallen zijn idd wél een goede reden om unsigned ints te gebruikenDevWouter schreef op dinsdag 25 juni 2019 @ 22:55:
Vaak wordt er ergens anders in de code weer gebruik gemaakt van signed ints bij invoer of het resultaat want "we voeren alleen kleine getallen in"

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.
^^ Mijn nieuwe titel, en ik vind het best leuk!
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!
*giechel*Firesphere schreef op woensdag 26 juni 2019 @ 07:58:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
[ Voor 12% gewijzigd door farlane op 26-06-2019 08:43 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Dat was mijn reactie ook gelijk!
Gefeliciteerd @Firesphere
Amper bekend zijn met C++ en continu dingen moeten opzoeken:

Gelukkig bouwt DuckDuckGo geen profiel op

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Bij een database primary keys (sequence of increment) is dat soms inderdaad de reden, want die kunnen toch niet negatief zijn (tenzij je rare dingen doet). Je kunt dan namelijk zonder extra schijfruimte in te nemen, grof weg 2 keer het aantal rijen opslaan. En voor indices is dat erg fijn. Een signed 32 bit PK kan te weinig zijn, en 64 bit primary keys zijn weer overkill en hebben een performance impact..oisyn schreef op dinsdag 25 juni 2019 @ 23:09:
[...]
Want grote getallen zijn idd wél een goede reden om unsigned ints te gebruiken
Overigens zijn primary keys geen rekenkundige getallen, dus mijn stelling was sowieso niet echt van toepassing. Unsigned ints zijn uitermate geschikt als identifiers.
[ Voor 68% gewijzigd door .oisyn op 26-06-2019 09: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.
Erg herkenbaar, ik zie deze regelmatig langs komenkenneth schreef op woensdag 26 juni 2019 @ 09:02:
Amper bekend zijn met C++ en continu dingen moeten opzoeken:
[Afbeelding]
Gelukkig bouwt DuckDuckGo geen profiel op

[ Voor 5% gewijzigd door bauke1994 op 26-06-2019 09:28 ]
“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.”
Bijvoorbeeld iets als adressen in Europa. Misschien zijn er nu 1,5 miljard (nu ja, in werkelijkheid minder gok ik, maar het is een voorbeeld), is 2 miljard wat riskant, maar zullen het er nooit 4 miljard worden..oisyn schreef op woensdag 26 juni 2019 @ 09:14:
In welke situatie is pakweg 2 miljard niet genoeg maar pakweg 4 miljard wel? Als je tegen de limieten van een 32 bits signed ints aan gaat lopen, dan ga je dat op termijn voor unsigned ints ook.
Er zijn altijd wel uitzonderingen met datasets die groot zijn, maar nog amper of niet meer groeien.
Of stel nu dat je toch maar een 64 bit key hebt genomen, maar je moet belachelijk veel gaan jongleren met de data. Als je nu 3 miljard entries hebt, kan je prima in je jongleer code met een 32 bit unsigned int werken om wat snelheid te winnen. Tegen dat je 5 jaar later aan de limiet komt (of bent, want je gaat het vergeten en het in de error logging zien
Dat gezegd zijnde zal zo'n situatie inderdaad wel zeldzaam zijn, en zal de performantie winst dikwijls niet eens opwegen tegen het uur onderzoek wat je ernaar moet doen.
Het is idd maar de vraag of het echt nodig is voor de functie.sig69 schreef op dinsdag 25 juni 2019 @ 22:59:
Wiskunde problemen oplossen is dan ook niet mijn kracht..
Zelf was ik altijd vrij goed in wiskunde en ik vond het ook altijd leuk, maar op mijn werk heb ik het al ruim 16 jaar nooit nodig gehad.
Alleen op mijn eerste baan, waar ik voornamelijk CAD tekenaar / developer was, was het echt belangrijk.
Maar bij mijn .NET developer banen daarna niet...
Ask yourself if you are happy and then you cease to be.
Vind daar dan een 32 bits int voor gaan gebruiken in de hoop dat 't past nogal een voorbeeld van premature optimisation.Giesber schreef op woensdag 26 juni 2019 @ 10:34:
Bijvoorbeeld iets als adressen in Europa. Misschien zijn er nu 1,5 miljard (nu ja, in werkelijkheid minder gok ik, maar het is een voorbeeld), is 2 miljard wat riskant, maar zullen het er nooit 4 miljard worden.
Dit soort data type keuzes moet je gaan maken als je op een vrij laag niveau met arrays van waarden bijvoorbeeld werkt. Als het gaat om database IDs e.d. is het sowieso al gangbaar gewoon een UUID te gebruiken.
Schijfruimte voor IDs vind ik nogal een non-issue. Je hebt een beter argument als het gaat om geheugen; buiten caching betekent (kort door de bocht) 2 keer zoveel ruimte nodig voor je index ook 2 keer zoveel tijd kwijt met het overhevelen naar de CPU. Maar dit zijn wel echt extreme optimalisaties die je m.i. alleen wil nemen als je een bottleneck geidentificeerd hebt.ThomasG schreef op woensdag 26 juni 2019 @ 09:12:
Bij een database primary keys (sequence of increment) is dat soms inderdaad de reden, want die kunnen toch niet negatief zijn (tenzij je rare dingen doet). Je kunt dan namelijk zonder extra schijfruimte in te nemen, grof weg 2 keer het aantal rijen opslaan. En voor indices is dat erg fijn. Een signed 32 bit PK kan te weinig zijn, en 64 bit primary keys zijn weer overkill en hebben een performance impact.
Tegenwoordig zijn 128-bit UUIDs enorm gangbaar als primary keys.
[ Voor 42% gewijzigd door Hydra op 26-06-2019 11:38 ]
https://niels.nu
Als je dat wil optimaliseren dan moet je ook al naar alignment en volgorde van alle datatypes in je tabel gaan kijken in je database (in iedergeval voor Postgres ivm padding, zie https://kuntalgh.blogspot...gnment-in-postgresql.html). Ben benieuwd of nieuwe storage formaten versie 13 gaan halen.Hydra schreef op woensdag 26 juni 2019 @ 11:31:
[...]
Schijfruimte voor IDs vind ik nogal een non-issue. Je hebt een beter argument als het gaat om geheugen; buiten caching betekent (kort door de bocht) 2 keer zoveel ruimte nodig voor je index ook 2 keer zoveel tijd kwijt met het overhevelen naar de CPU. Maar dit zijn wel echt extreme optimalisaties die je m.i. alleen wil nemen als je een bottleneck geidentificeerd hebt.
Tegenwoordig zijn 128-bit UUIDs enorm gangbaar als primary keys.
[ Voor 9% gewijzigd door gekkie op 26-06-2019 13:43 ]
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Willekeurig overal (btree) indexen op mikken kan er zo nog een veelvoud van makenMugwump schreef op woensdag 26 juni 2019 @ 13:40:
Ach, een project bij ons had laatst binnen maand al een koppeltabelletje van 750GB. Zou dus niet willen zeggen dat IDs en schijfruimte helemaal geen issue zouden kunnen zijn.
Kwestie van je OLTP en je OLAP op één model doen. Succes gegarandeerd.gekkie schreef op woensdag 26 juni 2019 @ 13:44:
[...]
Willekeurig overal (btree) indexen op mikken kan er zo nog een veelvoud van maken.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Gelukkig dan maar dat niemand dat zegtMugwump schreef op woensdag 26 juni 2019 @ 13:40:
Ach, een project bij ons had laatst binnen maand al een koppeltabelletje van 750GB. Zou dus niet willen zeggen dat IDs en schijfruimte helemaal geen issue zouden kunnen zijn.
https://niels.nu
Die gebruiken wij ook als unieke IDs in onze databases. Dan hoef je je daar geen zorgen meer over te maken. Sommige zijn nog timestamped ook, waardoor je terug kunt halen hoe laat ze gemaakt zijn.Hydra schreef op woensdag 26 juni 2019 @ 11:31:
Tegenwoordig zijn 128-bit UUIDs enorm gangbaar als primary keys.
If money talks then I'm a mime
If time is money then I'm out of time
Als je je in uberprogressief Sillicon Valley zo voorstelt aan een vrouw heb je meteen een #metoo aan je broek hangen. Misogynistisch patriarchaal zwijn dat je bent.Firesphere schreef op woensdag 26 juni 2019 @ 07:58:
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen
^^ Mijn nieuwe titel, en ik vind het best leuk!
Feli trouwens
Engineering is like Tetris. Succes disappears and errors accumulate.
Hebben ook nog als voordeel dat enumeration attacks lastiger worden.Matis schreef op woensdag 26 juni 2019 @ 17:52:
Die gebruiken wij ook als unieke IDs in onze databases. Dan hoef je je daar geen zorgen meer over te maken. Sommige zijn nog timestamped ook, waardoor je terug kunt halen hoe laat ze gemaakt zijn.
https://niels.nu
Ja, dat ook. Al maakt dat bij ons niet heel veel uit, want er is geen koppeling met een gebruiker mogelijk.Hydra schreef op woensdag 26 juni 2019 @ 19:56:
Hebben ook nog als voordeel dat enumeration attacks lastiger worden.
En een uuid ziet er natuurlijk veel l33t haxors uit dan een suffe integer (unsigned of niet
[ Voor 15% gewijzigd door Matis op 26-06-2019 22:47 ]
If money talks then I'm a mime
If time is money then I'm out of time
🠕 This side up
Verwijderd
Die pauken klinken wel als mijn constanten. Verder wat veel grandeurKoenvh schreef op donderdag 27 juni 2019 @ 01:56:
@Verwijderd Niet YouTube: Richard Strauss - Also sprach Zarathustra, Op. 30 ? Valt me toch weer tegen
1
2
3
| // ... buf = (Point*)glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB); // ... |
* RayNbow ziet vervolgens verder op iets staan als...
1
2
3
| // ... buf[i].X -= translation.X; // ... |
Write only...? 🤔
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Hoe doen jullie het eigenlijk qua database indexes?Hydra schreef op woensdag 26 juni 2019 @ 11:31:
[...]
Tegenwoordig zijn 128-bit UUIDs enorm gangbaar als primary keys.
UUID's zijn lekker uniek en random, maar daardoor ook vrij nasty als primary index (veel fragmentatie).
Nu kun je natuurlijk extra ruimte reserveren in de index, maar ik ben benieuwd
SQL Server heeft ook sequentiële UUID'S, maar that kinda defeats the purpose (wat enumeration attacks e.d. betreft).
Ook kun je natuurlijk een clustered sequentiële surrogate index gebruiken en een non clustered index voor de UUID's die je regelmatig defragmenteert.
Geen idee of dat best practice is echter. Al geeft het wel minder I/O overhead (om te defragmenteren).
PS
https://tomharrisonjr.com...s-be-careful-7b2aa3dcb439
Hier wordt aangeraden idd beide te gebruiken. Sequentiële ID's voor interne verwijzingen, random UUID's voor externe doeleinden.
[ Voor 40% gewijzigd door Lethalis op 27-06-2019 15:39 ]
Ask yourself if you are happy and then you cease to be.
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.