De Devschuur Coffee Corner - Iteratie ⑬ Vorige deel Overzicht

Pagina: 1 ... 20 ... 49 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

Ik ben nu in de wereld van de labelprinters en beletteringssystemen aan het duiken (want ik heb te vaak dat ik ergens een label voor kan gebruiken). Wat ik me afvroeg: zijn labelprinters net zo erg als normale printers? O-)

O, en wie vindt ABC ipv QWERTY een handige opmaak? :/

[ Voor 11% gewijzigd door Koenvh op 27-07-2022 20:09 ]

🠕 This side up


Acties:
  • +1 Henk 'm!

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 18:27
Hallo, medewerker aan hetzelfde bedrijf :+

Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 19:09
Koenvh schreef op woensdag 27 juli 2022 @ 20:07:
Ik ben nu in de wereld van de labelprinters en beletteringssystemen aan het duiken (want ik heb te vaak dat ik ergens een label voor kan gebruiken). Wat ik me afvroeg: zijn labelprinters net zo erg als normale printers? O-)

O, en wie vindt ABC ipv QWERTY een handige opmaak? :/
Volgens mij doe ik al 14 jaar met zowel m'n Brother labelprinter (of eigenlijk, beletteringssysteem, van dat tape dus) en laserprinter. Dat icm username zegt genoeg? :+

Maar zonder gekkigheid, ik heb dat ding ooit voor een paar tientjes gehaald, heeft altijd probleemloos gewerkt en de tapes zijn nog steeds te krijgen.
Het ligt dus maar heel erg aan je eigen ervaring met normale printers :p

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 09-09 17:48
Koenvh schreef op woensdag 27 juli 2022 @ 20:07:
Ik ben nu in de wereld van de labelprinters en beletteringssystemen aan het duiken (want ik heb te vaak dat ik ergens een label voor kan gebruiken). Wat ik me afvroeg: zijn labelprinters net zo erg als normale printers? O-)

O, en wie vindt ABC ipv QWERTY een handige opmaak? :/
Ligt eraan wat je koopt. Brother is inmiddels berucht vanwege de DRM op label cardriges.

Acties:
  • 0 Henk 'm!

  • Neverwinterx
  • Registratie: December 2005
  • Laatst online: 12-09 10:56
PdeBie schreef op maandag 25 juli 2022 @ 11:55:
Wauw. Lang geleden dat ik er een tegenkwam, maar daar was weer zo'n irritante scraping website hoor! :(

https://stackoverflow.com...k-completedtask-vs-return
VS
https://programmerall.com/article/27052259626/
Wel amusante timing dat op moment van schrijven stackoverflow eruit ligt, maar de scraping website wel bereikbaar is.

Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

mcDavid schreef op donderdag 28 juli 2022 @ 13:12:
[...]


Ligt eraan wat je koopt. Brother is inmiddels berucht vanwege de DRM op label cardriges.
Bestaat dat ook al? :/

🠕 This side up


Acties:
  • +1 Henk 'm!

  • Mschamp
  • Registratie: April 2014
  • Laatst online: 22:27
azerty schreef op woensdag 27 juli 2022 @ 20:08:
[...]


Hallo, medewerker aan hetzelfde bedrijf :+
Members only:
Alleen zichtbaar voor ingelogde gebruikers. Inloggen

Acties:
  • +14 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker



Matt Parker's inefficient Python script: 30 days.
Some guy's solution using graph theory: 22 minutes.
.oisyn's solution: 7 seconds. O-)

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.


Acties:
  • +1 Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 18-09 12:50

DaFeliX

Tnet Devver
is dat inclusief installeren van alle SDK's en compilen? :+

Einstein: Mijn vrouw begrijpt me niet


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 00:19
@.oisyn samenvattend is de uitdaging dus om vijf 5 letter woorden te vinden uit het Engelse woordenboek waarbij geen letters dubbel mogen voorkomen?

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Koenvh schreef op woensdag 27 juli 2022 @ 20:07:
Ik ben nu in de wereld van de labelprinters en beletteringssystemen aan het duiken (want ik heb te vaak dat ik ergens een label voor kan gebruiken). Wat ik me afvroeg: zijn labelprinters net zo erg als normale printers? O-)

O, en wie vindt ABC ipv QWERTY een handige opmaak? :/
Was je hier al aan uitgekomen?

Ik heb zelf een Dymo 450 (al zeker 10 jaar) voor verzendlabels, labels zelf koop ik bij de welbekende driecijferige knockoff webshop. Voor van die smalle labels gebruik ik de handheld Dymo 160, daar zaten twee cartridges bij en ik heb er in een jaar of 2 tijd één opgemaakt door alles in mijn huis te labelen.

Ben zelf nog op zoek naar een apparaat om van die metalen labeltjes te maken die echt een letter in het plaatje knijpen ipv alleen tekst printen, die beginnen bij een veel lagere prijs voor een handmatige maar ik ben er nog niet helemaal aan uit. Ben dus wel benieuwd waar jij precies naar zocht en waar je evt. op uit bent gekomen

Maar om het nog enigszins on-topic te houden: dat zijn ze absoluut. Een handheld labelprinter is altijd gezeik met die cartridges want er zit dan zo'n bandje in dat precies goed door het apparaat moet lopen. Die ik heb heeft ook twee laagjes in de cartridge; een voor de tekst en een voor de achterkant ofzo. Heb 'm een keer laten vallen en toen was de cartridge gewoon kapot, omdat die twee bandjes niet meer aan elkaar zaten en niet meer tegelijk afgerold werden, dus dan probeerde hij wel te printen maar kwam de achterkant niet mee en kon je dus je label niet afknippen.

De USB-variant is gewoon een normale printer volgens je PC, in theorie kun je vanuit Word dus gewoon een printopdracht sturen als je het juiste papierformaat toevoegt. Maar printen vanuit een browser is bijvoorbeeld weer niet zomaar mogelijk omdat je daar die papierformaten niet hebt.
Er was een tijdje dat je vanaf de website van PostNL direct een label kon printen maar dat is ook niet meer zo, in ieder geval niet met die lijn Dymo printers.

Heb nog geen toepassing voor mijn label printers kunnen vinden binnen softwareontwikkeling helaas.

Acties:
  • +1 Henk 'm!

  • Vihaio
  • Registratie: November 2006
  • Laatst online: 19-09 08:04
CurlyMo schreef op vrijdag 5 augustus 2022 @ 08:49:
@.oisyn samenvattend is de uitdaging dus om vijf 5 letter woorden te vinden uit het Engelse woordenboek waarbij geen letters dubbel mogen voorkomen?
Ik ben niet .oisyn, maar: Ja, dat is de uitdaging.

En daarbij wordt dit gebruikt als woordenboek (En vervolgens alle woorden die Wordle gebruikt, waardoor je imo beter meteen die lijst kan gebruiken)

[ Voor 26% gewijzigd door Vihaio op 05-08-2022 09:13 ]


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
De lijst staat sowieso niet vast. Hij heeft alleen die lijst gebruikt, omdat hij die al had. En de crosscheck tegen wordle lijst omdat die ook makkelijk te verkrijgen is. Maar als jij de complete oxford woordenboekwoordenlijst hebt in een handig te parsen format mag je die best gebruiken.

Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Caelorum schreef op vrijdag 5 augustus 2022 @ 09:18:
De lijst staat sowieso niet vast. Hij heeft alleen die lijst gebruikt, omdat hij die al had. En de crosscheck tegen wordle lijst omdat die ook makkelijk te verkrijgen is. Maar als jij de complete oxford woordenboekwoordenlijst hebt in een handig te parsen format mag je die best gebruiken.
Die van de OLD staan gewoon op https://www.oxfordlearnersdictionaries.com/wordlist/ en de Oxford University verkoopt blijkbaar zelf de lijst van de OED: https://languages.oup.com/products/oxford-wordlists/ (al staat er niet expliciet bij dat het de OED is, alleen Oxford).

De OED heeft overigens 'maar' 273k woorden, terwijl de Amerikaanse Webster al op 470k zit, en wiktionanry.org op 578k. Ik weet niet of dat het probleem moeilijker of makkelijker maakt, maar ik zou dan neigen naar de open-source optie waar je de grootste kans hebt om ook de minder gangbare woorden tegen te komen

Acties:
  • +3 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
En nu unicode support inbouwen.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Oon schreef op vrijdag 5 augustus 2022 @ 10:14:
[...]
De OED heeft overigens 'maar' 273k woorden, terwijl de Amerikaanse Webster al op 470k zit, en wiktionanry.org op 578k. Ik weet niet of dat het probleem moeilijker of makkelijker maakt, maar ik zou dan neigen naar de open-source optie waar je de grootste kans hebt om ook de minder gangbare woorden tegen te komen
Het probleem was juist dat die grote sets veel afkortingen bevatten als echte woorden, terwijl ze dat niet zijn. Dus je moet wel goed de set van tevoren checken (of de gevonden paren achteraf).

Acties:
  • +3 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Caelorum schreef op vrijdag 5 augustus 2022 @ 09:18:
De lijst staat sowieso niet vast.
Dat klopt, maar als je de perf van implementaties wil vergelijken dan is het natuurlijk wel handig dat iedereen dezelfde dataset gebruikt :)

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.


Acties:
  • 0 Henk 'm!

  • dcm360
  • Registratie: December 2006
  • Niet online

dcm360

Moderator Discord

HD7767 powered

Zo te zien in de comments onder de youtube-video zijn er genoeg kijkers die redelijk vlotte oplossingen weten te bedenken. Tijdens het kijken van de video had ik al het vermoeden dat het probleem niet zo complex zou zijn, en ik heb zelf in een half uurtje een vrij naïeve oplossing in elkaar gezet die een oplossing geeft in minder dan 90 seconden. Met een leuk verhaaltje (en een hint voor een efficiënte oplosrichting) erbij zou het nog wel in de Advent of Code kunnen passen ook.

Acties:
  • +2 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 22:17
.oisyn schreef op donderdag 4 augustus 2022 @ 20:14:
[YouTube: Can you find: five five-letter words with twenty-five unique letters?]

Matt Parker's inefficient Python script: 30 days.
Some guy's solution using graph theory: 22 minutes.
.oisyn's solution: 7 seconds. O-)
Josk79's solution in C#: 8 seconds |:(

Acties:
  • +4 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Het valt me eigenlijk wel tegen dan @.oisyn niet Rust heeft gebruikt...

Acties:
  • +3 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Caelorum schreef op vrijdag 5 augustus 2022 @ 19:56:
Het valt me eigenlijk wel tegen dan @.oisyn niet Rust heeft gebruikt...
Ben nog steeds niet zo proficient in Rust dat ik dat zo even uit mijn mouw schud. Dit heb ik ook maar in een uurtje ingetypt :)

