HTTPS!!!!1!!1!1!1!1!2!Giesber schreef op donderdag 1 oktober 2020 @ 11:33:
[...]
De requirements zijn dan ook niet veranderd lijkt me.
Wat als nu een Iraanse staatshacker m'n stem verandert met een MITM-aanval?
🠕 This side up
Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.
HTTPS!!!!1!!1!1!1!1!2!Giesber schreef op donderdag 1 oktober 2020 @ 11:33:
[...]
De requirements zijn dan ook niet veranderd lijkt me.
🠕 This side up
Maar dat is niet waarHydra schreef op donderdag 1 oktober 2020 @ 10:43:
[...]
Wel mooi ook dat 'ie in 20 jaar ofzo niet veranderd is
[ Voor 14% gewijzigd door .oisyn op 01-10-2020 11:52 ]
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.
Technically correct is the best kind of correct
https://niels.nu
Oehh, dit mag niet volgens de algmene voorwaarden.oisyn schreef op donderdag 1 oktober 2020 @ 11:49:
[...]
Maar dat is niet waar
[Afbeelding]
[Afbeelding]
[Afbeelding]
[Afbeelding]
[Afbeelding]
.edit: waardeloos dat ie nog steeds geen valide cert heeft. Nu cached de tweakers http proxy het resultaat.
Ook fijn dat het nog steeds een beta-versie is.quote: http://poll.dezeserver.nl/De kleine lettertjes: Je mag deze polls overal gebruiken, maar de layouts van GoT, FOK!, TweakZone, ThemeParkClub, HackersFuture, TechZine, BouwEenPC, Autoweek en ML75 mogen alleen op de desbetreffende sites/fora gebruikt worden. Het is niet mogelijk een poll later nog te wijzigen, je kan 'm alleen sluiten. Mochten er tikfouten in je poll staan, mail dan even naar BOOTZ om het te laten verbeteren.
Ik heb de poll niet gemaakt, ik ben nooit akkoord gegaan met die voorwaardenVihaio schreef op donderdag 1 oktober 2020 @ 12:03:
Oehh, dit mag niet volgens de algmene voorwaarden
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.
Dat is zoals Google, die brengen hun producten ook enkel in beta uitVihaio schreef op donderdag 1 oktober 2020 @ 12:03:
[...]
Ook fijn dat het nog steeds een beta-versie is.
[ Voor 27% gewijzigd door gekkie op 01-10-2020 14:00 ]
[ Voor 31% gewijzigd door alienfruit op 01-10-2020 20:42 ]
In Nederland is het ook niet nodig. Als jij watt tekst schrijft of software maakt heb je (of je werkgever) sowieso copyright daarover.gekkie schreef op donderdag 1 oktober 2020 @ 13:57:
Vraag me toch altijd af wat het nut is van zo'n (inmiddels voorbij gegane) jaartal/range bij het copyright gebeuren.
Ah de bedoeling is de datum van eerste publicatie en van significante wijzigingen.
Ben wel benieuwd. Hoeveel polls 403005, hoeveel stemmen.Hydra schreef op donderdag 1 oktober 2020 @ 10:43:
Wel mooi ook dat 'ie in 20 jaar ofzo niet veranderd is
If money talks then I'm a mime
If time is money then I'm out of time
Een goed vaag verhaal voor een eigen topicBlomminator schreef op vrijdag 2 oktober 2020 @ 07:50:
Heeft iemand een goede site/tutorial waarmee ik tekst kan opmaken in sql? Ik moet een query maken (wat niet mn vak is) waarbij is op basis van karakters tellen de opmaak kan.
Het gaat om naam/adres/plek/etc. Maar omdat je nooit weet hoe lang een naam is, neem ik steeds 20 chars, en trek daar de naam vanaf (bijv 10) en moet dan 10 spaties maken. En dit voor alle velden. Erg omslachtig.. maar goed.
Ik kan wel beetje querien.. maar tellen, uitlijnen en meer is nog best complex, zeker over vele records...
Any good tips?
Blomminator schreef op vrijdag 2 oktober 2020 @ 07:50:
Heeft iemand een goede site/tutorial waarmee ik tekst kan opmaken in sql? Ik moet een query maken (wat niet mn vak is) waarbij is op basis van karakters tellen de opmaak kan.
Het gaat om naam/adres/plek/etc. Maar omdat je nooit weet hoe lang een naam is, neem ik steeds 20 chars, en trek daar de naam vanaf (bijv 10) en moet dan 10 spaties maken. En dit voor alle velden. Erg omslachtig.. maar goed.
Ik kan wel beetje querien.. maar tellen, uitlijnen en meer is nog best complex, zeker over vele records...
Any good tips?
Er is maar één goede tip mogelijk, dus laten die maar gelijk geven.Douweegbertje schreef op vrijdag 2 oktober 2020 @ 08:00:
[...]
Een goed vaag verhaal voor een eigen topic
Sinds de 2 dagen regel reageer ik hier niet meer
Als je leest wat hij wil is het niet wat ik denk dat jij denkt dat opmaak is.CurlyMo schreef op vrijdag 2 oktober 2020 @ 08:05:
[...]
[...]
Er is maar één goede tip mogelijk, dus laten die maar gelijk geven.
Ruwe SQL ondersteund geen "opmaak". Het verwerkt alleen data. Wil je opmaak, dan zul je een andere tool moeten gebruiken zoals exporteren naar CSV en dan in bijv. Excel of Calc je opmaak regelen.
Next
Als je geld wilt verdienen met je (voormalig open source) werk is dat de enige manier denk ik. Geen idee of deze eraan gerelateerd is: https://twitter.com/hhariri/status/1311729914673090560PdeBie schreef op vrijdag 2 oktober 2020 @ 08:09:
IdentityServer wordt betaalde software (voor commerciële doeleinden):
https://leastprivilege.co...future-of-identityserver/
Read the code, write the code, be the code!
Dan wel, of RTFM
Sinds de 2 dagen regel reageer ik hier niet meer
Er is natuurlijk nog een derde optie en dat is het laten zoals het is.PdeBie schreef op vrijdag 2 oktober 2020 @ 09:15:
@wackmaniac Lijkt mij inderdaad gerelateerd aan IdentityServer. En ja terecht dat ze deze stap maken.
Als sponsoring niet blijkt te werken, dan kan je twee kanten op.
Helemaal stoppen of andere manieren van financiering opzoeken.
Read the code, write the code, be the code!
Am I a joke to you?CurlyMo schreef op vrijdag 2 oktober 2020 @ 08:05:
[...]
[...]
Er is maar één goede tip mogelijk, dus laten die maar gelijk geven.
Ruwe SQL ondersteund geen "opmaak". Het verwerkt alleen data. Wil je opmaak, dan zul je een andere tool moeten gebruiken zoals exporteren naar CSV en dan in bijv. Excel of Calc je opmaak regelen.
Next
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
...
Speel ook Balls Connect en Repeat
Dat denken veel mensen omdat dat ook gewoon zo is.Wilf schreef op vrijdag 2 oktober 2020 @ 22:54:
Dan kom je er dus achter dat er best veel mensen op de vloer denken dat een stekker ergens uittrekken en er dan weer instoppen een storing verhelpt.
Heeft geen speciale krachten en is daar erg boos over.
Dank je wel voor het plaatsen van de IdentityServer verandering. Ik was bezig met het implementeren van enkele OAuth standaarden die ik niet konden vinden in IS. Maar daar gaan we dan maar geen PRs meer voor openen.PdeBie schreef op vrijdag 2 oktober 2020 @ 08:09:
IdentityServer wordt betaalde software (voor commerciële doeleinden):
https://leastprivilege.co...future-of-identityserver/
[ Voor 37% gewijzigd door alienfruit op 03-10-2020 18:46 ]
Is dat niet het hele idee van Kubernetes? Gewoon fokking veel pods lanceren die elkaar opvangen?bwerg schreef op zaterdag 3 oktober 2020 @ 10:44:
[...]
Dat denken veel mensen omdat dat ook gewoon zo is.
Engineering is like Tetris. Succes disappears and errors accumulate.
Na 1 keer bij de Appie een tijd gewacht te hebben tot zo'n tiener de stekker van de sap-hannes-machine eruit ragt, doe ik het in het vervolg wel zelf bij storingWilf schreef op vrijdag 2 oktober 2020 @ 22:54:
Dan kom je er dus achter dat er best veel mensen op de vloer denken dat een stekker ergens uittrekken en er dan weer instoppen een storing verhelpt.
[ Voor 21% gewijzigd door gekkie op 03-10-2020 19:39 ]
Maar heb je dan ook een dedicated controller die de dedicated controller reset mocht dat nodig zijn? En eentje daarvoor? etc.Wilf schreef op zaterdag 3 oktober 2020 @ 19:49:
Oh ja het advies ‘have you tried turning it off & on again?’ heb ik ook echt wel eens gegeven maar voor 99,9999% van de storingen heb ik niet voor niets een GUI gebouwd op een dedicated controller die zelfstandig computers, lampen, deuren, rolluiken, alarmen, projectoren, audio servers, speakers en what not netjes uit zet danwel reboot.
[ Voor 8% gewijzigd door Wilf op 05-10-2020 19:37 ]
Nou, 'fokking veel' weet ik niet (meeste van onze services draaien er gewoon 2) maar hard 'crashen' als er iets echt mis is, is wel een best practice ja. Dan wordt er gewoon een nieuwe pod gestart en ondertussen wordt het verkeer naar de andere pods geroute.armageddon_2k1 schreef op zaterdag 3 oktober 2020 @ 11:20:
Is dat niet het hele idee van Kubernetes? Gewoon fokking veel pods lanceren die elkaar opvangen?
https://niels.nu
Stateless is wel een voorwaarde om iets fatsoensgelijk te draaien op k8s. Je pods kunnen ook herstarten als er niks mis is. (of worden verwijderd als je automatisch downscaled)gekkie schreef op maandag 5 oktober 2020 @ 19:53:
Hangt er een beetje vanaf wat de potentiele gevolgen zijn van als je door gaat draaien op gecrashte meuk.
Als het stateless meuk, is .. who cares .. als een database begint te sputteren dan graag gelijk een vette alert en kijken of er niet een nog grotere puinzooi door ontstaat met dataverlies tot gevolg.
[ Voor 4% gewijzigd door RagingPenguin op 05-10-2020 20:02 ]
Die volg ik niet helemaal. Dat services stateless zijn is min of meer een voorwaarde om op K8s te draaien. En doordraaien op 'gecrashte meuk' zie ik al helemaal niet voor me. Over het algemeen lijkt het me niet dat je dat wil.gekkie schreef op maandag 5 oktober 2020 @ 19:53:
Hangt er een beetje vanaf wat de potentiele gevolgen zijn van als je door gaat draaien op gecrashte meuk.
Als het stateless meuk, is .. who cares .. als een database begint te sputteren dan graag gelijk een vette alert en kijken of er niet een nog grotere puinzooi door ontstaat met dataverlies tot gevolg.
https://niels.nu
K8s is niet echt bedoeld voor databases e.d.gekkie schreef op maandag 5 oktober 2020 @ 20:38:
Er zijn er toch die dingen als PostgreSQL op k8s zetten in een of andere replicatie setup.
Zal vast handig zijn als je de toegenomen complexiteit kunt handelen, maar anders is dat toch ook niet echt risicoloos (voor iets wat doorgaans toch al moeilijk plat te krijgen is).
https://niels.nu
Dat weerhoudt dan weer niet iedereen er van
Nouja, het kan an sich wel. Voor een secundaire database of cache is het prima. Maar een primaire productie database, vooral iets als Postgres of MSSQL, is zo gebonden aan de node waarop het draait dat het gewoon weinig zin heeft.
https://niels.nu
Ik heb zelf een tijd lang CloudSQL (MySQL) in productie gebruikt, ik heb een aantal keer gehad dat hij uit zichzelf besloot de slave primary te maken, buiten de onderhoudstijden, wat dan soms ook echt gewoon een kwartier duurde. Daar had hij dan misschien wel een reden voor, maar die reden was niet echt te achterhalen. Het gevoel van machteloosheid terwijl productie eruit ligt en je alleen maar naar een draaiend icoontje kan kijken is echt zo frustrerend. Als het werkt is het top, als het niet werkt is het verschrikkelijk. Daarbij is het ook nog eens heel duur.Hydra schreef op dinsdag 6 oktober 2020 @ 10:48:
[...]
Nouja, het kan an sich wel. Voor een secundaire database of cache is het prima. Maar een primaire productie database, vooral iets als Postgres of MSSQL, is zo gebonden aan de node waarop het draait dat het gewoon weinig zin heeft.
Maar ik heb sowieso weinig met bedrijven die zelf on-prem k8s gaan draaien. Ik zit nu (nog) bij een klant waar alles bij Google staat, en dus is het daar gewoon een kwestie van CloudSQL in je project hangen waarna je k8s services gewoon netjes met je DB (in ons geval Postgres) praten. Laat het ops werk maar door Google doen, die zijn er over 't algemeen een stuk beter in.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
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.
Want, mening?pottink schreef op vrijdag 9 oktober 2020 @ 16:12:
Ik zie hier echt veel Laravel fanboys, terwijl dat framework toch echt zuigt.
Geen Symfony devvers hier?
Heeft nogal een speciale interpretatie van alles, zeker als je bijvoorbeeld meer SOLID wil gaan werken.
Ik zie hier vooral veel mensen die PHP überhaupt niet serieus nemen.pottink schreef op vrijdag 9 oktober 2020 @ 16:12:
Ik zie hier echt veel Laravel fanboys, terwijl dat framework toch echt zuigt.
Geen Symfony devvers hier?
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
[ Voor 59% gewijzigd door hackerhater op 09-10-2020 16:38 ]
{signature}
Classic, works everytime.pottink schreef op vrijdag 9 oktober 2020 @ 16:12:
Ik zie hier echt veel Laravel X fanboys, terwijl dat framework X's type toch echt zuigt.
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.
🠕 This side up
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Holala, we hebben hier een fanboy van het woord "fanboy"kenneth schreef op zaterdag 10 oktober 2020 @ 09:15:
Dat woord fanboy is echt zo giftig. Alsof een afkeur alleen verklaard kan worden doordat anderen niet onafhankelijk, objectief en nuchter kunnen nadenken en er onmogelijk afwegingen zijn die in het voor- of nadeel uitvallen van een bepaalde keuze.
Ouderwets gevalletje van de man in plaats van de bal spelen. Dat terwijl een onderbouwde rant tegen Laravel juist heel leuk zou zijn om te lezen. Of tegen Symphony. Of whatever. Het gaat om de rant, niet om het framework
Maar, zoals @farlane zegt ja, goed uitgevoerde troll.
Interessant punt. Dat zie je tegenwoordig wel vaker. Zelfs Microsoft lijkt dat nu te doen met .NET Core (of binnenkort .NET 5, wie kan nog volgen in hun naming scheme). De .NET LTS wordt 3 jaar ondersteund telkens. En tegenwoordig maken ze vaker compatibility breaking changes of doen ze ineens een grote omgooi. Ik vraag me af hoeveel bedrijven die verwacht worden lange support te bieden aan hun klanten/industrie, nog gebruik gaan blijven maken van .NET. Zeker bij industriën waar extra veel belang wordt gehecht aan security, is het echt geen optie om op een platform te blijven dat geen security updates meer krijgt, zelfs al hangt je server niet rechtstreeks aan het internet.Koenvh schreef op zaterdag 10 oktober 2020 @ 04:22:
Mijn grootste probleem met Laravel is dat de "LTS"-versie niet zo lang ondersteund wordt (bug fixes twee jaar, security fixes nog een jaar erbij). Dat vind ik te weinig voor een zo omvattend raamwerk dat ook nog eens de neiging heeft redelijk wat aan te passen bij elke versie. De niet-LTS-versie is nog erger met nog geen jaar aan bug fixes. Zal vast wel Agile zijn ofzo, maar ik wil me liever kunnen focussen op het ding zelf, en niet op het aanpassen aan de laatste versie van Laravel.
In Javaland is de boel ook wel aardig op de kop gegooid. Waar voorheen een trage release schedule was met pakweg 4-5 jaar public support (en nog wel een stuk langer support voor mensen met een support contract), heb je nu enerzijds meer JDK aanbieders naast (voohreen) Sun / (nu) Oracle, maar anderzijds ook eens in de zoveel jaar weer een LTS release, met daartussen releases met nieuwe features die niet LTS zijn en pakweg een jaartje support hebben.Neverwinterx schreef op zaterdag 10 oktober 2020 @ 12:25:
[...]
Interessant punt. Dat zie je tegenwoordig wel vaker. Zelfs Microsoft lijkt dat nu te doen met .NET Core (of binnenkort .NET 5, wie kan nog volgen in hun naming scheme). De .NET LTS wordt 3 jaar ondersteund telkens. En tegenwoordig maken ze vaker compatibility breaking changes of doen ze ineens een grote omgooi. Ik vraag me af hoeveel bedrijven die verwacht worden lange support te bieden aan hun klanten/industrie, nog gebruik gaan blijven maken van .NET. Zeker bij industriën waar extra veel belang wordt gehecht aan security, is het echt geen optie om op een platform te blijven dat geen security updates meer krijgt, zelfs al hangt je server niet rechtstreeks aan het internet.
Maar op die manier ben je meer bezig met het aanpassen van je software om mee te zijn met de versies en bulkt je code van de compiler directives om het verschil te maken tussen al die .NET versies (want tegelijk krijgt bijvoorbeeld het oude .NET 3.5 dan weer wel nog altijd security updates want dat zit te diep verweven in Windows...), dan dat je bezig bent met het updaten van je eigenlijk product.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Lees hier een mogelijke reden dat je software niet oneindig lang gaat ondersteunen.Mugwump schreef op zaterdag 10 oktober 2020 @ 14:06:
Hoe langer je wacht, des te vervelender het wel wordt natuurlijk. Mag nog gezellig een vrij groot project gaan overbouwen naar cloud native vanuit logge on premise JBoss servers (ja, al lang uit de LTS) op een java versie die ook al lang uit de LTS is en qua code bestaat uit fantastisch onderhouden, niet gedocumenteerde procedurele brei doorspekt met 20 niveau's diep geneste control structures en loops.
Precies, voor "levende" software vind ik een relatief korte LTS-periode helemaal niet zo slecht. Het zou iemand (anders dan de devs) ook meer incentive moeten geven om de boel bij de tijd houden. Doorgaans willen de devs wel vanwege alle nieuwe goodies, maar "geen security updates meer" is ook voor andere mensen nog wel eens een motivatie.Postman schreef op zaterdag 10 oktober 2020 @ 15:20:
[...]
Lees hier een mogelijke reden dat je software niet oneindig lang gaat ondersteunen.
'Moeten we niet naar de nieuwste versie gaan?'
'Nee joh, ondersteuning is nog tot 2024, we kijken over een paar jaar wel.'
Ergens in 2026: 'Het hele systeem werkt niet meer en we moeten nu naar de nieuwste versie!'
'Eeuhm ja leuk, maar 95% van je code is bagger. Wacht nog een (x aantal) jaar en dan is het wel opnieuw gemaakt.'
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
🠕 This side up
Dat "mooie" van Java is dan ook meteen een nadeel. Ze hebben ooit een aantal grote ontwerpfouten gemaakt in Java en daar hebben we nu nog steeds last van.Koenvh schreef op zaterdag 10 oktober 2020 @ 15:43:
@Postman Het mooie aan Java is dat ze niet de neiging hebben om alles constant te "verbeteren" (lees: kapot te maken). Van 8 naar 9 vereist een paar extra imports (als je die gebruikt), en daarboven blijft alles volgens mij gewoon werken. Dat in tegenstelling tot Laravel en in zekere zin .NET Core waar ze elke keer het wiel opnieuw uitvinden.
Zoals covariant arrays?ThomasG schreef op zaterdag 10 oktober 2020 @ 18:57:
[...]
Ze hebben ooit een aantal grote ontwerpfouten gemaakt in Java en daar hebben we nu nog steeds last van.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
🠕 This side up
En geen generics na type erasure, en dus geen zaken als generics in throwables.
[ Voor 27% gewijzigd door bwerg op 10-10-2020 20:23 ]
Heeft geen speciale krachten en is daar erg boos over.
De waarde null heeft een type, namelijk het type null. Het type null is een subtype van alle andere types in Java (behalve de primitives), zoals het type Object een supertype is van alle andere types in Java (behalve de primitives).bwerg schreef op zaterdag 10 oktober 2020 @ 20:21:
En, euhm, null. Als je een taal gewend bent wat goede alternatieven heeft voor null, dan zijn null-pointer exceptions echt ruk. Java is statisch getypeerd, behalve null.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Dat is gek, bij ons Laravel project, welke tientallen manjaren groot is, was het halfjaarlijks bijwerken van Laravel de laatste 5 keer steeds een kwestie van 2 tot 6 uur. Nogmaals, je kan genoeg van het stijltje vinden, maar maintenance en het upgradepath zijn juist de sterke punten.Koenvh schreef op zaterdag 10 oktober 2020 @ 15:43:
Dat in tegenstelling tot Laravel en in zekere zin .NET Core waar ze elke keer het wiel opnieuw uitvinden.
{signature}
Daarover verschillen we van mening. Wanneer ik het heb over backwards compatibility, dan bedoel ik niet dat je elk half jaar 2 tot 6 uur ergens aan moet sleutelen. Dan wil ik eigenlijk de oude code 1-op-1 over kunnen nemen. Ik heb geen probleem met de invulling van het upgradepath, maar met het feit dat er (zo vaak) een upgradepath nodig is.Voutloos schreef op zaterdag 10 oktober 2020 @ 21:55:
[...]
Dat is gek, bij ons Laravel project, welke tientallen manjaren groot is, was het halfjaarlijks bijwerken van Laravel de laatste 5 keer steeds een kwestie van 2 tot 6 uur. Nogmaals, je kan genoeg van het stijltje vinden, maar maintenance en het upgradepath zijn juist de sterke punten.
Dus ik weet niet wie je napraat, maar Laravel doet dus wél wat @Postman zegt. Elk half jaar draai je wat schroeven aan, met de LTS kan je dat een paar keer opsparen en that’s it.
[ Voor 9% gewijzigd door Koenvh op 10-10-2020 23:58 ]
🠕 This side up
Wat een hele mooie formele definitie is waarom het ruk is. Opzich is er niks mis met het concept van een null-pointer, zolang maar niet elk referentie type magisch een union is van zijn eigen definitie en null (in een taal zonder union types...). Modern C# en typescript doen dit dan een stuk beter en verwachten dat je dingen expliciet nullable maakt als ze null zouden kunnen zijn en checken in de typechecker op null types. En ja, ik weet dat je het in beide talen kunt uitzetten.RayNbow schreef op zaterdag 10 oktober 2020 @ 20:40:
[...]
De waarde null heeft een type, namelijk het type null. Het type null is een subtype van alle andere types in Java (behalve de primitives), zoals het type Object een supertype is van alle andere types in Java (behalve de primitives).
Mooie uitleg, maar dat doet helaas wel het hele concept van typering teniet. De hele toegevoegde waarde van typering is dat als je een object hebt van (een subtype van) type A, je dan weet dat je met dat object alles kan wat je met type A kan. Met null kan je juist helemaal niets, dus het is semantisch gezien juist géén subtype. De enige manier om null netjes in een typeringssysteem te stoppen is door het juist een supertype van Object te laten zijn. Waardoor je er helemaal niets mee kan, zodat je het net zo goed niet in je taal had kunnen stoppen. Wat een goed idee is voor elke programmeertaal waarin wordt geprobeerd weg te abstraheren van pointers.RayNbow schreef op zaterdag 10 oktober 2020 @ 20:40:
[...]
De waarde null heeft een type, namelijk het type null. Het type null is een subtype van alle andere types in Java (behalve de primitives), zoals het type Object een supertype is van alle andere types in Java (behalve de primitives).
Heeft geen speciale krachten en is daar erg boos over.
Java heeft dan Optional geïntroduceerd om nog iets van expliciete null-checking af te dwingen, maar het blijft behelpen. Ik zie dat dat ook maar matig wordt begrepen. Gaan mensen parameters van type optional definiëren met het idee dat het dan null-safe zou zijn. Helaas, nullpointer op je Optional.map.RagingPenguin schreef op zondag 11 oktober 2020 @ 08:44:
[...]
Wat een hele mooie formele definitie is waarom het ruk is. Opzich is er niks mis met het concept van een null-pointer, zolang maar niet elk referentie type magisch een union is van zijn eigen definitie en null (in een taal zonder union types...). Modern C# en typescript doen dit dan een stuk beter en verwachten dat je dingen expliciet nullable maakt als ze null zouden kunnen zijn en checken in de typechecker op null types. En ja, ik weet dat je het in beide talen kunt uitzetten.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Ik zou eerder zeggen dat mensen die null in optionals gaan stoppen of null als waarde van een optional gebruiken het niet hebben begrepen, dan de mensen die, best wel terecht, aannemen dat men dat gewoon niet moet doen.Mugwump schreef op zondag 11 oktober 2020 @ 09:29:
[...]
Java heeft dan Optional geïntroduceerd om nog iets van expliciete null-checking af te dwingen, maar het blijft behelpen. Ik zie dat dat ook maar matig wordt begrepen. Gaan mensen parameters van type optional definiëren met het idee dat het dan null-safe zou zijn. Helaas, nullpointer op je Optional.map.
Heeft geen speciale krachten en is daar erg boos over.
Natuurlijk hebben die het niet begrepen, maar dat is het punt niet.bwerg schreef op zondag 11 oktober 2020 @ 09:34:
[...]
Ik zou eerder zeggen dat mensen die null in optionals gaan stoppen of null als waarde van een optional gebruiken het niet hebben begrepen, dan de mensen die, best wel terecht, aannemen dat men dat gewoon niet moet doen.
Dat is nou een gevalletje legacy-meuk. Je kan wel Optionals en nullable-annotaties gaan toevoegen, maar zodra je tegen een stuk code gaat aanpraten waar dingen niet mooi geannoteerd of ge-optional'd zijn, dan kom je toch niet meer onder het onhandige gedrag van null uit.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Ik ben ook geen voorstander van dat het element null onderdeel maakt van elk referentietype, maar het ging me wat ver om dan maar aan te geven dat null niet statisch getypeerd is.RagingPenguin schreef op zondag 11 oktober 2020 @ 08:44:
[...]
Wat een hele mooie formele definitie is waarom het ruk is. Opzich is er niks mis met het concept van een null-pointer, zolang maar niet elk referentie type magisch een union is van zijn eigen definitie en null (in een taal zonder union types...).
Ja, het standaard beschikken over een Maybe/Nullable/Optional/etc. typeconstructor maakt het leven beter, maar daar beschikt Java ook over (zoals al boven mij is aangekaart). Op een ander vlak is Java explicieter, waarbij een subset aan exceptions expliciet dienen te worden gemaakt.Modern C# en typescript doen dit dan een stuk beter en verwachten dat je dingen expliciet nullable maakt als ze null zouden kunnen zijn en checken in de typechecker op null types. En ja, ik weet dat je het in beide talen kunt uitzetten.
Ja, het doet het concept van behavioral subtyping teniet, waar o.a. Liskov een voorstander van is. Maar goed, op dat gebied is Java zeker niet sterk (e.g. de eerder genoemde covariant arrays, maar ook dingen als java.util.Stack<E>).bwerg schreef op zondag 11 oktober 2020 @ 09:29:
[...]
Mooie uitleg, maar dat doet helaas wel het hele concept van typering teniet. De hele toegevoegde waarde van typering is dat als je een object hebt van (een subtype van) type A, je dan weet dat je met dat object alles kan wat je met type A kan. Met null kan je juist helemaal niets, dus het is semantisch gezien juist géén subtype.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Het punt is niet de aanwezigheid van een Option type, maar de type checks op null values. In Java kan je null pointer exceptions krijgen op elk reference type, in C# en TypeScript geeft de compiler je netjes een error als een reference null kan zijn en mag je null niet toekennen aan een reference type (behalve als die expliciet nullable is). Je hebt eigenlijk ook helemaal geen Option type nodig voor null safety,RayNbow schreef op zondag 11 oktober 2020 @ 10:26:
[...]
Ja, het standaard beschikken over een Maybe/Nullable/Optional/etc. typeconstructor maakt het leven beter, maar daar beschikt Java ook over (zoals al boven mij is aangekaart). Op een ander vlak is Java explicieter, waarbij een subset aan exceptions expliciet dienen te worden gemaakt.
(Nog beter zou imho een Either typeconstructor zijn)
1
| None | Some a |
1
| null | a |
Nou, niet echt. Als je een functie plus noemt kun je ook wel klagen dat degene die dat aanroept wel moet controleren of de functie wel echt optelt en toch niet stiekem aftrekt, maar als ik al mijn aannames over code die ik niet zelf heb geschreven moet gaan checken, dan ben ik wel even bezig... Laat staan dat dat een argument is om de functie dan maar niet plus te noemen.Mugwump schreef op zondag 11 oktober 2020 @ 09:54:
Sterker nog, dan biedt een optional parameter juist meer problemen, want dan wordt de expliciete nullcheck in de methode achterwege gelaten en loop je alleen maar een groter risico op nullpointers.
1
2
3
4
5
| if (x == null) jaWatDanEigenlijk(); if (y == null) throw new RuntimeException("Waarom doe je dit met null, daar kan ik helemaal niks mee"); ... |
Ik dus niet. De 'typeringsregel' dat null elk type is, doet in feite gewoon niks wat met typering te maken heeft. Net zo min als de typeringsregel dat een appel een banaan is. Een null-check (impliciet door de JRE bij het aanroepen van een methode) is gewoon een dynamische typecheck.RayNbow schreef op zondag 11 oktober 2020 @ 10:26:
maar het ging me wat ver om dan maar aan te geven dat null niet statisch getypeerd is.
[ Voor 16% gewijzigd door bwerg op 11-10-2020 11:22 ]
Heeft geen speciale krachten en is daar erg boos over.
Maar dan kan die 6 functies diep zitten wat het debuggen van random errors een stuk moelijker maakt. En een goede ide kan dit wel voor je genereren dus het is niet zo veel moeite om je input eerst te controleren.sig69 schreef op zondag 11 oktober 2020 @ 11:26:
Waarom zou je een functie schrijven en alle argumenten op null checken om dan een exception te gooien? Die NullReferenceException komt vanzelf wel.
Al geeft een IDE als IntelliJ wel een warning als je null toekent aan een Optional<T>, een harde compile-error zou beter zijn geweest.RagingPenguin schreef op zondag 11 oktober 2020 @ 11:02:
[...]
Het punt is niet de aanwezigheid van een Option type, maar de type checks op null values. In Java kan je null pointer exceptions krijgen op elk reference type, in C# en TypeScript geeft de compiler je netjes een error als een reference null kan zijn en mag je null niet toekennen aan een reference type (behalve als die expliciet nullable is).
Dat er een runtime-check is wil natuurlijk niet zeggen dat er geen statische check is. Die is er wel, maar beperkt. Ik kan in Java geen null toekennen aan een int variabele (=statische check). Er is ook een statische check aanwezig wanneer je een expressie van T[] toekent aan een U[] variabele, maar ook die check is beperkt en vereist alsnog runtime checks.bwerg schreef op zondag 11 oktober 2020 @ 11:16:
[...]
Ik dus niet. De 'typeringsregel' dat null elk type is, doet in feite gewoon niks wat met typering te maken heeft. Net zo min als de typeringsregel dat een appel een banaan is. Een null-check (impliciet door de JRE bij het aanroepen van een methode) is gewoon een dynamische typecheck.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Maar ga je dan ook op alle 6 de lagen / functies controleren of die arguments geen null zijn? Want dan gaat dus letterlijk vrijwel elke functie beginnen met null checks en worden ze nodeloos lang. Of ga je dan onderscheid maken tussen public en protected/private functies? Maar als de ene public functie gebruikt maakt van een andere class / service en daarop dus ook weer een public aanroept blijf je met hetzelfde probleem zitten.RagingPenguin schreef op zondag 11 oktober 2020 @ 11:31:
[...]
Maar dan kan die 6 functies diep zitten wat het debuggen van random errors een stuk moelijker maakt.
Dan heb je denk ik een oudere versie?RayNbow schreef op zondag 11 oktober 2020 @ 11:38:
[...]
(Als ik trouwens in C# null probeer toe te kennen aan een referentie-type variabele, dan krijg ik trouwens een warning, geen error.)
Uit luiheidsoverwegingen vaak alleen op de public API, in je interne classes binnen je package kan je er vaak wel vanuit gaan dat je alles hebt afgevangen.RobertMe schreef op zondag 11 oktober 2020 @ 11:47:
[...]
Maar ga je dan ook op alle 6 de lagen / functies controleren of die arguments geen null zijn? Want dan gaat dus letterlijk vrijwel elke functie beginnen met null checks en worden ze nodeloos lang. Of ga je dan onderscheid maken tussen public en protected/private functies? Maar als de ene public functie gebruikt maakt van een andere class / service en daarop dus ook weer een public aanroept blijf je met hetzelfde probleem zitten.
Ik draai VS2019 16.7.3nu .5; hoe ziet je .csproj eruit?RagingPenguin schreef op zondag 11 oktober 2020 @ 11:55:
[...]
Dan heb je denk ik een oudere versie?
[Afbeelding]
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Je noemt het "luiheid", maar het is ook gewoon leesbaarheid van je code. Als de helft van je scherm boilerplate toont kost het gewoon meer tijd en moeite om het te lezen/snappen/onderhouden/consistent te houden. Net zoals dat het debuggen van een nullpointer-exception tijd kost.RagingPenguin schreef op zondag 11 oktober 2020 @ 11:55:
Uit luiheidsoverwegingen vaak alleen op de public API, in je interne classes binnen je package kan je er vaak wel vanuit gaan dat je alles hebt afgevangen.
Leuk, maar een typeringssysteem dat alleen in beperkte gevallen statisch werkt, is niet statisch.RayNbow schreef op zondag 11 oktober 2020 @ 11:38:
Dat er een runtime-check is wil natuurlijk niet zeggen dat er geen statische check is. Die is er wel, maar beperkt. Ik kan in Java geen null toekennen aan een int variabele (=statische check).
Heeft geen speciale krachten en is daar erg boos over.
Klopt, en daarom wil je dus gewoon non-nullable types.bwerg schreef op zondag 11 oktober 2020 @ 11:16:
[...]
Nou, niet echt. Als je een functie plus noemt kun je ook wel klagen dat degene die dat aanroept wel moet controleren of de functie wel echt optelt en toch niet stiekem aftrekt, maar als ik al mijn aannames over code die ik niet zelf heb geschreven moet gaan checken, dan ben ik wel even bezig... Laat staan dat dat een argument is om de functie dan maar niet plus te noemen.
Optional wordt gebruikt om null te voorkomen en niet anders. Het alternatief is dat je echt letterlijk overal en altijd alles null-checkt. Wordt ik helemaal gek van. Vijf argumenten, eerst 10 regels boilerplate
code:
1 2 3 4 5 if (x == null) jaWatDanEigenlijk(); if (y == null) throw new RuntimeException("Waarom doe je dit met null, daar kan ik helemaal niks mee"); ...
En dan roept die methode weer een gelijknamige methode aan die bijna hetzelfde is maar dan met een extra argument, en wat ga je daar dan doen? Weer allemaal null-checks? Zo blijf je bezig.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Na 2 jaar full-time Kotlin wil ik ook eigenlijk niet terug naar Java. Zal wel wennen worden in een volgende klus.Mugwump schreef op zondag 11 oktober 2020 @ 09:29:
Kotlin kent bijvoorbeeld wel weer nullable en non-nullabe types.
https://niels.nu
[ Voor 5% gewijzigd door Koenvh op 11-10-2020 14:25 ]
🠕 This side up
Alle straten hebben bestaat niet, want als ik een staat verzin bestaat die sowieso niet.Koenvh schreef op zondag 11 oktober 2020 @ 14:19:
Er is nog een extra probleem met Optional. Bijvoorbeeld, je hebt een publieke API met functie getZipCode die een Optional teruggeeft. De functie werkt op dit moment alleen nog voor een bepaald aantal straten, en anders krijg je een empty terug. Een aantal versies later pas je de functie aan waardoor het voor alle straten werkt, en je geen Optional meer nodig hebt.
Dan moet je dus of je publieke API aanpassen, of een Optional teruggeven die altijd een waarde heeft. Beide zijn niet geweldig. Met null heb je dat probleem niet*.
* Met null heb je alleen twintig andere problemen
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Slecht voorbeeld dan, maar mijn punt blijft hetzelfdeMugwump schreef op zondag 11 oktober 2020 @ 15:19:
[...]
Alle straten hebben bestaat niet, want als ik een staat verzin bestaat die sowieso niet.
Ook komen er steeds straten bij. Vraag maar aan mensen in nieuwbouwwijken hoe frustrerend online shoppen kan zijn.
🠕 This side up
{signature}
Maak een nieuwe methode die het object direct teruggeeft, en verander de oude methode zodat die de nieuwe wrapt in een optional. Deprecate de oude.Koenvh schreef op zondag 11 oktober 2020 @ 14:19:
Dan moet je dus of je publieke API aanpassen, of een Optional teruggeven die altijd een waarde heeft. Beide zijn niet geweldig. Met null heb je dat probleem niet*.
Heeft geen speciale krachten en is daar erg boos over.
Ah ja, de befaamde getZipCode2bwerg schreef op zondag 11 oktober 2020 @ 17:19:
[...]
Maak een nieuwe methode die het object direct teruggeeft, en verander de oude methode zodat die de nieuwe wrapt in een optional. Deprecate de oude.
Nu nog het return-type onderdeel van de method signature laten zijn zodat de oude en nieuwe methode ook daadwerkelijk dezelfde naam kunnen hebben en de vlag mag uit.
🠕 This side up
In de stijl van PHP realGetZipCode
“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.”
Dat wordt toch niet bepaald door de versie van VS.NET, maar door de versie van de taal die je gebruikt ? Die wordt dan weer bepaald door de versie van het .NET framework dat je target.RayNbow schreef op zondag 11 oktober 2020 @ 12:03:
[...]
Ik draai VS2019 16.7.3nu .5; hoe ziet je .csproj eruit?
https://fgheysels.github.io/
Wat is dan precies het semantische tussen een Optional en een nullable type?Koenvh schreef op zondag 11 oktober 2020 @ 14:19:
Dan moet je dus of je publieke API aanpassen, of een Optional teruggeven die altijd een waarde heeft. Beide zijn niet geweldig. Met null heb je dat probleem niet*.
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.
Vandaar dat ik vraag naar de inhoud van de .csproj. Met het volgende kan ik een warning krijgen:whoami schreef op zondag 11 oktober 2020 @ 20:17:
[...]
Dat wordt toch niet bepaald door de versie van VS.NET, maar door de versie van de taal die je gebruikt ? Die wordt dan weer bepaald door de versie van het .NET framework dat je target.
1
2
3
4
5
6
7
8
9
10
| <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> <Nullable>enable</Nullable> <LangVersion>8</LangVersion> </PropertyGroup> </Project> |
Maar in de screenshot van @RagingPenguin zie ik een warning onder f staan (waarschijnlijk unused variable), dat kan niet met TreatWarningsAsErrors.Nullable reference types zijn beschikbaar vanaf C# 8, maar normaal gezien zou je hier enkel een warning moeten op krijgen. Tenzij je misschien 'treat warnings as errors' hebt aanstaan ?
[ Voor 6% gewijzigd door RayNbow op 11-10-2020 20:41 ]
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Dit topic is gesloten.
Apple iPhone 17 LG OLED evo G5 Google Pixel 10 Samsung Galaxy S25 Star Wars: Outlaws Nintendo Switch 2 Apple AirPods Pro (2e generatie) Sony PlayStation 5 Pro
Tweakers is onderdeel van
DPG Media B.V.
Alle rechten voorbehouden - Auteursrecht © 1998 - 2025
•
Hosting door TrueFullstaq