Het is al heel wat dat ik de boel op github heb gezet :P

[ Voor 8% gewijzigd door .oisyn op 05-08-2022 20:58 ]

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.


Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

Oon schreef op vrijdag 5 augustus 2022 @ 08:57:
[...]

Was je hier al aan uitgekomen?

Ik heb zelf een Dymo 450 (al zeker 10 jaar) voor verzendlabels, labels zelf koop ik bij de welbekende driecijferige knockoff webshop. Voor van die smalle labels gebruik ik de handheld Dymo 160, daar zaten twee cartridges bij en ik heb er in een jaar of 2 tijd één opgemaakt door alles in mijn huis te labelen.

Ben zelf nog op zoek naar een apparaat om van die metalen labeltjes te maken die echt een letter in het plaatje knijpen ipv alleen tekst printen, die beginnen bij een veel lagere prijs voor een handmatige maar ik ben er nog niet helemaal aan uit. Ben dus wel benieuwd waar jij precies naar zocht en waar je evt. op uit bent gekomen

Maar om het nog enigszins on-topic te houden: dat zijn ze absoluut. Een handheld labelprinter is altijd gezeik met die cartridges want er zit dan zo'n bandje in dat precies goed door het apparaat moet lopen. Die ik heb heeft ook twee laagjes in de cartridge; een voor de tekst en een voor de achterkant ofzo. Heb 'm een keer laten vallen en toen was de cartridge gewoon kapot, omdat die twee bandjes niet meer aan elkaar zaten en niet meer tegelijk afgerold werden, dus dan probeerde hij wel te printen maar kwam de achterkant niet mee en kon je dus je label niet afknippen.

De USB-variant is gewoon een normale printer volgens je PC, in theorie kun je vanuit Word dus gewoon een printopdracht sturen als je het juiste papierformaat toevoegt. Maar printen vanuit een browser is bijvoorbeeld weer niet zomaar mogelijk omdat je daar die papierformaten niet hebt.
Er was een tijdje dat je vanaf de website van PostNL direct een label kon printen maar dat is ook niet meer zo, in ieder geval niet met die lijn Dymo printers.

Heb nog geen toepassing voor mijn label printers kunnen vinden binnen softwareontwikkeling helaas.
Ik heb geen tijd meer gehad om zelf op onderzoek uit te gaan, maar de ervaringen zijn vaak eerder negatief dan positief lijkt het.

🠕 This side up


Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Koenvh schreef op vrijdag 5 augustus 2022 @ 21:46:
[...]

Ik heb geen tijd meer gehad om zelf op onderzoek uit te gaan, maar de ervaringen zijn vaak eerder negatief dan positief lijkt het.
Het blijven printers, de enige vorm die nog enigszins betrouwbaar is is de 'embossing' label makers, want dat is gewoon een draaischijf om een enkele letter te selecteren en dan klem je die letter op het metalen plaatje.

Voor de digitale 'gewone' label printers zit er ook wel echt heel veel verschil in betrouwbaarheid per merk. Als je weg blijft van rotzooi als Leitz met hun DRM cartridges en slimme labelprinters met wifi die nooit werken, en weg blijft van de goedkopere Brothers e.d. dan zit je al redelijk goed. Mijn Dymo 450 heeft mij nog nooit in de steek gelaten, alleen de software is ruk maar dat went wel.

Acties:
  • +1 Henk 'm!

  • Vihaio
  • Registratie: November 2006
  • Laatst online: 19-09 08:04
Josk79 schreef op vrijdag 5 augustus 2022 @ 19:54:
[...]


Josk79's solution in C#: 8 seconds |:(
Pics repo or it didn't happen :P

Acties:
  • +2 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 22:17

Acties:
  • +2 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Josk79 schreef op vrijdag 5 augustus 2022 @ 19:54:
[...]


Josk79's solution in C#: 8 seconds |:(
.oisyn's solution na sorteren op letter frequentie: 0,138388s :Y)
.edit: sorry, dat is 0,077205s nadat ik alle nutteloze verbose prints eruit heb gehaald, die nu niet meer verwaarloosbaar zijn :P

[ Voor 22% gewijzigd door .oisyn op 06-08-2022 03: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.


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
.oisyn schreef op donderdag 4 augustus 2022 @ 20:14:
[YouTube: Can you find: five five-letter words with twenty-five unique letters?]

Matt Parker's inefficient Python script: 30 days.
Some guy's solution using graph theory: 22 minutes.
.oisyn's solution: 7 seconds. O-)
Mooi gedaan. Ik verbaas me wel over de frequentie van de letters (qxjz...nuroisea van laag naar hoog). In de cryptografie (kraken van geëncrypte berichten) zie ik vaak etaoins.... of eariotns.... gebruikt worden, zie bijv Wikipedia: Letter frequency. Blijkbaar zijn 5-letter woorden niet helemaal typisch qua letter frequentie. Of zijn de frequenties ongeveer hetzelfde?

When life gives you lemons, start a battery factory


Acties:
  • +1 Henk 'm!

  • Josk79
  • Registratie: September 2013
  • Laatst online: 22:17
@.oisyn Zo zo, zeer netjes! Ik heb zelf ook nog 3 optimalisaties in gedachten (1. resultaatbuffer predifinieren in plaats van yield gebruiken, 2. sorteren op letterfrequentie, net als jij en 3. een 'jumpmap', wordt vervolgd...), ik hoop dat ik er dit weekend tijd en zin voor heb om toe te passen. Maar jouw snelheid zal ik niet gaan redden met mijn methode, verwacht ik.

Edit:
Na optimalisatie 1 duurt het nu 4,7 sec. Het wordt wel een memory-hog als ik dan bijv. laat zoeken naar combinaties van zes 4-letterwoorden...

[ Voor 19% gewijzigd door Josk79 op 07-08-2022 14:15 ]


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Total time: 22968us (0.022968s)
Read:       11923us
Process:    10604us
Write:        441us


Custom file reads (33ms -> 12ms) en AVX2 optimalisaties (43ms -> 10ms) *D
Voor AVX2 heb ik maar even gebranched: https://github.com/oisyn/parkerwords/tree/sse

.edit: en nu met meerdere threads
Total time: 14272us (0.014272s)
Read:       11537us
Process:     2358us
Write:        377us


(de non-AVX2 komt hiermee op ongeveer 22ms)

[ Voor 45% gewijzigd door .oisyn op 08-08-2022 02:51 ]

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.


Acties:
  • +5 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

AVX2 word processing en async file reads, al denk ik dat de AVX optimize daarmee ook meteen zinloos is geworden. Een file read van de complete file kost 7,5ms op mijn machine, daar kan ik weinig aan doen. Dus dan maar zoveel mogelijk werk verzetten terwijl we op reads zitten te wachten :)

Total time: 10379us (0.010379s)
Read:        8008us
Process:     2000us
Write:        371us


Wel jammer, vond het juist zo'n mooie vonst om met SIMD op zoek te gaan naar newlines in een string :P

.edit: wacht, en terwijl ik dit typ bedenk ik me opeens dat ik helemaal geen \r\n combinatie tegenkom op mijn windows machine, alleen maar \n. En verrek, ik open de file als tekst. Alle \r\n's worden dus omgezet naar \n door std, maar dat hoeft voor mijn algo helemaal niet :D

En idd, de file openen als binary:
Total time: 6761us (0.006761s)
Read:        4305us
Process:     2041us
Write:        415us


Fuck yeah onder de 10ms :7

[ Voor 42% gewijzigd door .oisyn op 08-08-2022 18: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.


Acties:
  • +5 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
Kunnen we iig vaststellen dat @.oisyn zich niet verveeld in de nacht en vroege ochtend.

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 20:10

Dido

heforshe

Voor sommigen is een enkele AoC per jaar net wat te weinig, lijkt het wel :P

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Dido schreef op dinsdag 9 augustus 2022 @ 08:49:
Voor sommigen is een enkele AoC per jaar net wat te weinig, lijkt het wel :P
Wellicht word er daarom ook gekeken bij mijn werk of we zo iets kunnen op zetten voor vlak voor het vakantieseizoen :9

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 20:10

Dido

heforshe

Gropah schreef op dinsdag 9 augustus 2022 @ 09:47:
Wellicht word er daarom ook gekeken bij mijn werk of we zo iets kunnen op zetten voor vlak voor het vakantieseizoen :9
Je hebt het verhaal van Eric Wastl wel eens gehoord/gezien wat betreft de hoeveelheid tijd, resources en mankracht die hij daarin stopt? ;)
Hij is het hele jaar bezig om die ene maand 50 opdrachten klaar te hebben staan :)

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Dido schreef op dinsdag 9 augustus 2022 @ 09:55:
[...]

Je hebt het verhaal van Eric Wastl wel eens gehoord/gezien wat betreft de hoeveelheid tijd, resources en mankracht die hij daarin stopt? ;)
Hij is het hele jaar bezig om die ene maand 50 opdrachten klaar te hebben staan :)
Ik heb dat wel eens gelezen, en ik heb er enorm veel ontzag voor. Maar bij ons zou het sowieso in afgeslankte vorm zijn, met minder verhaal en zonder doorlopende opdrachten. Beetje meer a la crash & compile, iets korter en lichter om ook nog een beetje leuk naast je werk te kunnen doen. Ik heb al een aantal C&Cs opgezet en gerund (en daar kan ik waarschijnlijk ook wel wat problemen van rehashen), dus dat moet goed komen :)

[ Voor 11% gewijzigd door Gropah op 09-08-2022 10:42 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Na ruim een decennium .NET heb ik een jaartje geleden PHP weer eens opgepakt, en met namespaces, static code analyzers, generics/templates (soit, via comments, maar het werkt icm die analyers), lambda's en volwassen frameworks lijkt het tegenwoordig echt wel ergens op.

Maar waarom. In Godesnaam. Is nog steeds alles. Van voor tot achter. STRINGS EN ARRAYS.

Overal. In elk framework. In elke API-client. Alle libraries. Alles. Is. Strings. En. Arrays.

Download een library om tegen het webshopplatform Shopify te praten. Kijk naar de documentie van het orders-endpoint. Wat gaat er in de GET-call? Een string-array, en twee strings. Wat komt eruit? Een array. Met daarin. String-arrays. Wat zit er in $response[0]["line_items"][0]? NOG MEER STRING ARRAYS. Wat zegt de library-documentatie over de inhoud van die arrays? "Zie de Shopify-documentatie".

Mijn $deity.

Genereer klassen uit die API, en vul de klassen met de data uit die JSON. Het is 2022, ja. De taal PHP mag dan een soort van objectgeoriënteerd zijn (laat ik niet beginnen over abstracte klassen die een interface mogen implementeren zonder declaratie van functies uit die interface, of static methodes in interfaces en het plezier dat dat oplevert), maar de developers houden nog steeds halsstarrig vast aan de praktijken van 1999.

Tijd voor een pilletje.

[ Voor 21% gewijzigd door CodeCaster op 09-08-2022 12:07 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • +3 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 21:41

RayNbow

Kirika <3

CodeCaster schreef op dinsdag 9 augustus 2022 @ 11:57:
Maar waarom. In Godesnaam. Is nog steeds alles. Van voor tot achter. STRINGS EN ARRAYS.
Stringly typed *O*
Afbeeldingslocatie: https://tweakers.net/i/3xuv0lhy-yRAKLn3y944sXKt2x8=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/KzfhYuwTKhytBfuEW87ZF33q.png?f=user_large

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 21:51
CodeCaster schreef op dinsdag 9 augustus 2022 @ 11:57:
Na ruim een decennium .NET heb ik een jaartje geleden PHP weer eens opgepakt, en met namespaces, static code analyzers, generics/templates (soit, via comments, maar het werkt icm die analyers), lambda's en volwassen frameworks lijkt het tegenwoordig echt wel ergens op.

Maar waarom. In Godesnaam. Is nog steeds alles. Van voor tot achter. STRINGS EN ARRAYS.

Overal. In elk framework. In elke API-client. Alle libraries. Alles. Is. Strings. En. Arrays.

Download een library om tegen het webshopplatform Shopify te praten. Kijk naar de documentie van het orders-endpoint. Wat gaat er in de GET-call? Een string-array, en twee strings. Wat komt eruit? Een array. Met daarin. String-arrays. Wat zit er in $response[0]["line_items"][0]? NOG MEER STRING ARRAYS. Wat zegt de library-documentatie over de inhoud van die arrays? "Zie de Shopify-documentatie".

Mijn $deity.

Genereer klassen uit die API, en vul de klassen met de data uit die JSON. Het is 2022, ja. De taal PHP mag dan een soort van objectgeoriënteerd zijn (laat ik niet beginnen over abstracte klassen die een interface mogen implementeren zonder declaratie van functies uit die interface, of static methodes in interfaces en het plezier dat dat oplevert), maar de developers houden nog steeds halsstarrig vast aan de praktijken van 1999.

Tijd voor een pilletje.
De Shopify API ondersteund GraphQL. Klinkt dus als een gevalletje slechte library :')

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

ThomasG schreef op dinsdag 9 augustus 2022 @ 12:37:
[...]
De Shopify API ondersteund GraphQL. Klinkt dus als een gevalletje slechte library :')
Ja want dat is de heilige graal en daar komen lekkere typed objects uit.

Order->FulfillmentOrder->Fulfillment->FU query te diep

Of API v202109 heeft geen nodes of edges waar v202204 die wel heeft, dus kun je je halve query herschrijven (of gewoon niet uitvoeren tegen GraphQL). En dan nog, je moet de GraphQL-query als string schrijven, en krijgt weer string arrays terug.

[ Voor 26% gewijzigd door CodeCaster op 09-08-2022 12:58 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • +2 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

CodeCaster schreef op dinsdag 9 augustus 2022 @ 11:57:
Na ruim een decennium .NET heb ik een jaartje geleden PHP weer eens opgepakt, en met namespaces, static code analyzers, generics/templates (soit, via comments, maar het werkt icm die analyers), lambda's en volwassen frameworks lijkt het tegenwoordig echt wel ergens op.

Maar waarom. In Godesnaam. Is nog steeds alles. Van voor tot achter. STRINGS EN ARRAYS.

Overal. In elk framework. In elke API-client. Alle libraries. Alles. Is. Strings. En. Arrays.

Download een library om tegen het webshopplatform Shopify te praten. Kijk naar de documentie van het orders-endpoint. Wat gaat er in de GET-call? Een string-array, en twee strings. Wat komt eruit? Een array. Met daarin. String-arrays. Wat zit er in $response[0]["line_items"][0]? NOG MEER STRING ARRAYS. Wat zegt de library-documentatie over de inhoud van die arrays? "Zie de Shopify-documentatie".

Mijn $deity.

Genereer klassen uit die API, en vul de klassen met de data uit die JSON. Het is 2022, ja. De taal PHP mag dan een soort van objectgeoriënteerd zijn (laat ik niet beginnen over abstracte klassen die een interface mogen implementeren zonder declaratie van functies uit die interface, of static methodes in interfaces en het plezier dat dat oplevert), maar de developers houden nog steeds halsstarrig vast aan de praktijken van 1999.

Tijd voor een pilletje.
Je kunt er dus geen touw aan vastknopen? :+

Ik begrijp je ergernis wel. PHP is raar wat strings nou eigenlijk zijn (reeksen van bytes zijn bijvoorbeeld ook strings). Al moet ik wel zeggen dat ik het wel fijn vind dat het kán, in plaats van dat ik eerst voor alles wat in de JSON kan staan eerst een model moet maken, want da's vooral als je één waarde zoekt in een brij aan nested JSON echt een stuk makkelijker.

* Koenvh heeft nog nachtmerries van de structuur van Actions on Google

🠕 This side up


Acties:
  • +9 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op maandag 8 augustus 2022 @ 18:24:
AVX2 word processing en async file reads, al denk ik dat de AVX optimize daarmee ook meteen zinloos is geworden. Een file read van de complete file kost 7,5ms op mijn machine, daar kan ik weinig aan doen. Dus dan maar zoveel mogelijk werk verzetten terwijl we op reads zitten te wachten :)

Total time: 10379us (0.010379s)
Read:        8008us
Process:     2000us
Write:        371us


Wel jammer, vond het juist zo'n mooie vonst om met SIMD op zoek te gaan naar newlines in een string :P

.edit: wacht, en terwijl ik dit typ bedenk ik me opeens dat ik helemaal geen \r\n combinatie tegenkom op mijn windows machine, alleen maar \n. En verrek, ik open de file als tekst. Alle \r\n's worden dus omgezet naar \n door std, maar dat hoeft voor mijn algo helemaal niet :D

En idd, de file openen als binary:
Total time: 6761us (0.006761s)
Read:        4305us
Process:     2041us
Write:        415us


Fuck yeah onder de 10ms :7
Iemand heeft alle implementaties gerund op zijn eigen machine en getimed.


Matt Parker heeft een follow-up video gefilmd die volgende week gereleased wordt


Raad eens wie de snelste tijd heeft O-)

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.


Acties:
  • +3 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

.oisyn schreef op woensdag 10 augustus 2022 @ 11:56:
Raad eens wie de snelste tijd heeft O-)
Gefeliciteerd met je 20 seconden van roem... of is het 0.010379 seconden? :+

"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


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
.oisyn schreef op woensdag 10 augustus 2022 @ 11:56:
[...]
Raad eens wie de snelste tijd heeft O-)
Saillant detail, de runner up is (maar) 7ms langzamer, gebruikt dezelfde algoritmes, niet geparallelliseerd en is geschreven in ..... uhuh :P

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.


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

farlane schreef op woensdag 10 augustus 2022 @ 22:40:
[...]


Saillant detail, de runner up is (maar) 7ms langzamer, gebruikt dezelfde algoritmes, niet geparallelliseerd en is geschreven in ..... uhuh :P
Saillant detail is dat dat de entry is van miniBill, die *mijn* algo heeft geport naar Rust en daarbij gebruik maakt van Rayon, een parallellisatie-api ;)

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.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
.oisyn schreef op woensdag 10 augustus 2022 @ 23:52:
[...]

Saillant detail is dat dat de entry is van miniBill, die *mijn* algo heeft geport naar Rust en daarbij gebruik maakt van Rayon, een parallellisatie-api ;)
Beetje -O- wel :P.
Was wel benieuwd hoe die Rust versie dan in een geparallelliseerde versie zou performen maar blijkbaar is 'ie dat al.

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.


  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

CodeCaster schreef op dinsdag 9 augustus 2022 @ 11:57:
Na ruim een decennium .NET heb ik een jaartje geleden PHP weer eens opgepakt, en met namespaces, static code analyzers, generics/templates (soit, via comments, maar het werkt icm die analyers), lambda's en volwassen frameworks lijkt het tegenwoordig echt wel ergens op.

Maar waarom. In Godesnaam. Is nog steeds alles. Van voor tot achter. STRINGS EN ARRAYS.

Overal. In elk framework. In elke API-client. Alle libraries. Alles. Is. Strings. En. Arrays.

Download een library om tegen het webshopplatform Shopify te praten. Kijk naar de documentie van het orders-endpoint. Wat gaat er in de GET-call? Een string-array, en twee strings. Wat komt eruit? Een array. Met daarin. String-arrays. Wat zit er in $response[0]["line_items"][0]? NOG MEER STRING ARRAYS. Wat zegt de library-documentatie over de inhoud van die arrays? "Zie de Shopify-documentatie".

Mijn $deity.

Genereer klassen uit die API, en vul de klassen met de data uit die JSON. Het is 2022, ja. De taal PHP mag dan een soort van objectgeoriënteerd zijn (laat ik niet beginnen over abstracte klassen die een interface mogen implementeren zonder declaratie van functies uit die interface, of static methodes in interfaces en het plezier dat dat oplevert), maar de developers houden nog steeds halsstarrig vast aan de praktijken van 1999.

Tijd voor een pilletje.
Meh, strong typing is leuk maar als je met crappy data, ik noem maar wat: command line output van verschillende OS'en, tot een domein model moet komen is het niet zo gek. :)

Less alienation, more cooperation.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Sandor_Clegane schreef op donderdag 11 augustus 2022 @ 20:36:
[...]


Meh, strong typing is leuk maar als je met crappy data, ik noem maar wat: command line output van verschillende OS'en, tot een domein model moet komen is het niet zo gek. :)
Als je commandline output moet parsen, heb je een OS dat API's mist. Of tsja, zeg, directorylistings van FTP.

Ik snap dat er uitzonderingen zijn, maar wat ik ondertussen in een jaar ben tegengekomen, tot zo ongeveer alle API's van alle webframeworks, zijn het arrays met strings als keys en strings (of inception, weer arrays) als values.

Doctrine-queries, bijvoorbeeld. Leuk dat je entities hebt, maar DQL is een bak string-magie die runtime pas stukgaat. Ook de expressionbuilder gebruikt uiteindelijk alleen maar strings. Dat je IDE dan autocompletion voorstelt binnen die strings op basis van diens parsing van je entity-klassen is schattig, maar ook niet meer dan dat.

Of, ik noem maar wat, het bouwen van een form-element in Symfony:
PHP:
1
2
3
4
5
6
7
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            // ...
            ->add('dueDate', DateType::class, [
                'required' => $options['require_due_date'],
            ])

Welke parameters (naast"required") en options (naast "require_due_date") zijn er nog meer? Geen idee, zie de docs. En als het een onbekende key is, wordt 'ie dan genegeerd of throwt het? Verschilt ook weer per toepassing.

En zoals ik al zei, zo'n beetje alle API-clients werken niet met objecten, terwijl je die tegenwoordig prima kunt genereren uit OpenAPI-specificaties.

Gewoon onbruikbaar, onproductief, onprofessioneel.

[ Voor 6% gewijzigd door CodeCaster op 11-08-2022 20:54 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • +1 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

CodeCaster schreef op donderdag 11 augustus 2022 @ 20:53:
[...]

Als je commandline output moet parsen, heb je een OS dat API's mist. Of tsja, zeg, directorylistings van FTP.

Ik snap dat er uitzonderingen zijn, maar wat ik ondertussen in een jaar ben tegengekomen, tot zo ongeveer alle API's van alle webframeworks, zijn het arrays met strings als keys en strings (of inception, weer arrays) als values.

Doctrine-queries, bijvoorbeeld. Leuk dat je entities hebt, maar DQL is een bak string-magie die runtime pas stukgaat. Ook de expressionbuilder gebruikt uiteindelijk alleen maar strings. Dat je IDE dan autocompletion voorstelt binnen die strings op basis van diens parsing van je entity-klassen is schattig, maar ook niet meer dan dat.

Of, ik noem maar wat, het bouwen van een form-element in Symfony:
PHP:
1
2
3
4
5
6
7
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            // ...
            ->add('dueDate', DateType::class, [
                'required' => $options['require_due_date'],
            ])

Welke parameters (naast"required") en options (naast "require_due_date") zijn er nog meer? Geen idee, zie de docs. En als het een onbekende key is, wordt 'ie dan genegeerd of throwt het? Verschilt ook weer per toepassing.

En zoals ik al zei, zo'n beetje alle API-clients werken niet met objecten, terwijl je die tegenwoordig prima kunt genereren uit OpenAPI-specificaties.

Gewoon onbruikbaar, onproductief, onprofessioneel.
Ik ga geen ZFS API in C aanspreken. :) Sorry, mij iets te link. Ach, zeg nooit nooit, maar op het moment is dit gewoon sneller.

Ik snap je punt, maar op een gegeven ben je zoveel aan het transformeren om het allemaal met de juiste types op de juiste plek te krijgen dat een dynamische taal niet eens zo gek is.

Ik ben blij met F#, maar de enorme striktheid qua types maakt het soms een hoop hoepels om doorheen te springen. Voordeel is wel, als je het dan eenmaal in je domain hebt dan werkt alles weer 10 x zo snel. :)

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

CodeCaster schreef op donderdag 11 augustus 2022 @ 20:53:
Als je commandline output moet parsen, heb je een OS dat API's mist.
Uhm... Netwerk en Wifi configureren via een webapp op DietPi (Debian).
Je hebt zelfs commando's die met opzet JSON uitspugen zodat.

Ik geef toe dat het een uitzonderlijk iets is, maar ik heb zelfs een tijdje gezocht naar apt-packages die iets van een stabiele api introduceren, maar nope, het is config-files overschrijven. En laat nu geen enkele config-file op elkaar lijken :)

"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


Acties:
  • +1 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

DevWouter schreef op donderdag 11 augustus 2022 @ 21:00:
[...]


Uhm... Netwerk en Wifi configureren via een webapp op DietPi (Debian).
Je hebt zelfs commando's die met opzet JSON uitspugen zodat.

Ik geef toe dat het een uitzonderlijk iets is, maar ik heb zelfs een tijdje gezocht naar apt-packages die iets van een stabiele api introduceren, maar nope, het is config-files overschrijven. En laat nu geen enkele config-file op elkaar lijken :)
Dit is het precies, plus je hoeft geen client op het OS te installeren. SSH naar de host met keys, juiste sudo config voor bijvoorbeeld de packetfilter en het werkt allemaal redelijk vlotjes.

Probleem is bijvoorbeeld dat route op BSD net iets anders is dan ip route of route op Linux. :)

Less alienation, more cooperation.


  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

Sandor_Clegane schreef op donderdag 11 augustus 2022 @ 21:05:
[...]


Dit is het precies, plus je hoeft geen client op het OS te installeren. SSH naar de host met keys, juiste sudo config voor bijvoorbeeld de packetfilter en het werkt allemaal redelijk vlotjes.

Probleem is bijvoorbeeld dat route op BSD net iets anders is dan ip route of route op Linux. :)
Vooral dat laatste. Als er één ding is dat ik onthouden heb voor linux is dat er heel veel methodes zijn om te configureren en dat alle documentatie/stackoverflow-posts online allemaal er naast zijn. Zo zijn er sommige die van mening zijn dat je altijd je machine moet herstarten bij een configuratie wijziging. Alsof het Windows 95 is :+

"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


  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

DevWouter schreef op donderdag 11 augustus 2022 @ 21:20:
[...]


Vooral dat laatste. Als er één ding is dat ik onthouden heb voor linux is dat er heel veel methodes zijn om te configureren en dat alle documentatie/stackoverflow-posts online allemaal er naast zijn. Zo zijn er sommige die van mening zijn dat je altijd je machine moet herstarten bij een configuratie wijziging. Alsof het Windows 95 is :+
Yup. En ik hoef het alleen maar te lezen. (voor het moment dan).

Kwam deze tegen: https://kellyjonbrazil.github.io/jc/

Misschien handig.

Less alienation, more cooperation.


  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

Sandor_Clegane schreef op donderdag 11 augustus 2022 @ 21:23:
[...]


Yup. En ik hoef het alleen maar te lezen. (voor het moment dan).

Kwam deze tegen: https://kellyjonbrazil.github.io/jc/

Misschien handig.
Bedankt, ik heb hem in de bookmarks gezet. (overigens is ip -j address ook heerlijk[/]


Helaas, mijn applicatie moet lezen en schrijven. Overigens heb ik geen moeite om parsers te schrijven, maar het is vooral uitzoeken wat alle mogelijke resultaten zijn. En dan heb je nog configured-values en running-values die niet perse gelijk hoeven te zijn.

En "faux-parsers" (regex ipv lexers) zijn trouwens heerlijk te schrijven met TDD.

"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


  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

DevWouter schreef op donderdag 11 augustus 2022 @ 21:35:
[...]


Bedankt, ik heb hem in de bookmarks gezet. (overigens is ip -j address ook heerlijk[/]
Klopt, punt is alleen dat je dan weer decoders moet schrijven die verschillen. :) BSD kent geen ip. Dan is het vaak simpeler om beide gewoon maar op dezelfde manier te doen: text line voor line parsen en dan maar patternmatchen op het resultaat.
Helaas, mijn applicatie moet lezen en schrijven. Overigens heb ik geen moeite om parsers te schrijven, maar het is vooral uitzoeken wat alle mogelijke resultaten zijn. En dan heb je nog configured-values en running-values die niet perse gelijk hoeven te zijn.

En "faux-parsers" (regex ipv lexers) zijn trouwens heerlijk te schrijven met TDD.
TDD? Daar is een REPL voor. :P

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Jullie noemen nu zaken waarvoor PHP bij uitstek geschikt is: scripten. :+ Ik begrijp het ook goed hoor, ook vaak zat bezig geweest met uitzoeken waar de config van iets nu weer staat na een Ubuntu-upgrade en wat de layout van die file is, of waarvandaan hij gesymlinkt of zelfs gegenereerd is.

Mijn grieven zijn dus met het onderhouden van een grotere applicatie in PHP, die moet praten met meerdere externe systemen zoals databases en web-API's.

Als je een API consumeert waarvan een decimaal veld als float-in-string binnenkomt (want een echte float kan afrondingsverschillen hebben en elk kommagetal in PHP is een float), en je wil dat in de database wel als een decimal(18,2) hebben, dan wil ik dat dat ding van begin tot eind met naam en type aan te duiden is. En dat als je een kolom hernoemt, dat je niet alle 57 plekken moet nalopen waar iemand getQueryBuilder() aanroept om zelf met een DQL-string je oude kolom nog te noemen in een query.

Ook projections (partial selects) zijn uit Doctrine verwijderd bij de volgende versie, onder het mom van "het is een ORM, geen DAL, dus je moet en zal de hele entity (dus alle kolommen) queryen".

Wat als ik alleen m'n ordernummer en het totaalbedrag van alle orderregels wil? Dan moet ik een nieuwe klasse maken per query (want alle kolommen uit je query moeten op de klasse zitten en vice versa), of het wordt, surprise surprise, een array waarbij ik met strings moet gaan indexeren, en de aanroepende code dus moet "weten" dat uit $order["totalAmountExVat"] een string komt, met daarin een decimal.

Ik snap de beslissingen in het hele ecosysteem gewoon niet. Gelukkig ben ik verder weer lekker met .NET bezig. Een verademing dat je niet zomaar een int met een string kunt vergelijken :+ Nog steeds jammer dat men een jaar of twintig geleden heeft besloten dat wel alles by default naar string kan. ;(

[ Voor 6% gewijzigd door CodeCaster op 11-08-2022 22:05 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • +1 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

CodeCaster schreef op donderdag 11 augustus 2022 @ 22:04:
Jullie noemen nu zaken waarvoor PHP bij uitstek geschikt is: scripten. :+ Ik begrijp het ook goed hoor, ook vaak zat bezig geweest met uitzoeken waar de config van iets nu weer staat na een Ubuntu-upgrade en wat de layout van die file is, of waarvandaan hij gesymlinkt of zelfs gegenereerd is.

Mijn grieven zijn dus met het onderhouden van een grotere applicatie in PHP, die moet praten met meerdere externe systemen zoals databases en web-API's.

Als je een API consumeert waarvan een decimaal veld als float-in-string binnenkomt (want een echte float kan afrondingsverschillen hebben en elk kommagetal in PHP is een float), en je wil dat in de database wel als een decimal(18,2) hebben, dan wil ik dat dat ding van begin tot eind met naam en type aan te duiden is. En dat als je een kolom hernoemt, dat je niet alle 57 plekken moet nalopen waar iemand getQueryBuilder() aanroept om zelf met een DQL-string je oude kolom nog te noemen in een query.

Ook projections (partial selects) zijn uit Doctrine verwijderd bij de volgende versie, onder het mom van "het is een ORM, geen DAL, dus je moet en zal de hele entity (dus alle kolommen) queryen".

Wat als ik alleen m'n ordernummer en het totaalbedrag van alle orderregels wil? Dan moet ik een nieuwe klasse maken per query (want alle kolommen uit je query moeten op de klasse zitten en vice versa), of het wordt, surprise surprise, een array waarbij ik met strings moet gaan indexeren, en de aanroepende code dus moet "weten" dat uit $order["totalAmountExVat"] een string komt, met daarin een decimal.

Ik snap de beslissingen in het hele ecosysteem gewoon niet. Gelukkig ben ik verder weer lekker met .NET bezig. Een verademing dat je niet zomaar een int met een string kunt vergelijken :+ Nog steeds jammer dat men een jaar of twintig geleden heeft besloten dat wel alles by default naar string kan. ;(
Helemaal mee eens hoor, daarom neem ik ook maar de pijn om het wel te transformeren naar records. Punt is dat de records nu ook weer naar readonly structs moeten. Zo ben je weer mooi aan het puzzelen. :)

Ik heb nog nooit met PHP gewerkt, denk dat ik het ook maar laat. :)

ToString() is gewoon de type van het object niet? Ik zie daar het probleem niet zo in.

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

CodeCaster schreef op donderdag 11 augustus 2022 @ 22:04:
Jullie noemen nu zaken waarvoor PHP bij uitstek geschikt is: scripten. :+
C# hier ;)

Overigens kan je met elke taal goed scripten zolang je een system(...) hebt, IO-support en string manipulatie. :+

"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


  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
CodeCaster schreef op donderdag 11 augustus 2022 @ 20:53:
[...]

Als je commandline output moet parsen, heb je een OS dat API's mist. Of tsja, zeg, directorylistings van FTP.

Ik snap dat er uitzonderingen zijn, maar wat ik ondertussen in een jaar ben tegengekomen, tot zo ongeveer alle API's van alle webframeworks, zijn het arrays met strings als keys en strings (of inception, weer arrays) als values.

Doctrine-queries, bijvoorbeeld. Leuk dat je entities hebt, maar DQL is een bak string-magie die runtime pas stukgaat. Ook de expressionbuilder gebruikt uiteindelijk alleen maar strings. Dat je IDE dan autocompletion voorstelt binnen die strings op basis van diens parsing van je entity-klassen is schattig, maar ook niet meer dan dat.

Of, ik noem maar wat, het bouwen van een form-element in Symfony:
PHP:
1
2
3
4
5
6
7
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            // ...
            ->add('dueDate', DateType::class, [
                'required' => $options['require_due_date'],
            ])

Welke parameters (naast"required") en options (naast "require_due_date") zijn er nog meer? Geen idee, zie de docs. En als het een onbekende key is, wordt 'ie dan genegeerd of throwt het? Verschilt ook weer per toepassing.

En zoals ik al zei, zo'n beetje alle API-clients werken niet met objecten, terwijl je die tegenwoordig prima kunt genereren uit OpenAPI-specificaties.

Gewoon onbruikbaar, onproductief, onprofessioneel.
O god, dit brengt weer allerlei trauma's terug van toen ik wat Drupal deed tijdens een stage. Die community klopt zichzelf vol trots op de borst dat ze het beter doen als WP en OOP met SOLID gebruiken. En sure, ze doen dingen met classes en design patterns maar ze inderdaad ook net als alle andere php-ers niet van magische strings en arrays afblijven.

Kijk, dingen als een EntityStorageInterface en EntityTypeManagerInterface klinken heel professioneel, totdat je het daadwerkelijk gebruikt en code als dit tegen komt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$storage = \Drupal::service('entity_type.manager')->getStorage('node');

$nids = $storage->getQuery()
  ->condition('type', 'article')
  ->condition('status', 1)
  ->execute();

$items= $storage->loadMultiple($nids);

foreach ($items as $item) {
    $value = $item->get('field_contact')->first()->getValue()['target_id'];
}


Wil je een service uit de service container? Dat is een string. Wil je een storage instance voor een entity type? Dat is een string. (en die hebben gewoon een eigen class btw). Wil je een conditie op een query? Dat is een string voor de property en een whatever voor de value. Een field op een node? Een string. De value van een object referentie? Een array van magische array. De inhoud daarvan? Iets met een magische string key. De value van die key? Een whatever, meestal een int. Etc, etc, etc.

En dit is letterlijk het eerste sample voor een join in de Drupal documentatie:
PHP:
1
2
3
4
// Example of a SELECT query which joins the {node} table to both the {node_field_data} and {users} tables.
$query = $connection->select('node', 'n', $options);
$query->join('node_field_data', 'nfd', 'n.nid = nfd.nid AND nfd.status = :status', array(':status' => 1));
$table_alias = $query->join('users', 'u', 'n.uid = u.uid AND u.uid = :uid', array(':uid' => 5));


Dat is minder leesbaar dan gewone SQL:

SQL:
1
2
3
4
5
SELECT * 
FROM node
JOIN node_field_data nfd ON n.nid = nfd.nid
JOIN users u ON n.uid = u.uid
WHERE nfd.status = :status AND u.uid = :uid


En er komt verder toch geen typed object uitrollen...

[ Voor 3% gewijzigd door RagingPenguin op 11-08-2022 22:36 ]


Acties:
  • +1 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 00:03
RagingPenguin schreef op donderdag 11 augustus 2022 @ 22:31:
[...]


O god, dit brengt weer allerlei trauma's terug van toen ik wat Drupal deed tijdens een stage. Die community klopt zichzelf vol trots op de borst dat ze het beter doen als WP en OOP met SOLID gebruiken. En sure, ze doen dingen met classes en design patterns maar ze inderdaad ook net als alle andere php-ers niet van magische strings en arrays afblijven.

Kijk, dingen als een EntityStorageInterface en EntityTypeManagerInterface klinken heel professioneel, totdat je het daadwerkelijk gebruikt en code als dit tegen komt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$storage = \Drupal::service('entity_type.manager')->getStorage('node');

$nids = $storage->getQuery()
  ->condition('type', 'article')
  ->condition('status', 1)
  ->execute();

$items= $storage->loadMultiple($nids);

foreach ($items as $item) {
    $value = $item->get('field_contact')->first()->getValue()['target_id'];
}


Wil je een service uit de service container? Dat is een string. Wil je een storage instance voor een entity type? Dat is een string. (en die hebben gewoon een eigen class btw). Wil je een conditie op een query? Dat is een string voor de property en een whatever voor de value. Een field op een node? Een string. De value van een object referentie? Een array van magische array. De inhoud daarvan? Iets met een magische string key. De value van die key? Een whatever, meestal een int. Etc, etc, etc.

En dit is letterlijk het eerste sample voor een join in de Drupal documentatie:
PHP:
1
2
3
4
// Example of a SELECT query which joins the {node} table to both the {node_field_data} and {users} tables.
$query = $connection->select('node', 'n', $options);
$query->join('node_field_data', 'nfd', 'n.nid = nfd.nid AND nfd.status = :status', array(':status' => 1));
$table_alias = $query->join('users', 'u', 'n.uid = u.uid AND u.uid = :uid', array(':uid' => 5));


Dat is minder leesbaar dan gewone SQL:

SQL:
1
2
3
4
5
SELECT * 
FROM node
JOIN node_field_data nfd ON n.nid = nfd.nid
JOIN users u ON n.uid = u.uid
WHERE nfd.status = :status AND u.uid = :uid


En er komt verder toch geen typed object uitrollen...
Klinkt alsof je beter Drupal 6 kunt gebruiken :+

PHP:
1
2
3
4
$result = db_query("SELECT * FROM foo WHERE bar = '%s'", $bar);
while ($row = db_fetch_array($result)) {
  ...
}


Verder niks aantrekken van het feit dat de "placeholders" nogal crappy zijn, NULL niet ondersteund wordt, je bij strings zelf de quotes moet plaatsen (ja echt |:( ).

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 01:02

DevWouter

Creator of Todo2d.com

Over strings en data gesproken. Ik vind dit nog het mooiste van Typescript.
En dit is nog simpel. Ik heb ook complete "static typed" json parsers gezien.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type RouteData = PathArgs<"/company/:companyId/customer/:customerId/vendor-user/:vendorUserId">;
                                                //        .
                                                //       /|\
var routeData: RouteData = {                    //        |
    companyId: "",// <-- Strong typed based on URL        |
    customerId: "",// <-- Strong typed based on URL       |
    vendorUserId: "", // <-- Strong typed based on URL    |
};


// The magic 
type PathParams<Path extends string> =
    Path extends `:${infer Param}/${infer Rest}` ? Param | PathParams<Rest> :
    Path extends `:${infer Param}` ? Param :
    Path extends `${infer _Prefix}:${infer Rest}` ? PathParams<`:${Rest}`> :
    never;

type PathArgs<Path extends string> = {
    [K in PathParams<Path>]: string
};

"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


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ach, in php zijn String niet eens String, of hebben ze ondertussen al de mb_* meuk al kunnen integreren?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

DevWouter schreef op donderdag 11 augustus 2022 @ 23:59:
Over strings en data gesproken. Ik vind dit nog het mooiste van Typescript.
En dit is nog simpel. Ik heb ook complete "static typed" json parsers gezien.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type RouteData = PathArgs<"/company/:companyId/customer/:customerId/vendor-user/:vendorUserId">;
                                                //        .
                                                //       /|\
var routeData: RouteData = {                    //        |
    companyId: "",// <-- Strong typed based on URL        |
    customerId: "",// <-- Strong typed based on URL       |
    vendorUserId: "", // <-- Strong typed based on URL    |
};


// The magic 
type PathParams<Path extends string> =
    Path extends `:${infer Param}/${infer Rest}` ? Param | PathParams<Rest> :
    Path extends `:${infer Param}` ? Param :
    Path extends `${infer _Prefix}:${infer Rest}` ? PathParams<`:${Rest}`> :
    never;

type PathArgs<Path extends string> = {
    [K in PathParams<Path>]: string
};
Typescipt heb ik nog nooit mee gewerkt. Voor Json gebruik ik Thoth: https://thoth-org.github.io/Thoth.Json/

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
let fsLinuxDecoder : Decoder<Harddrive> =
    Decode.object (
        fun get ->
        {
            Harddrive.FileSystem = get.Required.Field "filesystem" Decode.string
            Harddrive.Size = get.Required.Field "size" Decode.string
            Harddrive.Used = get.Required.Field "used" Decode.int64
            Harddrive.Mounted = get.Required.Field "mounted_on" Decode.string
            Harddrive.Available = get.Required.Field "available" Decode.int64
            Harddrive.Percent = get.Required.Field "use_percent" Decode.int

        }
    )


Werkt wel mooi, alleen soms wel een gepriegel. Type providers zijn helemaal magisch. :)

Less alienation, more cooperation.


Acties:
  • 0 Henk 'm!

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 20:35

OMX2000

By any means necessary...

DevWouter schreef op donderdag 11 augustus 2022 @ 23:59:
Over strings en data gesproken. Ik vind dit nog het mooiste van Typescript.
En dit is nog simpel. Ik heb ook complete "static typed" json parsers gezien.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type RouteData = PathArgs<"/company/:companyId/customer/:customerId/vendor-user/:vendorUserId">;
                                                //        .
                                                //       /|\
var routeData: RouteData = {                    //        |
    companyId: "",// <-- Strong typed based on URL        |
    customerId: "",// <-- Strong typed based on URL       |
    vendorUserId: "", // <-- Strong typed based on URL    |
};


// The magic 
type PathParams<Path extends string> =
    Path extends `:${infer Param}/${infer Rest}` ? Param | PathParams<Rest> :
    Path extends `:${infer Param}` ? Param :
    Path extends `${infer _Prefix}:${infer Rest}` ? PathParams<`:${Rest}`> :
    never;

type PathArgs<Path extends string> = {
    [K in PathParams<Path>]: string
};
Impressive! Ik denk dat ik nogal achterloop qua syntax/features van Typescript. En ik had dit nooit zelf verzonnen.

Dè developers podcast in je moerstaal : CodeKlets Podcast


Acties:
  • +2 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

🠕 This side up


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 18-09 22:08
Wil ik weten hoeveel cent van de laatste verhoging van den postzegels gespendeerd is om dit hieperdepieper project in elkaar te vlooien ?

Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

gekkie schreef op woensdag 17 augustus 2022 @ 17:53:
Wil ik weten hoeveel cent van de laatste verhoging van den postzegels gespendeerd is om dit hieperdepieper project in elkaar te vlooien ?
Die cryptozegels kosten €9,05 per stuk geloof ik.

🠕 This side up


Acties:
  • +1 Henk 'm!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
gekkie schreef op woensdag 17 augustus 2022 @ 17:53:
Wil ik weten hoeveel cent van de laatste verhoging van den postzegels gespendeerd is om dit hieperdepieper project in elkaar te vlooien ?
Nope

Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Het is ook te triest voor woorden. "Crypto chasers"........

Mooi op tijd ook, de kliek heeft net een nosedive gemaakt. Eigenlijk ook net goed.

Less alienation, more cooperation.


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 18-09 22:08
Koenvh schreef op woensdag 17 augustus 2022 @ 18:33:
[...]

Die cryptozegels kosten €9,05 per stuk geloof ik.
Maar dat zal wel voorgefinancierd zijn met de prijsstelling van mijn gelegenheid tot het likken van het achterwerk van de leden van ons koninklijk huis.

Maar voor €9,05 heb ik dan dus een "bewijs" dat ik ooit een postzegel gekocht heb, vrij prijzige kwitantie.
En dan moet het idee zijn dat mijn kwitantie in de toekomst veel geld waard gaat worden ofzo ?

Dat mevrouw Herna Verhagen er nou eerst eens voor gaat zorgen dat die bezorgers niet meer zelf aftekenen voor bezorging en tegelijkertijd het pakketje niet bij je afleveren. Heb ik wat meer aan als ze dat na al die jaren dat ik het aan haar gevraagd heb eindelijk eens fixt.

[ Voor 44% gewijzigd door gekkie op 17-08-2022 20:24 ]


Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

Sandor_Clegane schreef op woensdag 17 augustus 2022 @ 18:36:
[...]


Het is ook te triest voor woorden. "Crypto chasers"........

Mooi op tijd ook, de kliek heeft net een nosedive gemaakt. Eigenlijk ook net goed.
Crypto chaser klinkt als een heel smerig drankje :+

🠕 This side up


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Koenvh schreef op woensdag 17 augustus 2022 @ 22:06:
[...]

Crypto chaser klinkt als een heel smerig drankje :+
Waar je dan een fatsoenlijke, andere, chaser voor nodig hebt om de smaak uit je muil te krijgen. :)

Less alienation, more cooperation.


Acties:
  • +2 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 18-09 22:08
Tijd voor Buffy the Crypto slayer :9

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

Ik wilde gisteren met Cloudflare Pages experimenteren, maar hun buildopties zijn verrassend slecht gedocumenteerd (als je niet een van de standaard raamwerken gebruikt). Wat ik wilde doen was eigenlijk vrij simpel: LaTeX omzetten naar een PDF, van die PDF weer SVGs maken (als thumbnails), en dat samen met wat HTML en CSS online zetten. Met GitHub Actions is dat vrij makkelijk (ook het naar Cloudflare Pages publiceren), maar met de build options van Cloudflare Pages zelf was het verrassend lastig. Ook draait hun build systeem op Ubuntu Xenial (16.04) en mag je niets als root doen, dus dat helpt ook niet mee.

Het draait nu wel via GitHub Actions, maar ik had toch liever de pipeline puur bij Cloudflare gehad. :/

🠕 This side up


Acties:
  • +1 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
gekkie schreef op woensdag 17 augustus 2022 @ 20:20:
[...]
Dat mevrouw Herna Verhagen er nou eerst eens voor gaat zorgen dat die bezorgers niet meer zelf aftekenen voor bezorging en tegelijkertijd het pakketje niet bij je afleveren. Heb ik wat meer aan als ze dat na al die jaren dat ik het aan haar gevraagd heb eindelijk eens fixt.
Dan moet ze die mensen beter gaan betalen en kwaliteit belangrijker maken dan kwantiteit.

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.


Acties:
  • 0 Henk 'm!

  • phex
  • Registratie: Oktober 2002
  • Laatst online: 17-09 09:59
CodeCaster schreef op donderdag 11 augustus 2022 @ 22:04:


Als je een API consumeert waarvan een decimaal veld als float-in-string binnenkomt (want een echte float kan afrondingsverschillen hebben en elk kommagetal in PHP is een float), en je wil dat in de database wel als een decimal(18,2) hebben, dan wil ik dat dat ding van begin tot eind met naam en type aan te duiden is. En dat als je een kolom hernoemt, dat je niet alle 57 plekken moet nalopen waar iemand getQueryBuilder() aanroept om zelf met een DQL-string je oude kolom nog te noemen in een query.
Je kan zelf data types maken in Doctrine.

Echter jouw specifieke voorbeeld van decimal bestaat gewoon al en is een string data type in Doctrine zodat je absolute precisie behoudt.

Elke andere oplossing zal ergens die route ook moeten bewandelen. Dat is gewoon een limitatie van PHP dat er geen decimal type bestaat.

Dus je enige optie is dan die string in een custom object type te wrappen.
CodeCaster schreef op donderdag 11 augustus 2022 @ 22:04:
Ook projections (partial selects) zijn uit Doctrine verwijderd bij de volgende versie, onder het mom van "het is een ORM, geen DAL, dus je moet en zal de hele entity (dus alle kolommen) queryen".

Wat als ik alleen m'n ordernummer en het totaalbedrag van alle orderregels wil? Dan moet ik een nieuwe klasse maken per query (want alle kolommen uit je query moeten op de klasse zitten en vice versa), of het wordt, surprise surprise, een array waarbij ik met strings moet gaan indexeren, en de aanroepende code dus moet "weten" dat uit $order["totalAmountExVat"] een string komt, met daarin een decimal.
Deze wist ik niet maar als je er over nadenkt logisch.

Als een ORM gebruikt, dan mapt deze altijd zijn results naar objecten. Dat is immers exact wat elk ORM doet. Een half object maakt dan niet veel sense, want dan is je object mogelijk niet meer valide.

Maar veel gevaarlijker is als je dit object opnieuw persist dan zal alle niet geselecteerde data uit je database verwijderd worden. Immers als je hetzelfde object zou gebruiken is voor het ORM niet te bepalen dat het maar een partial select was.

Dus dan blijven er 2 mogelijkheden over:

- Een ander object type definiëren.
- DBAL gebruiken IPV ORM. Voordeel van deze route is dat de syntax gelijk is aan ORM en je data type mapping in stand blijft. (Dus is een decimal een string by default)

Maar wat ik even niet snap is wat al deze klachten met API/webservices te maken heeft. Vanuitgande dat het een JSON data structuur is, dan heb je daar toch exact hetzelfde probleem in JSON?

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
phex schreef op vrijdag 19 augustus 2022 @ 04:18:
[...]

Immers als je hetzelfde object zou gebruiken is voor het ORM niet te bepalen dat het maar een partial select was.[...]
Wat extra state bijhouden over een entiteit kan natuurlijk gewoon.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 00:03
Caelorum schreef op vrijdag 19 augustus 2022 @ 05:37:
[...]

Wat extra state bijhouden over een entiteit kan natuurlijk gewoon.
En dat doet Doctrine ook. Want voor de manier waarop die werkt, zijnde "roep flush() aan en alle gewijzigde entities worden opgeslagen" moet die de initiële state al weten. Anders kan die immers niet bepalen welke entities gewijzigd zijn. (Ja ok: via een active record achtige manier wel, maar dat gebruikt Doctrine niet. En van de entity die je queried krijg je in principe ook altijd een instance van de klasse zelf terug, en geen proxy. Een proxy wordt alleen gebruikt voor children die nog moeten autoloaden, en als een proxy instance bestaat voor een entity en je doet een query die die entity oplevert krijg je ook de eerder gemaakte, proxy, instance terug).

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

phex schreef op vrijdag 19 augustus 2022 @ 04:18:
[...]


Je kan zelf data types maken in Doctrine.

Echter jouw specifieke voorbeeld van decimal bestaat gewoon al en is een string data type in Doctrine zodat je absolute precisie behoudt.

Elke andere oplossing zal ergens die route ook moeten bewandelen. Dat is gewoon een limitatie van PHP dat er geen decimal type bestaat.

Dus je enige optie is dan die string in een custom object type te wrappen.
Het gaat me niet om het type decimal, dat was een voorbeeld. Als je alles op de manier doet zoals veel PHP'ers doen, dan is het ID van de order die je uit een API binnenkrijgt $order["id"] in plaats van $order->id. En de inhoud van dat array-element kan dan een string zijn, of een int, of een fiets, wie zal het weten.

Vervolgens staat er ergens diep in een query-DQL-string "WHERE order_id = :id", in plaats van bijvoorbeeld Linq's .Where(o => o.id == id). En dan wordt het ding ergens aan een form gekoppeld met, je raadt het al, een array van arrays van strings, dus [ "columns" => [ "order_id" => [ "options" => [ ... ] ] ] ].

Het zijn o-ver-al strings. Dat zorgt voor problemen met types en met refactoring.
Deze wist ik niet maar als je er over nadenkt logisch.

Als een ORM gebruikt, dan mapt deze altijd zijn results naar objecten. Dat is immers exact wat elk ORM doet. Een half object maakt dan niet veel sense, want dan is je object mogelijk niet meer valide.

Maar veel gevaarlijker is als je dit object opnieuw persist dan zal alle niet geselecteerde data uit je database verwijderd worden. Immers als je hetzelfde object zou gebruiken is voor het ORM niet te bepalen dat het maar een partial select was.

Dus dan blijven er 2 mogelijkheden over:

- Een ander object type definiëren.
- DBAL gebruiken IPV ORM. Voordeel van deze route is dat de syntax gelijk is aan ORM en je data type mapping in stand blijft. (Dus is een decimal een string by default)

Maar wat ik even niet snap is wat al deze klachten met API/webservices te maken heeft. Vanuitgande dat het een JSON data structuur is, dan heb je daar toch exact hetzelfde probleem in JSON?
Je leest vaker uit een database dan dat je ernaar schrijft, en lezen heeft al snel performanceproblemen als je het over meer dan honderd records en gebruikers hebt en je datalaag niet is gebouwd met performance in het achterhoofd.

De aanname dat je altijd met een heel object werkt, in combinatie met automatische lazy loading van gerelateerde objecten en het feit dat een relationele tabel per definitie nooit plat is maar relaties heeft, zorgt ervoor dat de combinatie van veelgebruikte technieken (Symfony, API Platform, Doctrine) nooit goed kán performen.

Als je een API wil maken die wederom die orders wil exposen met, bijvoorbeeld, een SUM(orderline.quantity), dan gaat die genoemde combinatie van technieken out of the box alle orderregels ophalen per order, en er dan in PHP overheen loopen om de aantallen op te tellen.

Dus dan moet je een custom DataProvider (uit m'n hoofd) schrijven voor API Platform, een custom DTO voor Doctrine (want geen projections), want de aanname van API Platform is dat wat uit je API's komt precies je entities zijn. Dat is om te beginnen al zo'n verschrikkelijk slechte aanname dat ik niet snap dat dat framework zo populair is. Een API-resource is vaak een representatie van een aantal gemapte entities, en zou moeten losstaan van hoe je je data opslaat. Of GraphQL, maar goed.

Einde rant, goedemorgen, koffie?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

De Oostenrijkse variant staat nu ook online, met een video! https://crypto.post.at/ *O*
[Video: https://crypto.post.at/video/Post_Crypto_stamp%204.0_Crawler_1920x1080.mp4]
Straks gaat alle post in de blockchain - stel je het voor, post, maar dan ook digitaal. Een soort e-Post - geniaal! oOo

Ik hoop dat m'n NFT niet in het Suezkanaal vast komt te zitten :+

[ Voor 11% gewijzigd door Koenvh op 19-08-2022 12:16 ]

🠕 This side up


Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Koenvh schreef op vrijdag 19 augustus 2022 @ 12:10:
De Oostenrijkse variant staat nu ook online, met een video! https://crypto.post.at/ *O*
[Video]
Straks gaat alle post in de blockchain - stel je het voor, post, maar dan ook digitaal. Een soort e-Post - geniaal! oOo

Ik hoop dat m'n NFT niet in het Suezkanaal vast komt te zitten :+
Dus er zijn 150.000 "postzegels" uitgebracht, die je voor 9 euro per stuk kunt kopen. Niet dat je ze kunt gebruiken om post te versturen (of krijg je er wel een bruikbare postzegel bij?), maar je hebt dan wel een NFT! En men is ervan overtuigd dat dit een geliefd verzamelobject gaat worden, want fila... Fiatdealers..
filate... postzegelverzamelaars houden van verzamelen!

Kunnen we alsjeblieft stoppen met NFT's?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • +1 Henk 'm!

  • Koenvh
  • Registratie: December 2011
  • Laatst online: 18-09 00:57

Koenvh

Hier tekenen: ______

CodeCaster schreef op vrijdag 19 augustus 2022 @ 12:34:
[...]

Dus er zijn 150.000 "postzegels" uitgebracht, die je voor 9 euro per stuk kunt kopen. Niet dat je ze kunt gebruiken om post te versturen (of krijg je er wel een bruikbare postzegel bij?), maar je hebt dan wel een NFT! En men is ervan overtuigd dat dit een geliefd verzamelobject gaat worden, want fila... Fiatdealers..
filate... postzegelverzamelaars houden van verzamelen!

Kunnen we alsjeblieft stoppen met NFT's?
Hoor ik daar jaloezie op m'n vet coole postzegel? 8) O-)

🠕 This side up


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Koenvh schreef op vrijdag 19 augustus 2022 @ 12:39:
[...]

Hoor ik daar jaloezie op m'n vet coole postzegel? 8) O-)
"Don't hate the player, hate the game" :)

Less alienation, more cooperation.


Acties:
  • +2 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:31
CodeCaster schreef op vrijdag 19 augustus 2022 @ 08:10:
Je leest vaker uit een database dan dat je ernaar schrijft, en lezen heeft al snel performanceproblemen als je het over meer dan honderd records en gebruikers hebt en je datalaag niet is gebouwd met performance in het achterhoofd.
Voor de gemiddelde OLTP-toepassing gaat dat doorgaans wel op ja.
De aanname dat je altijd met een heel object werkt, in combinatie met automatische lazy loading van gerelateerde objecten en het feit dat een relationele tabel per definitie nooit plat is maar relaties heeft, zorgt ervoor dat de combinatie van veelgebruikte technieken (Symfony, API Platform, Doctrine) nooit goed kán performen.

Als je een API wil maken die wederom die orders wil exposen met, bijvoorbeeld, een SUM(orderline.quantity), dan gaat die genoemde combinatie van technieken out of the box alle orderregels ophalen per order, en er dan in PHP overheen loopen om de aantallen op te tellen.

Dus dan moet je een custom DataProvider (uit m'n hoofd) schrijven voor API Platform, een custom DTO voor Doctrine (want geen projections), want de aanname van API Platform is dat wat uit je API's komt precies je entities zijn. Dat is om te beginnen al zo'n verschrikkelijk slechte aanname dat ik niet snap dat dat framework zo populair is. Een API-resource is vaak een representatie van een aantal gemapte entities, en zou moeten losstaan van hoe je je data opslaat. Of GraphQL, maar goed.

Einde rant, goedemorgen, koffie?
Ik ben in de loop der jaren eigenlijk een steeds grotere hekel aan ORM beginnen te krijgen, zeker het meest basale 'genereer 1 op 1 objectjes met gerelateerde objects o.b.v. de tabelstructuur lijkt in het begin heel snel tot resultaat te leiden, maar je loopt al weer heel snel tegen beperkingen aan zoals hetgeen je hier beschrijft met lazy loading. Ik heb in het verleden wel eens met Hibernate gehad dat ik me afvroeg waarom een doodeenvoudige query opeens 20 seconden duurde. Debug logging aan en hij gaat doodleuk 800 sequentiële queries afvuren vanwege lazy loading.
Als ik tegenwoordig nog met SQL datastores werk, dan gebruik ik graag iets als JOOQ. Dat biedt veel van de voordelen die ORMs ook bieden, maar houd je data store / SQL centraal. Een hele makkelijke manier om b.v. in Postgres zo'n structuur met een order en een x aantal orderregels uit een andere tabel op te halen is middels Json object / aggregatiefuncties. Je hebt 1 query die netjes netjes een hierarchisch JSON modelletje uitspuugt en je hoeft in je code alleen maar even te deserializen naar objecten.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

Mugwump schreef op vrijdag 19 augustus 2022 @ 13:02:
[...]


Voor de gemiddelde OLTP-toepassing gaat dat doorgaans wel op ja.


[...]


Ik ben in de loop der jaren eigenlijk een steeds grotere hekel aan ORM beginnen te krijgen, zeker het meest basale 'genereer 1 op 1 objectjes met gerelateerde objects o.b.v. de tabelstructuur lijkt in het begin heel snel tot resultaat te leiden, maar je loopt al weer heel snel tegen beperkingen aan zoals hetgeen je hier beschrijft met lazy loading. Ik heb in het verleden wel eens met Hibernate gehad dat ik me afvroeg waarom een doodeenvoudige query opeens 20 seconden duurde. Debug logging aan en hij gaat doodleuk 800 sequentiële queries afvuren vanwege lazy loading.
Als ik tegenwoordig nog met SQL datastores werk, dan gebruik ik graag iets als JOOQ. Dat biedt veel van de voordelen die ORMs ook bieden, maar houd je data store / SQL centraal. Een hele makkelijke manier om b.v. in Postgres zo'n structuur met een order en een x aantal orderregels uit een andere tabel op te halen is middels Json object / aggregatiefuncties. Je hebt 1 query die netjes netjes een hierarchisch JSON modelletje uitspuugt en je hoeft in je code alleen maar even te deserializen naar objecten.
Ik vind CQRS wel elegant.

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Ik weet het niet helemaal. Ik moet zeggen dat ik het nog nooit in een echte grote productie-omgeving tegen ben gekomen, maar waar ik het wel gezien heb vind ik het..... overkill? De beloftes van strikte scheiding van mutable en immutable data en vaak combinatie met event-sourcing wegen vaak niet op tegen de complexiteit van hoe het hele systeem nu weer werkt. En dat maakt het lastig om devs te vinden.

Maar ik heb er niet genoeg ervaring mee wellicht.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:50
Mugwump schreef op vrijdag 19 augustus 2022 @ 13:02:
[...]


Voor de gemiddelde OLTP-toepassing gaat dat doorgaans wel op ja.


[...]


Ik ben in de loop der jaren eigenlijk een steeds grotere hekel aan ORM beginnen te krijgen, zeker het meest basale 'genereer 1 op 1 objectjes met gerelateerde objects o.b.v. de tabelstructuur lijkt in het begin heel snel tot resultaat te leiden, maar je loopt al weer heel snel tegen beperkingen aan zoals hetgeen je hier beschrijft met lazy loading. Ik heb in het verleden wel eens met Hibernate gehad dat ik me afvroeg waarom een doodeenvoudige query opeens 20 seconden duurde. Debug logging aan en hij gaat doodleuk 800 sequentiële queries afvuren vanwege lazy loading.
Als ik tegenwoordig nog met SQL datastores werk, dan gebruik ik graag iets als JOOQ. Dat biedt veel van de voordelen die ORMs ook bieden, maar houd je data store / SQL centraal. Een hele makkelijke manier om b.v. in Postgres zo'n structuur met een order en een x aantal orderregels uit een andere tabel op te halen is middels Json object / aggregatiefuncties. Je hebt 1 query die netjes netjes een hierarchisch JSON modelletje uitspuugt en je hoeft in je code alleen maar even te deserializen naar objecten.
Vraagje: als PostgreSQL JSON teruggeeft, hoe onthou je dan de datatypes van een database tabel? Ik zou toch wel erg vervelend vinden als alles wordt gecast naar strings, booleans en numbers

Acties:
  • +3 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:31
armageddon_2k1 schreef op vrijdag 19 augustus 2022 @ 13:35:
[...]


Ik weet het niet helemaal. Ik moet zeggen dat ik het nog nooit in een echte grote productie-omgeving tegen ben gekomen, maar waar ik het wel gezien heb vind ik het..... overkill? De beloftes van strikte scheiding van mutable en immutable data en vaak combinatie met event-sourcing wegen vaak niet op tegen de complexiteit van hoe het hele systeem nu weer werkt. En dat maakt het lastig om devs te vinden.

Maar ik heb er niet genoeg ervaring mee wellicht.
Ik werk nu aan een vrij groot systeem dat is opgezet middels event sourcing en losstaande projections. Eigenlijk werkt dat heel fijn. Het is herbouw van bestaande software die nog werkte op het one-size-does-not-fit-all principe. :P
In dat oude systeem gebeurde echt alles op 1 enkele database. Wegschrijven in hoog volume, verschillende soorten APIs, operationele real-time reporting en ga zo maar door. Dan kun je wel als een idioot verticaal blijven schalen, maar je blijft steeds maar weer tegen issues aanlopen en het betekent bakken werk voor mensen die ops werkzaamheden verrrichten.
In plaats van al die verschillende leesactiviteiten op 1 uniforme datastructuur en dus ook op 1 enkele technologie te laten werken hebben we dat nu volledig losgetrokken. Voor de ene toepassing is een elasticsearch cluster met een bepaald datamodel het handigst, voor een ander weer een DynamoDB table met een ander datamodel, voor analyse is vaak iets als Athena prima en ga zo maar door.
Ja je systeem wordt complex, maar je kunt ook meer fragmenteren op die manier. Waar in het oude systeem alles impact had op alles en je dus eigenlijk als developer ook het hele systeem goed moest kennen, kun je nu bijvoorbeeld gewoon een dedicated team / persoon op 1 specifiek onderdeel zetten.

Overigens is CQRS helemaal niet zozeer de opzet waar jij aan refereert en die ik hierboven beschrijf, maar vaak ook gewoon simpelweg dat je voor de R en de CUD twee verschillende modellen gebruikt in je code terwijl je alles nog gewoon netjes in 1 data store / model hebt staan. Ik vind de documentatie van Microsoft over dit soort onderwerpen altijd wel heel helder, ook al doe ik zelf niets met .Net (meer).

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:31
Kalentum schreef op vrijdag 19 augustus 2022 @ 13:35:
[...]


Vraagje: als PostgreSQL JSON teruggeeft, hoe onthou je dan de datatypes van een database tabel? Ik zou toch wel erg vervelend vinden als alles wordt gecast naar strings, booleans en numbers
Dat kan inderdaad een issue zijn, maar eentje die in veel gevallen (waaronder het voorbeeld waarin ik het gebruik) eigenlijk niet relevant is. In dit geval gaat de data sowieso in JSON-formaat via een API terug over de lijn, dus als je datastructuur niet in JSON gerepresenteerd kan worden, dan heb je sowieso een probleem.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20-09 14:03
Mugwump schreef op vrijdag 19 augustus 2022 @ 13:02:
[...]


Ik heb in het verleden wel eens met Hibernate gehad dat ik me afvroeg waarom een doodeenvoudige query opeens 20 seconden duurde. Debug logging aan en hij gaat doodleuk 800 sequentiële queries afvuren vanwege lazy loading.
Ligt dat aan Hibernate, of aan de developer die de HQL / Criteria / Hibernate config gemaakt heeft ? In principe zou je als developer moeten controleren hoe de queries die je ORM gegeneert er uit zien. En indien je een dergelijk n+1 probleem ziet, dat moeten oplossen.
Werken met een ORM heeft zo zijn voordelen, maar er komt ook een nieuwe verantwoordelijkheid bij: niet zomaar vertrouwen op wat voor achterliggende queries er uitgevoerd worden.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 20-09 14:03
Waarom ? Kan je ook wat meer info geven waarom je dat elegant vind ?
Puur CQRS waarbij je verschillende datastores hebt voor reads & writes vind ik in 99% van de gevallen onnodig en te complex.

Dat je verschillende modellen hebt voor lezen & schrijven kan dan weer wel een voordeel zijn.

https://fgheysels.github.io/


Acties:
  • +2 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 20:31
whoami schreef op vrijdag 19 augustus 2022 @ 13:52:
[...]
Ligt dat aan Hibernate, of aan de developer die de HQL / Criteria / Hibernate config gemaakt heeft ? In principe zou je als developer moeten controleren hoe de queries die je ORM gegeneert er uit zien. En indien je een dergelijk n+1 probleem ziet, dat moeten oplossen.
Werken met een ORM heeft zo zijn voordelen, maar er komt ook een nieuwe verantwoordelijkheid bij: niet zomaar vertrouwen op wat voor achterliggende queries er uitgevoerd worden.
Je maakt er gelijk een schuldvraag van, maar dat is nou juist precies hetgeen waar het mij om gaat. In plaats van dat je SQL optimaliseert op de plek waar het hoort (en waar het doorgaans ook veel efficiënter kan) zit dat nu zoveel mogelijk weggeabstraheerd in een framework dat zaken voor je pretendeert te doen, maar als je niet oplet toch vooral problemen veroorzaakt op dat punt. SQL wordt in mijn ogen ook vaak nog wel onderschat of misschien een beetje eng gevonden. Efficiënte SQL schrijven is een vak op zich (heb veel collega's in de BI hoek die dat nog veel beter kunnen dan ik) en dat goed doen kunnen en doen is vaak veel effectiever dan je weer in allerlei bochten wringen om een ORM te laten performen.

"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra


Acties:
  • 0 Henk 'm!

  • Sandor_Clegane
  • Registratie: Januari 2012
  • Niet online

Sandor_Clegane

Fancy plans and pants to match

whoami schreef op vrijdag 19 augustus 2022 @ 13:53:
[...]


Waarom ? Kan je ook wat meer info geven waarom je dat elegant vind ?
Puur CQRS waarbij je verschillende datastores hebt voor reads & writes vind ik in 99% van de gevallen onnodig en te complex.

Dat je verschillende modellen hebt voor lezen & schrijven kan dan weer wel een voordeel zijn.
In de basis al het idee dat lezen en schrijven afzonderlijke acties zijn en dus ook niet via dezelfde lagen hoeven te lopen vind ik een slimme.

Het scheiden van de applicatie in, als het ware, twee "stromen" maakt het naar mijn idee ook gemakkelijker om erover te redeneren. Dat is naar mijn idee een van de belangrijkste eisen aan programmatuur: dat je kunt beredeneren hoe iets werkt en vooral ook een mentaal model kunt maken hoe het reageert als je wijzigingen maakt.

Zoals @Mugwump ook al aangeeft hoeft dit niet in combinatie met Event Sourcing te zijn, maar kun je prima aparte tabellen/materialized views in een SQL datastore hebben die het lezen afhandelen. Misschien op aparte shards etc.

[ Voor 11% gewijzigd door Sandor_Clegane op 19-08-2022 14:37 ]

Less alienation, more cooperation.


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

TIL: het is vroedvrouw, niet voedvrouw. 8)7

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.


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 20:37
En vroedmeester :D

Acties:
  • 0 Henk 'm!

  • bwerg
  • Registratie: Januari 2009
  • Niet online

bwerg

Internettrol

Geen wroetvrouw? Of verwar ik het nou met een verloskundige?

Heeft geen speciale krachten en is daar erg boos over.


Acties:
  • 0 Henk 'm!

  • Lethalis
  • Registratie: April 2002
  • Niet online
Zijn er hier eigenlijk .NET developers die het aandurven om Blazor (WebAssembly) te gebruiken?

Tot nu toe betekende frontend development bij ons een tijdje React of Angular, maar het idee dat je gewoon C# kunt gebruiken klinkt wel erg aantrekkelijk, al is het alleen maar omdat ik nog collega's heb die niet thuis zijn in de huidige technieken en Blazor ervoor zou kunnen zorgen dat ze sneller mee kunnen werken aan nieuwe projecten.

Blazor.. in een grote boog er omheen lopen of toch omarmen? :+

Ask yourself if you are happy and then you cease to be.


Acties:
  • +1 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19:58

Sebazzz

3dp

Wij gebruiken Blazor Server, hier zijn we echt heel tevreden over :) Het werkt simpel, is gemakkelijk te begrijpen en echt een verademing tegenover de complexiteit van de JS SPA frameworks.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
Sebazzz schreef op woensdag 24 augustus 2022 @ 08:02:
Wij gebruiken Blazor Server, hier zijn we echt heel tevreden over :) Het werkt simpel, is gemakkelijk te begrijpen en echt een verademing tegenover de complexiteit van de JS SPA frameworks.
Is het nog steeds zo dat alle state van een app server-side word bijgehouden (en dus elke actie via het network moet lopen en alle DOM updates door de server worden berekend) of zijn ze daar nu vanaf gestapt? De docs zijn daar nu niet echt duidelijk over, het is ook wel weer typisch microsoft om nu al 3 verschillende project types te hebben enzo :P

Acties:
  • 0 Henk 'm!

  • Lethalis
  • Registratie: April 2002
  • Niet online
RagingPenguin schreef op woensdag 24 augustus 2022 @ 08:36:
[...]


Is het nog steeds zo dat alle state van een app server-side word bijgehouden (en dus elke actie via het network moet lopen en alle DOM updates door de server worden berekend) of zijn ze daar nu vanaf gestapt? De docs zijn daar nu niet echt duidelijk over, het is ook wel weer typisch microsoft om nu al 3 verschillende project types te hebben enzo :P
Blazor Server werkt via de server. Het houdt een websocket (Signalr) verbinding open per browser venster. Qua schaalbaarheid is dat een nadeel, maar de kans is groot dat je met de meeste projecten nooit tegen een grens van pakweg 20.000 gelijktijdige connecties aanloopt.

Blazor WebAssembly is volledig client side. Dit heeft wellicht mijn voorkeur. Nadeel is vooral de initial load time, hoewel daar al veel aan verbeterd is. Maar het dwingt je iig om een losse api voor de backend te gebruiken, wat voorkomt dat mensen er 1 grote spaghetti van maken. Daarnaast kun je er een SPA van maken en ook offline werken. Dat schijnt met Blazor Server niet te kunnen.

Voordeel van Blazor Server is wel: als je heel snel een klein project wil opzetten kan dat in 1 project... even harken en klaar.

Laatst nog een presentatie gezien over Blazor WebAssembly waarin ze modules uit Rust gebruiken en sqlite in de browser draaien met een lokale cache. Toch grappig dat dit kan :)

[ Voor 6% gewijzigd door Lethalis op 24-08-2022 08:49 ]

Ask yourself if you are happy and then you cease to be.

Pagina: 1 ... 20 ... 49 Laatste

Let op:
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.