De Devschuur Coffee Corner - Iteratie ⑬ Vorige deel Overzicht

Pagina: 1 ... 33 ... 48 Laatste
Acties:

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

Caelorum schreef op woensdag 4 oktober 2023 @ 19:56:
Ahja de slechter leesbare versie van f# :P

F#:
1
2
3
4
5
6
7
8
9
10
11
let fizzbuzz n = 
    match n % 3, n % 5 with
    | 0, 0 -> "FizzBuzz"
    | 0, _ -> "Fizz"
    | _, 0 -> "Buzz"
    | _, _ -> string n

Seq.initInfinite ((+) 1) 
|> Seq.take 100 
|> Seq.map fizzbuzz 
|> Seq.iter (printfn "%s") 


(Edit: met seq toch altijd net wat netter, maar minder leesbaar)
Die van mij is daarentegen gemakkelijker aan te passen als je bijv. om de 7 getallen ook nog "Pop" moet uitspugen. ;)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
RayNbow schreef op woensdag 4 oktober 2023 @ 22:22:
[...]

Die van mij is daarentegen gemakkelijker aan te passen als je bijv. om de 7 getallen ook nog "Pop" moet uitspugen. ;)
Niet meer van belang in deze tijd. Je vraagt gewoon een LLM om het aan te passen en desnoods herschrijft die het hele stuk :+

Acties:
  • +1 Henk 'm!

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 00:51

F.West98

Alweer 16 jaar hier

Caelorum schreef op woensdag 4 oktober 2023 @ 23:30:
[...]

Niet meer van belang in deze tijd. Je vraagt gewoon een LLM om het aan te passen en desnoods herschrijft die het hele stuk :+
Waarna je tijdens de review een ander LLM vraagt om de change voor jou samen te vatten omdat de diff te groot is om er zelf goed naar te kijken.

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

Caelorum schreef op woensdag 4 oktober 2023 @ 23:30:
[...]

Niet meer van belang in deze tijd. Je vraagt gewoon een LLM om het aan te passen en desnoods herschrijft die het hele stuk :+
Laat maar zien wat een LLM er van bakt. :p

Afbeeldingslocatie: https://tweakers.net/i/fcTjU5Oz5h4bmBtfYjy5DlQ2vK0=/full-fit-in/4000x4000/filters:no_upscale():fill(white):gifsicle():strip_exif()/f/image/6talQKdspa7Q7EUFoC4P6V7I.gif?f=user_large

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
RayNbow schreef op donderdag 5 oktober 2023 @ 07:25:
[...]

Laat maar zien wat een LLM er van bakt. :p

[Afbeelding]
De enige fatsoenlijke manier en dat is nog een conditie aan de match toevoegen ^^

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Er is trouwens een goede manier om een enterprise variant van code te krijgen met chatgtp. Eerst vragen voor een simpelere schrijfwijze van de code en dat blijven herhalen totdat het compleet niet meer leesbaar is en dan vragen om er een leesbaardere variant van te krijgen en dat ook een paar keer doorvragen. En dan krijg je iets als:

F#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 // Checks if a number is divisible by another
let isDivisibleBy divisor number = number % divisor = 0

// Applies a rule to generate a word based on divisibility
let applyDivisibilityRule number (divisor, word) =
    if isDivisibleBy divisor number then word else ""

// Evaluates all divisibility rules for a given number
let evaluateAllDivisibilityRules number rules =
    let result = rules |> List.map (applyDivisibilityRule number) |> String.concat ""
    if result = "" then string number else result

// List of rules to apply: (divisor, word)
let divisibilityRules = [(3, "Fizz"); (5, "Buzz"); (7, "Pop")]

// Main function
let main () =
    // Generate sequence from 1 to 100
    Seq.init 100 ((+) 1)
    // Evaluate each number according to the rules
    |> Seq.map (evaluateAllDivisibilityRules divisibilityRules)
    // Print each result
    |> Seq.iter (printfn "%s")

// Entry point
main ()

Wat zo ongeveer de meest enterprise variant is die je kan maken zonder echt compleet overboord te gaan. Inclusief overbodig commentaar haha

Acties:
  • 0 Henk 'm!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

Caelorum schreef op donderdag 5 oktober 2023 @ 07:46:
Er is trouwens een goede manier om een enterprise variant van code te krijgen met chatgtp. Eerst vragen voor een simpelere schrijfwijze van de code en dat blijven herhalen totdat het compleet niet meer leesbaar is en dan vragen om er een leesbaardere variant van te krijgen en dat ook een paar keer doorvragen. En dan krijg je iets als:

F#:
1
...

Wat zo ongeveer de meest enterprise variant is die je kan maken zonder echt compleet overboord te gaan. Inclusief overbodig commentaar haha
Toch jammer dat ChatGPT de term 'enterprise code' niet echt snapt. Mijn eerdere JS voorbeeld (zoals geschreven door ChatGPT) krijgt hij niet verder terug dan dit:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Define an interface for FizzBuzz results
interface FizzBuzzResult {
  number: number;
  value: string;
}

// Create a class to handle FizzBuzz logic
class FizzBuzz {
  // A static method to generate FizzBuzz results
  static generateFizzBuzzResults(): FizzBuzzResult[] {
    const results: FizzBuzzResult[] = [];

    for (let i = 1; i <= 100; i++) {
      let value = '';

      if (i % 3 === 0) {
        value += 'Fizz';
      }

      if (i % 5 === 0) {
        value += 'Buzz';
      }

      if (value === '') {
        value = i.toString();
      }

      results.push({ number: i, value });
    }

    return results;
  }
}

// Main function to display FizzBuzz results
function displayFizzBuzzResults(results: FizzBuzzResult[]): void {
  for (const result of results) {
    console.log(`Number ${result.number} has the following FizzBuzz value: "${result.value}".`);
  }
}

// Generate FizzBuzz results and display them
const fizzBuzzResults = FizzBuzz.generateFizzBuzzResults();
displayFizzBuzzResults(fizzBuzzResults);

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

Caelorum schreef op donderdag 5 oktober 2023 @ 07:40:
[...]

De enige fatsoenlijke manier en dat is nog een conditie aan de match toevoegen ^^
In de oorspronkelijke code moest je 4 patterns aan de match toevoegen als je het zou willen uitbreiden met "Pop". :p

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
RayNbow schreef op donderdag 5 oktober 2023 @ 07:57:
[...]

In de oorspronkelijke code moest je 4 patterns aan de match toevoegen als je het zou willen uitbreiden met "Pop". :p
Ik ken de regels niet zo goed uit mijn hoofd, maar dit is wat die er van maakt.

F#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 let fizzbuzzpop n = 
    match n % 3, n % 5, n % 7 with
    | 0, 0, 0 -> "FizzBuzzPop"
    | 0, 0, _ -> "FizzBuzz"
    | 0, _, 0 -> "FizzPop"
    | _, 0, 0 -> "BuzzPop"
    | 0, _, _ -> "Fizz"
    | _, 0, _ -> "Buzz"
    | _, _, 0 -> "Pop"
    | _, _, _ -> string n

Seq.initInfinite ((+) 1) 
|> Seq.take 100 
|> Seq.map fizzbuzzpop
|> Seq.iter (printfn "%s")

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
Caelorum schreef op donderdag 5 oktober 2023 @ 07:46:
Er is trouwens een goede manier om een enterprise variant van code te krijgen met chatgtp. Eerst vragen voor een simpelere schrijfwijze van de code en dat blijven herhalen totdat het compleet niet meer leesbaar is en dan vragen om er een leesbaardere variant van te krijgen en dat ook een paar keer doorvragen. En dan krijg je iets als:

F#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 // Checks if a number is divisible by another
let isDivisibleBy divisor number = number % divisor = 0

// Applies a rule to generate a word based on divisibility
let applyDivisibilityRule number (divisor, word) =
    if isDivisibleBy divisor number then word else ""

// Evaluates all divisibility rules for a given number
let evaluateAllDivisibilityRules number rules =
    let result = rules |> List.map (applyDivisibilityRule number) |> String.concat ""
    if result = "" then string number else result

// List of rules to apply: (divisor, word)
let divisibilityRules = [(3, "Fizz"); (5, "Buzz"); (7, "Pop")]

// Main function
let main () =
    // Generate sequence from 1 to 100
    Seq.init 100 ((+) 1)
    // Evaluate each number according to the rules
    |> Seq.map (evaluateAllDivisibilityRules divisibilityRules)
    // Print each result
    |> Seq.iter (printfn "%s")

// Entry point
main ()

Wat zo ongeveer de meest enterprise variant is die je kan maken zonder echt compleet overboord te gaan. Inclusief overbodig commentaar haha
Afgezien van de loze commentaarregels vind ik dit verder gewoon een hele overzichtelijke oplossing, absoluut niet vergelijkbaar met de OO parodie die ik eerder postte. ;)

In mijn ogen anticipeert goed software-ontwerp op 'waarschijnlijke veranderingen' en zorgt het ontwerp ervoor dat deze evolutierichtingen van je software makkelijk te faciliteren zijn. Kijk je naar bovenstaande oplossing, dan heb je de kern van het spelletje gevangen in een makkelijk aanpasbaar lijstje met getallen en bijbehorende woorden.

Als je hierin wilt verenterprisen, dan zeg je 'hey maar nu hebben we hardcoded lijstjes met getal en woord gedefinieerd, dat is niet flexibel. Wat ik eigenlijk nodig heb is een generieke provider interface die me een lijstje rules oplevert en vervolgens specifieke implementaties als een CliProvider, FileProvider, AwsParameterStoreProvider, enzovoort enzovoort. :P

"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!

  • Oon
  • Registratie: Juni 2019
  • Niet online

Oon

RayNbow schreef op donderdag 5 oktober 2023 @ 07:57:
[...]

In de oorspronkelijke code moest je 4 patterns aan de match toevoegen als je het zou willen uitbreiden met "Pop". :p
Dat is dan ook wel weer een goeie oefening voor het niet exponentieel verhogen van het aantal CPU cycles.. Iets waar je tegenwoordig op je werk niet meer over mag klagen 'want we regelen gewoon meer resources' :+

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Mugwump schreef op vrijdag 6 oktober 2023 @ 08:55:
[...]
Afgezien van de loze commentaarregels vind ik dit verder gewoon een hele overzichtelijke oplossing, absoluut niet vergelijkbaar met de OO parodie die ik eerder postte. ;) [...]
Heel eerlijk gezegd vind ik het in talen als f# ook bijzonder lastig om echt zover te gaan als in de meeste OO talen. De taal zelf forceert je naar betere code IMO.
Het eerste stuk code waar dit vanaf komt was net zo goed eenvoudig aan te passen als deze, echter is dit stuk code met zoveel indirecties dat het gewoon lastiger te volgen wordt. Dus in die zin is dit de enterprise variant daarvan :P

Acties:
  • +1 Henk 'm!

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 16-09 09:06

Firesphere

Yoshis before Hoshis

Elastic & Co zijn ook niet meer wat ze geweest zijn...
Documentatie:
code:
1
2
// Every 1000 documents stop and send the bulk request
    if ($i % 1000 == 0) {


En direct daar onder:
There is a 100 document per request limit; each document must be less than 100kb.
8)7

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


Acties:
  • +2 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Nu online

AW_Bos

Liefhebber van nostalgie... 🕰️

Vanavond kreeg ik het plan om even gezellig te klooien met nodejs, en de modules express, socket.io en zmq. Want ik wil treinposities via sockets ophalen. Beter dan steeds een API aan de mouw trekken.

Uiteindelijk blijkt dat Python nodig is om dit te installeren. Prima! Maar later blijkt dat Visual Studio C++ Destop 'weet ik veel wat' nodig is.

Waarom de flying f*ck moet je zo een hoop meuk installeren voor een simpele module? En dan werkt het nóg niet 8)7.

Well, een hoop gedoe en nog niks werkends rijker. Morgen weer verder klooien.

[ Voor 19% gewijzigd door AW_Bos op 11-10-2023 21:59 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Ah, die error... volgens mij werkt het zonder ook wel, maar alleen langzamer dan.

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Nu online

AW_Bos

Liefhebber van nostalgie... 🕰️

Caelorum schreef op woensdag 11 oktober 2023 @ 22:07:
Ah, die error... volgens mij werkt het zonder ook wel, maar alleen langzamer dan.
Ja, zeer irritant. :+
Misschien een reboot, en anders kijk ik nog wel eens. En anders kijk ik op mijn Linuxbak. Volgens mij gaat dat zelfs sneller. :')

Edit:
Oh wacht. WSL to the rescue >:)

[ Voor 6% gewijzigd door AW_Bos op 11-10-2023 22:30 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • +5 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

I'm just going to leave this here...

https://nandgame.com/

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:
  • +2 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Ohhh No no no no no no no.
Sommige mensen hebben hadden todo-listjes weet je.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

@gekkie als je nou even een cpu in elkaar klikt, kun je dat todo lijstje implementeren op die computer :P

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!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
.oisyn schreef op maandag 16 oktober 2023 @ 22:13:
@gekkie als je nou even een cpu in elkaar klikt, kun je dat todo lijstje implementeren op die computer :P
Haha ik heb me bij het "full adder"tje onder het gras toch los kunnen weken :+

Acties:
  • +1 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 17-09 12:10
AW_Bos schreef op woensdag 11 oktober 2023 @ 22:17:
[...]
Oh wacht. WSL to the rescue >:)
Ah, jaaa. Kun je lekker snel een 'docker pull' uitvoeren. ---> connection refused.
Kun je dan lekker uitzoeken waarom dát dan weer niet werkt. Ja, ik weet het wel, corporate, security en alles dichtgooien wat je als developer wilt gebruiken. Maar wat de technologische reden is én het weer bruikbaar te kunnen maken. Dat zijn de redenen voor je frustraties.
>:)

let the past be the past.


Acties:
  • +1 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ugh ik heb nu wel heel veel zin om een project te beginnen wat in de basis gewoon 👆👆 dat is maar dan als enorme sandbox en een fijnere interface.

Jammer genoeg is de naam "nandbox" al in gebruik :'(

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!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
'..SingletonFactory', ik denk dat ik even een collega een kopietje van GoF cadeau moet doen. :P

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


Acties:
  • +1 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Mugwump schreef op woensdag 18 oktober 2023 @ 12:51:
'..SingletonFactory', ik denk dat ik even een collega een kopietje van GoF cadeau moet doen. :P
:') Ben wel benieuwd naar de implementatie, is het een Factory die Singleton is of een Factory die een Singleton van een andere klasse teruggeeft (en dus volledig de plank misslaat)?

[ Voor 4% gewijzigd door MatHack op 18-10-2023 13:06 ]

There's no place like 127.0.0.1


Acties:
  • +2 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
MatHack schreef op woensdag 18 oktober 2023 @ 13:06:
[...]


:') Ben wel benieuwd naar de implementatie, is het een Factory die Singleton is of een Factory die een Singleton van een andere klasse teruggeeft (en dus volledig de plank misslaat)?
Dat laatste dus. Nog afgezien van het feit dat het singleton pattern niet eens thread safe is geïmplementeerd, maar goed. Niet dat dat weer boeit, want het draait toch singlethreaded.

"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!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Waarom zou een fabriek meer dan 1 product moeten maken ? Mag dan wel gangbaar zijn, maar is dat ook als zodanig gedefinieerd ? ;p

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
.oisyn schreef op woensdag 18 oktober 2023 @ 11:45:
[...]
Jammer genoeg is de naam "nandbox" al in gebruik :'(
norbox dan?

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!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Maar kun je met je NOR's dan ook alle logic gate's bouwen ? Neem aan dat dat wellicht de reden is achter de naamgeving, met de NAND kun je alles bakken ?
De NENdoos in het Nederlands dan maar :+

.BOX domains are pending release O-)

[ Voor 11% gewijzigd door gekkie op 18-10-2023 20:25 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

gekkie schreef op woensdag 18 oktober 2023 @ 20:23:
[...]

Maar kun je met je NOR's dan ook alle logic gate's bouwen ?
Yup :)
Ja maar dat lijkt niet op sandbox ;)

[ Voor 33% gewijzigd door .oisyn op 18-10-2023 20:46 ]

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!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Wachten op nand.box dan maar .. zal wellicht een godsvermogen gaan kosten, maarja je moet er iets voor over hebben.

Acties:
  • 0 Henk 'm!

  • DaFeliX
  • Registratie: December 2002
  • Laatst online: 17-09 08:28

DaFeliX

Tnet Devver
gekkie schreef op woensdag 18 oktober 2023 @ 20:23:
[...]

Maar kun je met je NOR's dan ook alle logic gate's bouwen ? [...]
Zodra je met een gate OR, AND en NOT kunt maken, kun je alle logic gates bouwen. Je hoeft dus enkel te bewijzen dat je met je gate deze dingen ondersteund om daarmee complexere gates te maken.

Het idee zit 'm in het feit dat je voor elke complexe gate een truth-table kunt maken, en elke truth-table kun je dmv een formule bouwen, door elke regel dmv OR met elkaar te combineren.

Stel je de volgende truth-table voor (X en Y zijn inputs, Z de output)

XYZ
001
011
101
110


Je zou dit kunnen schrijven als 1 formule:

code:
1
(NOT X AND NOT Y) OR (NOT X AND Y) OR (X AND NOT Y)


Je hoeft dus alleen OR, AND en NOT te kunnen bouwen.

Einstein: Mijn vrouw begrijpt me niet


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

NOT (X AND Y) is korter ;). Dit is overigens precies de NAND gate.

In termen van nand gates:
code:
1
2
3
4
not(x) = nand(x, x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
xor(x, y) = nand(nand(x, nand(x, y)), nand(y, nand(x, y)))


En met nor:
code:
1
2
3
4
not(x) = nor(x, x)
and(x, y) = nor(not(x), not(y))
or(x, y) = not(nor(x, y))
xor(x, y) = not(nor(nor(x, nor(x, y)), nor(y, nor(x, y))))

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!

  • RagingPenguin
  • Registratie: December 2012
  • Niet online
.oisyn schreef op donderdag 19 oktober 2023 @ 10:25:
NOT (X AND Y) is korter ;). Dit is overigens precies de NAND gate.

In termen van nand gates:
code:
1
2
3
4
not(x) = nand(x, x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
xor(x, y) = nand(nand(x, nand(x, y)), nand(y, nand(x, y)))


En met nor:
code:
1
2
3
4
not(x) = nor(x, x)
and(x, y) = nor(not(x), not(y))
or(x, y) = not(nor(x, y))
xor(x, y) = not(nor(nor(x, nor(x, y)), nor(y, nor(x, y))))
Volgens mij is het punt meer dat je waarheidstabellen 1-op-1 kan overzetten naar een formule :P

Acties:
  • +2 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
Voor alle Javascript liefhebbers:

https://github.com/christ...babel-plugin-glowup-vibes

Voor als "ghosted" mooier vindt dan "return null"

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

RagingPenguin schreef op donderdag 19 oktober 2023 @ 13:34:
[...]


Volgens mij is het punt meer dat je waarheidstabellen 1-op-1 kan overzetten naar een formule :P
Uiteraard ;), maar het (sub)doel van nandgame is juist weer zo min mogelijk gates gebruiken :)

Wel een leuk probleem overigens. Voor N inputs en M outputs, vind het minimum aantal gates dat het gewenste resultaat oplevert.

In nandgame zit een stukje waarbij je een logic unit moet maken. Er zijn 4 inputs: p1, p0, x, y, en 1 output. (p1, p0) geven de operatie aan die naar de output gestuur moet worden (resp. x&y, x|y, x^y en !x). Een naieve implementatie gebruikt gewoon de componenten AND, OR, XOR en NOT en dat gooi je vervolgens door een drietal selectors. Als je alles optimaal hebt, dan kost dat in totaal 2+3+4+1+3*3 = 19 nand gates.

Vervang je alles met de daadwerkelijke nand gates, dan zie je dat er wat dingen gedeeld kunnen worden. AND doet een nand(x,y) en XOR ook, dus die kunnen die gate delen. OR doet weer een not(x), en die heb je ook voor NOT zelf nodig. Twee van de selectors werken op p0 dus die doen allebij een not(p). Haal je die dubbele weg dan zit je op 16. Ik heb een oplossing die er 14 gebruikt, ik vraag me af of het efficienter kan.

Toch eens een keer iets intypen dat systematisch alle grafen afloopt :P

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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op woensdag 18 oktober 2023 @ 11:45:
[...]


Ugh ik heb nu wel heel veel zin om een project te beginnen wat in de basis gewoon 👆👆 dat is maar dan als enorme sandbox en een fijnere interface.

Jammer genoeg is de naam "nandbox" al in gebruik :'(
So I made a thing :P
https://oisyn.nl/nandbox/

Dit was even een quick'n'dirty implementatie. Ik zat een beetje te browsen naar JS widgets voor dit soort graphs. Guess what: er bestaan er dus best veel :P. Maar ik ben geen webdevver en ik had eigenlijk helemaal geen zin om allerlei frameworks uit te gaan zitten pluizen. Na het klikken van wat links had ik er eigenlijk al helemaal geen zin meer in.

Toen stuitte ik wat lager op die pagina ineens op egui_node_graph, een Rust lib voor egui, een IM gui die we @work ook gebruiken. De bijbehorende example kun je zelfs out of the box deployen op het web. Dat tickt dan ineens toch wel heel veel persoonlijke boxes:
• Ik kan gewoon Rust typen *O*
• Ik kan egui een beetje onder de knie krijgen
• Wasm was ook al iets waar ik eens naar wilde kijken

In een paar uurtjes tijd dat standaard example verbouwd om dit te maken :D. Hij crasht overigens als je een circulaire connectie maakt (dus probeer maar geen latch of flip flop te bouwen :Y)), maar dat is door de manier hoe het voorbeeld de graph evalueert, dat moet ik allemaal nog gaan ombouwen naar iets fatsoenlijks.

De graph die hij on startup laat zien is overigens een half-adder.

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: 07:38
Awww..moet eerst op reset drukken op de mobiel en vervolgens zie ik maar de helft van je half-adder met geen optie om te scrollen ^^

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja op mobiel werkt het niet al te best blijkbaar :P

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!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 15-09 05:50

Douweegbertje

Wat kinderachtig.. godverdomme

Kalentum schreef op maandag 2 oktober 2023 @ 21:24:
[...]


1 tool to rule them all

Relationele data ? PostgreSQL
schemaless data ? PostgreSQL (JSONB)
Append only data (sensor uitlezingen, logs) ? PostgreSQL (TimescaleDB)

Lekker je relationale data joinen met je timeseriedata en je ongestructureerde data.
Dat is leuk (of zelfs zeer leuk om alles mooi te combineren) totdat je het op grotere schaal draait en dan: ;w (zeker voor logs). Daarbij ben ik zelf iets meer fan van een Thanos over je Prometheus heen voor je lange termijn metrics :)

Overigens misschien als tip/fun: clickhouse > timescale als het gaat om OLAP.

Ik hou zelf in elk geval https://github.com/lancedb/lance in de gaten. Parquet format (wat veel tools gebruiken) is awesome, maar het lost voor mij nog niet alle problemen op.

Acties:
  • 0 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Douweegbertje schreef op maandag 23 oktober 2023 @ 03:16:
[...]


Dat is leuk (of zelfs zeer leuk om alles mooi te combineren) totdat je het op grotere schaal draait en dan: ;w (zeker voor logs). Daarbij ben ik zelf iets meer fan van een Thanos over je Prometheus heen voor je lange termijn metrics :)
Definieer grotere schaal.

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • +4 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 06:53

Damic

Tijd voor Jasmijn thee

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • Douweegbertje
  • Registratie: Mei 2008
  • Laatst online: 15-09 05:50

Douweegbertje

Wat kinderachtig.. godverdomme

Ik vind dat vrij lastig te beantwoorden. Niet om er omheen te draaien of iets dergelijks maar omdat het zo erg afhangt van je type data. Dus als ik puur een aanname doe van unstructured logs, 1TB max?
Voor metrics, dus puur timeseries type data, 50m actieve timeseries? Maar ik ben daar wellicht een beetje biased in. Ik kijk ook naar andere factoren zoals het niet hebben van een monolith en hoe iets horizontaal gemakkelijk kan schalen.

Daarnaast ben ik ook gewoon erg fan van oplossingen die vooral 1 ding goed doen en het daarbij laten. Wellicht om een concreet voorbeeld te geven:
- Kleinere lokale (snelle) disks voor de initiele afhandeling
- Whatever cache oplossing; redis, memcached voor.. cache
- Object storage voor algemene storage, wat over het algemeen ook zoveel goedkoper is
- Overige services die iets aan compaction and pre-compute doen
- Microservices die apart te schalen zijn (read/write path, etc)

Plak dat allemaal samen en je hebt vaak een zeer efficiënte (ook qua kosten) oplossing.


Enfin, ik zag:
Heb van die laatste er momenteel eentje draaien met 67 miljard records.
Dat is ongeveer wat we per 24 uur aan logs doen qua schaal, en eigenlijk is dat nog maar een fractie van wat er in de toekomst bij moet.

Acties:
  • +1 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Kijk tientallen miljarden records per dag is natuurlijk een wat serieuzere schaal. De reden dat ik je de vraag stelde is dat heel heel heel heel heel veel projecten absoluut niet aan die schaal voldoen maar wel alle complexiteit toevoegen van wat jij hierboven allemaal noemt.

Wat jij beschrijft zal ongetwijfeld waarde hebben in projecten waar het toe doet, maar momenteel werk ik bij een project waar we een paar miljard records per maand binnen krijgen via Kafka, een portal beheren die dit allemaal toont en wat complexe business processen voor een paar tienduizend users, waaronder een paar multinationals. En die loggen periodiek allemaal tegelijk eens in.

En dat kan allemaal prima op een simpele Postgres 14 bak en wat NodeJS. Op dit moment is het nog nodeloos complex met overengineerde rotzooi als caching lagen en idioterie van microservices waar dit absoluut niet nodig is. We zijn aan het harmoniseren naar een horizontaal schaalbare (modular) monoliet. En die draait als een tierelier. Mocht het druk zijn dan schalen we van 3 k8s pods naar 5. Big whoop.

[ Voor 10% gewijzigd door armageddon_2k1 op 30-10-2023 21:37 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • +1 Henk 'm!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 01:21

Tribits

Onkruid vergaat niet

// bigBrainFart
letsNotTalkAboutIt();

Serieus, voelt toch wel apart om na al die jaren weer eens wat regeltjes code te schrijven en te debuggen. Misschien vooral omdat een collega van me een klein computer museum op heeft gezet van alle overbodige hardware van zijn zolder. Vooral die Sinclair Spectrum, waar het allemaal mee begonnen is, kijkt me volgens mij voortdurend in de rug. Dat en het feit dat er de nodige voor mij totaal onbekende collega's lotgenoten rondlopen die in niveau variëren van leren omgaan met variabelen tot het zelfstandig ontwerpen van algoritmen en user interfaces. \Wat kan het leven toch vreemd aanvoelen om een uurtje of twee 's nachts.

Master of questionable victories and sheer glorious defeats


Acties:
  • +2 Henk 'm!

  • OverloadOfRed
  • Registratie: Maart 2010
  • Laatst online: 13-09 14:54

OverloadOfRed

Bla, blabla

Achteraf unittests toevoegen aan een project. Waarom moet ik dat ook altijd uitstellen.

Enfin, koffie anyone?

Ik ben chatman, supersnel met MSN. Er is niemand die me niet kent


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Ik ben al 5 dagen bezig om intussen een compleet integratietestproject opnieuw op te zetten. Het begon met een kleine wijziging, maar ik viel van de een in de andere slechte testopzet. Heb intussen al zoveel troep eruit gehaald...
Ik was vandaag helemaal klaar.


En toen mergede iemand nog even nieuwe code... aargh.. gaat me morgen weer een uur of twee kosten.

Acties:
  • 0 Henk 'm!

  • Kriekel
  • Registratie: Maart 2017
  • Laatst online: 17-09 12:23
OverloadOfRed schreef op woensdag 1 november 2023 @ 21:03:
Achteraf unittests toevoegen aan een project. Waarom moet ik dat ook altijd uitstellen.

Enfin, koffie anyone?
Dat je het om 9 uur in de avond post is nog erger, tenzij het om een hobby project gaat.

Lekker.

Acties:
  • +1 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Kriekel schreef op donderdag 2 november 2023 @ 08:57:
[...]


Dat je het om 9 uur in de avond post is nog erger, tenzij het om een hobby project gaat.

Lekker.
No way dat je mij voor een hobby project ooit unit tests zou zien schrijven, veel te lastig om daarna alles te kunnen refactoren.

Acties:
  • 0 Henk 'm!

  • Kriekel
  • Registratie: Maart 2017
  • Laatst online: 17-09 12:23
Hangt van het project af natuurlijk, maar als het daadwerkelijk wordt gebruikt en niet puur is om te leren is het toch echt wel fijn. Ik heb zelf een hobby project waar genoeg complexe en fout gevoelige functies in zitten dat ik er een berg testen op heb gebouwd om te kunnen garanderen dat ik ze niet mol. Het voordeel is dat als het kapot gaat dat het altijd mijn eigen schuld is en niet van een niet bestaande collega.

Acties:
  • +1 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
PrisonerOfPain schreef op donderdag 2 november 2023 @ 10:40:
[...]


No way dat je mij voor een hobby project ooit unit tests zou zien schrijven, veel te lastig om daarna alles te kunnen refactoren.
Het soort retrospectieve unit tests dat in detail codepaden in geschreven code test is ook niet erg zinvol, maar dat is hoe mensen 'unit tests' vaak begrijpen.

Een TDD-achtige aanpak waarbij je zinvolle scenario's bedenkt en daarna code produceert om die scenario's te laten slagen is vaak een veel zinnigere aanpak.

"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!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Mugwump schreef op donderdag 2 november 2023 @ 11:23:
[...]


Het soort retrospectieve unit tests dat in detail codepaden in geschreven code test is ook niet erg zinvol, maar dat is hoe mensen 'unit tests' vaak begrijpen.

Een TDD-achtige aanpak waarbij je zinvolle scenario's bedenkt en daarna code produceert om die scenario's te laten slagen is vaak een veel zinnigere aanpak.
Inderdaad.

@PrisonerOfPain Wat mij op viel als ik TDD hanteer (dus eerst de test) in verhouding met zonder TDD of achteraf tests toevoegen is dat ik amper hoef te refactoren. En de keren dat het toch nodig is blijft het extreem beperkt. Zonder TDD moet ik vaak mega refactors doen.

Dat gezegd te hebben, ik vrees dat veel ontwikkelaars onderschatten hoeveel tijd en energie TDD kost om te leren. De basis kan ik binnen 5 minuten uitleggen en iemand die geen ervaring heeft kan ik binnen 20 minuten overtuigen. Maar iemand die ooit UnitTests geschreven heeft kost mij maanden om te overtuigen.
En het helpt ook niet dat er verschrikkelijk veel slecht advies online staat.

Mijzelf heeft een goeie 6 maanden gekost voordat ik overtuigd was.

"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!

  • Kriekel
  • Registratie: Maart 2017
  • Laatst online: 17-09 12:23
Ik werk zelf voornamelijk aan browser applicaties (.Net blazor) en voor het backend stuk is TDD ideaal. Niet meer 20x je browser openen en door vijf menu's klikken om de code aan te roepen. Maar een berg testen bouwen die alle standaard en nice cases testen. Om alleen nog maar als je bijna klaar bent de browser maar 1 á 2 maal te hoeven openen om te kijken of het ook daadwerkelijk doet wat je dacht dat het doet.

Maar voor frontend spullen heb ik het nooit echt lekker doorgekregen. Ik heb wel wat ervaring met bUnit, maar dat is toch echt een heel stuk meer gedoe dan xUnit testen voor een api.

Het is een bepaalde manier van ontwikkelen, die je moet aanleren, maar ook lang niet altijd binnen bestaande code past. Ik heb ook aan een oud project gewerkt, waar pas vele jaren na aanvang de eerste testen in waren gebouwd en hier betekende TDD of testen op zich altijd refractoren. Op zich was dat juist goed, maar het bracht altijd het risico dat je bestaande code omgooide, zeker als je niet tot in het kleinste detail wist wat de code deed die je refactorde.

Acties:
  • 0 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
DevWouter schreef op donderdag 2 november 2023 @ 13:22:
[...]


Inderdaad.

@PrisonerOfPain Wat mij op viel als ik TDD hanteer (dus eerst de test) in verhouding met zonder TDD of achteraf tests toevoegen is dat ik amper hoef te refactoren. En de keren dat het toch nodig is blijft het extreem beperkt. Zonder TDD moet ik vaak mega refactors doen.

Dat gezegd te hebben, ik vrees dat veel ontwikkelaars onderschatten hoeveel tijd en energie TDD kost om te leren. De basis kan ik binnen 5 minuten uitleggen en iemand die geen ervaring heeft kan ik binnen 20 minuten overtuigen. Maar iemand die ooit UnitTests geschreven heeft kost mij maanden om te overtuigen.
En het helpt ook niet dat er verschrikkelijk veel slecht advies online staat.

Mijzelf heeft een goeie 6 maanden gekost voordat ik overtuigd was.
Ik merk ook vaak kortsluiting bij mensen hoor. "Ja maar een unit test mag maximaal 1 methode testen!!'.

"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!

  • ThomasG
  • Registratie: Juni 2006
  • Nu online
Mugwump schreef op donderdag 2 november 2023 @ 15:00:
[...]


Ik merk ook vaak kortsluiting bij mensen hoor. "Ja maar een unit test mag maximaal 1 methode testen!!'.
Dat ligt er maar net aan. Een unit test hoort geen implementation details te testen. Als functie X onder de motorkap functie Y aanroept, is het dus "fout" als je bij unit tests for functie X ook functie Y gaat lopen testen. Want dat doe je bij unit tests voor functie Y. Maar er zijn verschillende scenario's waarbij je ze juist wel beide in dezelfde test wilt hebben.

Acties:
  • +1 Henk 'm!

  • Mugwump
  • Registratie: Mei 2017
  • Laatst online: 21:30
ThomasG schreef op donderdag 2 november 2023 @ 15:10:
[...]
Dat ligt er maar net aan. Een unit test hoort geen implementation details te testen. Als functie X onder de motorkap functie Y aanroept, is het dus "fout" als je bij unit tests for functie X ook functie Y gaat lopen testen. Want dat doe je bij unit tests voor functie Y. Maar er zijn verschillende scenario's waarbij je ze juist wel beide in dezelfde test wilt hebben.
Ik snap dat het eraan ligt. Ik geef juist aan dat bij sommige mensen het beeld is gaan leven dat de 'unit' in unit test 1 op 1 mapt naar een methode / functie in code. Maar daarmee maak je een harde koppeling tussen implementatie en unit test. Ik zou een unit test eerder willen zien als een 'behavioral unit' oftewel het kleinst mogelijke stukje zinvol gedrag van je software.

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


Acties:
  • +1 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Mugwump schreef op donderdag 2 november 2023 @ 15:00:
[...]


Ik merk ook vaak kortsluiting bij mensen hoor. "Ja maar een unit test mag maximaal 1 methode testen!!'.
Die kortsluiting herken. :)
En die "regel" is zo'n slecht advies waar ik naar verwees. Dat advies ontstaat omdat mensen een patroon zien in code dat goeie tests heeft, maar een unit kan zo klein (statement) of zo groot (applicatie+infrastructuur) zijn als je wilt.

"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!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Kriekel schreef op donderdag 2 november 2023 @ 14:22:
Ik werk zelf voornamelijk aan browser applicaties (.Net blazor) en voor het backend stuk is TDD ideaal. Niet meer 20x je browser openen en door vijf menu's klikken om de code aan te roepen. Maar een berg testen bouwen die alle standaard en nice cases testen. Om alleen nog maar als je bijna klaar bent de browser maar 1 á 2 maal te hoeven openen om te kijken of het ook daadwerkelijk doet wat je dacht dat het doet.

Maar voor frontend spullen heb ik het nooit echt lekker doorgekregen. Ik heb wel wat ervaring met bUnit, maar dat is toch echt een heel stuk meer gedoe dan xUnit testen voor een api.
Frontend is stiekem super complexer. Een simpel login-scherm kent misschien twee velden en een submit-knop, maar er is state management van het veld, state management van het formulier, state management in de javascript-library en vervolgens het versturen. Dan heb je nog client-side input validatie, het updaten van de state bij verkeerd invullen, de state terwijl er interactie is met de server. Wat als er problemen zijn met transport naar de server? Wat als de server een foutmelding geeft? Wat als er een ad-blocker het formulier verbergt? Wat als de gebruiker de gebruikersnaam kopieert en plakt. Hoe werkt het in Chrome? Firefox? Safari? En mobiel?

Persoonlijk doe ik in frontend alles TDD behalve de schermen tenzij ik een goeie reden heb.

"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!

  • ThomasG
  • Registratie: Juni 2006
  • Nu online
DevWouter schreef op donderdag 2 november 2023 @ 15:29:
[...]


Frontend is stiekem super complexer. Een simpel login-scherm kent misschien twee velden en een submit-knop, maar er is state management van het veld, state management van het formulier, state management in de javascript-library en vervolgens het versturen. Dan heb je nog client-side input validatie, het updaten van de state bij verkeerd invullen, de state terwijl er interactie is met de server. Wat als er problemen zijn met transport naar de server? Wat als de server een foutmelding geeft? Wat als er een ad-blocker het formulier verbergt? Wat als de gebruiker de gebruikersnaam kopieert en plakt. Hoe werkt het in Chrome? Firefox? Safari? En mobiel?

Persoonlijk doe ik in frontend alles TDD behalve de schermen tenzij ik een goeie reden heb.
Voor web-based frontends is Cypress geweldig. Ondersteund meerdere browsers. En het maakt screenshots en videos (van de fouten), zodat je snel kunt zien wat er fout gaat.

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Ben zelf meer fan van Playwright.

[ Voor 3% gewijzigd door Caelorum op 02-11-2023 18:31 ]


Acties:
  • 0 Henk 'm!

  • OverloadOfRed
  • Registratie: Maart 2010
  • Laatst online: 13-09 14:54

OverloadOfRed

Bla, blabla

Kriekel schreef op donderdag 2 november 2023 @ 08:57:
[...]


Dat je het om 9 uur in de avond post is nog erger, tenzij het om een hobby project gaat.

Lekker.
Ik had ff een laat dagje omdat ik 's ochtends naar de notaris moest. Gewoon 8 uur gemaakt, en geen seconde meer :P

Ik ben chatman, supersnel met MSN. Er is niemand die me niet kent


Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

ThomasG schreef op donderdag 2 november 2023 @ 15:50:
[...]
Voor web-based frontends is Cypress geweldig. Ondersteund meerdere browsers. En het maakt screenshots en videos (van de fouten), zodat je snel kunt zien wat er fout gaat.
En ook dat zijn unit tests (die ook elke keer de integratie met een browser testen).

En inderdaad zowel Cypress en Playwright zijn geweldig.

Wel twijfel ik of dit “de oplossing” is voor de frontend. Het doet namelijk heel veel en ik heb wat oplossingen gezien die wat minder gewicht hebben, maar ook daar ben ik nog niet overtuigd.

"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!

  • AW_Bos
  • Registratie: April 2002
  • Nu online

AW_Bos

Liefhebber van nostalgie... 🕰️

Zo leer je nog eens bij: Ik heb nooit geweten dat je met MySQL ook rijen in een result kan nummeren, zoals auto-increment dat doet bij een INSERT.

Heb je er veel aan? Mwah niet echt. Maar uit een reeks datums waarop je sorteert is het wel eens handig en fijn om te weten welke bijv. de 22e is.

code:
1
2
3
4
5
SELECT
    ROW_NUMBER() OVER (ORDER BY date_sent) AS nummering,
    name,
    brand
FROM products

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Zou me niet verbazen als een hoop van deze functies ook werken bij MySQL https://learn.microsoft.c...sql?view=sql-server-ver16 en dan kan je helemaal los gaan :D
Window functions dus.. -> https://dev.mysql.com/doc.../en/window-functions.html

[ Voor 17% gewijzigd door Caelorum op 03-11-2023 13:40 ]


Acties:
  • +1 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 08:30
AW_Bos schreef op vrijdag 3 november 2023 @ 12:59:
Zo leer je nog eens bij: Ik heb nooit geweten dat je met MySQL ook rijen in een result kan nummeren, zoals auto-increment dat doet bij een INSERT.

Heb je er veel aan? Mwah niet echt. Maar uit een reeks datums waarop je sorteert is het wel eens handig en fijn om te weten welke bijv. de 22e is.

code:
1
2
3
4
5
SELECT
    ROW_NUMBER() OVER (ORDER BY date_sent) AS nummering,
    name,
    brand
FROM products
En zo zijn er nog veel meee optoes. Ook de standaard aggregate functies kun je loslaten op partitions. Zo kun je bv ook een sum of avg doen om het totaal / gemiddelde tot aan deze rij in de partition (/"set") te berekenen. En AFAIK zijn er ook nog meer functies die weer uniek zijn voor partitions, de zogenaamde window functions. Of rank i.p.v. row_number die bij dubbele waardes dezelfde rank geeft (i.p.v. een uniek row_number). En wat ook wel leuk is is dat je bv de waarde van de vorige rij kunt ophalen, kun je het verschil berekenen. Etc, etc.

[ Voor 5% gewijzigd door RobertMe op 03-11-2023 13:43 ]


Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

AW_Bos schreef op vrijdag 3 november 2023 @ 12:59:
Zo leer je nog eens bij: Ik heb nooit geweten dat je met MySQL ook rijen in een result kan nummeren, zoals auto-increment dat doet bij een INSERT.

Heb je er veel aan? Mwah niet echt. Maar uit een reeks datums waarop je sorteert is het wel eens handig en fijn om te weten welke bijv. de 22e is.

code:
1
2
3
4
5
SELECT
    ROW_NUMBER() OVER (ORDER BY date_sent) AS nummering,
    name,
    brand
FROM products
Vooral handig icm met een UPDATE wanneer de software verwacht dat "Position" geen gaten heeft.
Kan trouwens ook in MsSQL

"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!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 08:30
En ook in PostgeSQL, en ook in SQLite. Sterker nog, bij mijn weten was MySQL de laatste DB van deze drie (PG, SQLite & MySQL) die er ondersteuning voor kreeg. En ik meen dat ik ook eens gezien heb dat het in SQL Server kon voordat het met MySQL kon.
Ergo: alweer een feature waar MySQL hopeloos mee achter loopt/liep.

Acties:
  • 0 Henk 'm!

  • mrdemc
  • Registratie: Juni 2010
  • Laatst online: 16-09 07:20
RobertMe schreef op vrijdag 3 november 2023 @ 13:53:
[...]

En ook in PostgeSQL, en ook in SQLite. Sterker nog, bij mijn weten was MySQL de laatste DB van deze drie (PG, SQLite & MySQL) die er ondersteuning voor kreeg. En ik meen dat ik ook eens gezien heb dat het in SQL Server kon voordat het met MySQL kon.
Ergo: alweer een feature waar MySQL hopeloos mee achter loopt/liep.
In SQL Server kan dit inderdaad ook, daar heb je ook andere vergelijkbare functies op basis van RANK, DENSE_RANK, etc. : https://learn.microsoft.c...sql?view=sql-server-ver16

Heel erg handige functie die voor specifieke use-cases erg veel toegevoegde waarde heeft. vooral i.c.m. partition by en order by.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Oh window functions altijd handig. Werkt ook fijn om onverhoopte duplicates uit je database te verwijderen.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 08:30
mrdemc schreef op vrijdag 3 november 2023 @ 13:54:
[...]


In SQL Server kan dit inderdaad ook, daar heb je ook andere vergelijkbare functies op basis van RANK, DENSE_RANK, etc. : https://learn.microsoft.c...sql?view=sql-server-ver16

Heel erg handige functie die voor specifieke use-cases erg veel toegevoegde waarde heeft. vooral i.c.m. partition by en order by.
Dat MS SQL / SQL Server het kan was mij bekend ja. De twijfel zit in of MS SQL het kon voordat MySQL het kon. En dat meen ik dus van wel.

* RobertMe is MySQL user by day and PostgreSQL user by night. Blijkt toch wel regelmatig dat MySQL hopeloos achter loopt. Ook v.w.b. JSON support etc.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
RobertMe schreef op vrijdag 3 november 2023 @ 13:58:
[...]

Dat MS SQL / SQL Server het kan was mij bekend ja. De twijfel zit in of MS SQL het kon voordat MySQL het kon. En dat meen ik dus van wel.

* RobertMe is MySQL user by day and PostgreSQL user by night. Blijkt toch wel regelmatig dat MySQL hopeloos achter loopt. Ook v.w.b. JSON support etc.
Hmm bij MSSQL hangt het er wel van je database compatibility level of, of je ook de "WINDOW" syntax kun gebruiken waarmee je je window/partition key eenmalig specificeert.

Helaas met bij de MSSQL database waar ik momenteel mee moet werken nog niet het geval. En het lijkt er op dat als je dan 2 window functions opgeeft in je query over dezelfde partition key (en order by), de DB dat vrolijk twee keer langs fietst (ik had de behoefte aan zowel de ROW_NUMBER() als de COUNT() over die window).

Oja en Postgres for the world.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 08:30
Overigens kwam ik er laatst achter dat PG daadwerkelijk kan wat heel vaak gedacht wordt dat er doen.
SQL:
1
SELECT DISTINCT(foo), bar

Is "onzin", selecteert gewoon unieke foo, bar combinaties. De haakjes maken er niet magisch een distinct foo met random bar van. De haakjes zijn gewoon voor expression te groeperen, geen function call.

Wat PG echter kan is:
code:
1
SELECT DISTINCT ON(foo), bar

Dit selecteert wel daadwerkelijk alleen unieke foo values met een willekeurige, eerste, bar value (ORDER BY foo, bar is dus zeer aanbevolen zodat er een gedefinieerde "eerste" is).

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
Ahja.. zoiets deden de oude Sybase versies ook. Degene die dateren van voor T-SQL. Die deden gewoon automatisch group bys.

Select state, count(1) from table

Deed gewoon een automatische group by op state.

En waag het niet een count(*) te doen in plaats van count(1), want die selecteerde doodleuk wel gewoon de hele tabel om vervolgens de count te berekenen. Super snel!

Distinct had daar ook soms een aparte uitwerking.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Heeft mysql z'n group by eigenlijk al gefxied ?
Of hoef je nog steeds niet al je kolommen die je select of in de group by te hebben zitten, of expliciet te aggregeren ?

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
gekkie schreef op vrijdag 3 november 2023 @ 14:26:
Heeft mysql z'n group by eigenlijk al gefxied ?
Of hoef je nog steeds niet al je kolommen die je select of in de group by te hebben zitten, of expliciet te aggregeren ?
Het is gefixt, maar je kan het oude gedrag nog aanzetten als je applicatie dat nodig heeft.

Acties:
  • +1 Henk 'm!

  • mrdemc
  • Registratie: Juni 2010
  • Laatst online: 16-09 07:20
RobertMe schreef op vrijdag 3 november 2023 @ 13:58:
[...]

Dat MS SQL / SQL Server het kan was mij bekend ja. De twijfel zit in of MS SQL het kon voordat MySQL het kon. En dat meen ik dus van wel.

* RobertMe is MySQL user by day and PostgreSQL user by night. Blijkt toch wel regelmatig dat MySQL hopeloos achter loopt. Ook v.w.b. JSON support etc.
Van wat ik kan vinden:
  • In de 2005 versie van MSSQL was het mogelijk
  • In de 5.7 versie van MySQL was het niet mogelijk, die is released in 2015.
Lijkt er dus op dat SQL Server er al een beste tijd ondersteuning voor had voordat MySql er ondersteuning voor kreeg.

Acties:
  • 0 Henk 'm!

  • RobertMe
  • Registratie: Maart 2009
  • Laatst online: 08:30
gekkie schreef op vrijdag 3 november 2023 @ 14:26:
Heeft mysql z'n group by eigenlijk al gefxied ?
Of hoef je nog steeds niet al je kolommen die je select of in de group by te hebben zitten, of expliciet te aggregeren ?
sql_mode ONLY_FULL_GROUP_BY is dat bij mijn weten. Staat sinds 8.0(?) standaard aan, maar kan dus ook nog steeds uit worden gezet.

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Kalentum schreef op vrijdag 3 november 2023 @ 14:32:
[...]
Het is gefixt, maar je kan het oude gedrag nog aanzetten als je applicatie dat nodig heeft.
Als je een extra source of randomness nodig hebt ? :+

Die OVER() die zit er al wel een tijdje in: https://modern-sql.com/caniuse/over_partition_by
maar de named WINDOW: https://learn.microsoft.c...sql?view=sql-server-ver16 dus helaas nog niet zo lang.

En als je dan met een database worstelt met database compatibility level 120, in Azure ...
(waarom zou je gebruik willen maken van 10+ jaar aan database developent ;p)

[ Voor 44% gewijzigd door gekkie op 03-11-2023 15:04 ]


Acties:
  • +1 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online
gekkie schreef op vrijdag 3 november 2023 @ 14:58:
[...]

Als je een extra source of randomness nodig hebt ? :+
Het halve internet draait nog op door handige buurjongetjes in elkaar geplakte PHP code die hun codevoorbeeldjes gevonden hebben op forums uit 2003 en die draait op shared hosting waarbij de maintainers van die shared hosts angstvallig dienen te zorgen dat MySQL 8.2.0 zich nog zo ongeveer net zo gedraagd als MySQL 3.x

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Kalentum schreef op vrijdag 3 november 2023 @ 15:06:
[...]


Het halve internet draait nog op door handige buurjongetjes in elkaar geplakte PHP code die hun codevoorbeeldjes gevonden hebben op forums uit 2003 en die draait op shared hosting waarbij de maintainers van die shared hosts angstvallig dienen te zorgen dat MySQL 8.2.0 zich nog zo ongeveer net zo gedraagd als MySQL 3.x
I know .., de reden dat ik bij opensource projecten, zeker die met plugins, toch regelmatig voor MySql kies ondanks dat Postgres dan ook mogelijk zou moeten zijn.
Als er geen nette abstractie tussen zat, betekende dat elke plugin bakker lekker direct op de DB zat te peek' en en poke' n. Met als gevolg zo'n onvolledige group by ergens in een script met schema changes (uiteraard allemaal losse transacties) waarbij je dan ergens in limbo komt te zitten omdat Postgresql halverwege je script over je onvolledige Group By gaat lopen bokken en mokken. Been there done that got the t-shirt. Dan maar Mysql, of nu dan MariaDB, paar "wees gegroetjes" om je data en weer door :p

Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 07:08
Kalentum schreef op vrijdag 3 november 2023 @ 15:06:
[...]


Het halve internet draait nog op door handige buurjongetjes in elkaar geplakte PHP code die hun codevoorbeeldjes gevonden hebben op forums uit 2003 en die draait op shared hosting waarbij de maintainers van die shared hosts angstvallig dienen te zorgen dat MySQL 8.2.0 zich nog zo ongeveer net zo gedraagd als MySQL 3.x
Klopt, onderhoud (blijven onderhouden) van iets dat ooit gemaakt is gebeurt gewoon te weinig. Als je zorgt dat je e.e.a. bijhoudt valt het qua hoeveelheid changes over het algemeen wel mee. Ik ben zelf ook ooit met die MySQL versie begonnen, maar heb leren query'en op een (meen Oracle) database, waarbij je in ieder geval een FULL GROUP BY moest doen. Op zich ideaal want dan pas je het ook al toe op andere SQL omgevingen.

Moet wel zeggen dat (doordat je iets beter na moet denken wat je wil bereiken) het soms wel gemakkelijk is als je niet een FULL GROUP BY hoefde te doen, maar de resultaten zijn dan wat onvoorspelbaarder in die zin ben ik blij dat ik het goed aangeleerd heb gekregen.
Maargoed, is dit niet met alles zo: Veel scholen / opleidingen leren jongeren ook aan dat je 'variabelen' in SQL kan stoppen (maar vergeten daarbij te zeggen dat dit gevaarlijk is als je dat ongevalideerd doet). Heb ik ooit ruzie om gehad met een docent omdat ik vond (en benoemde) dat het niet goed is om mensen dit zo versimpeld aan te leren.

Acties:
  • +2 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
jbdeiman schreef op vrijdag 3 november 2023 @ 15:21:
Maargoed, is dit niet met alles zo: Veel scholen / opleidingen leren jongeren ook aan dat je 'variabelen' in SQL kan stoppen (maar vergeten daarbij te zeggen dat dit gevaarlijk is als je dat ongevalideerd doet). Heb ik ooit ruzie om gehad met een docent omdat ik vond (en benoemde) dat het niet goed is om mensen dit zo versimpeld aan te leren.
Je bedoeld in je query concat'en ipv je parameters netjes te binden ?
Kennelijk een school die nog nooit little bobby tables als scholier heeft gehad :p

Acties:
  • 0 Henk 'm!

  • jbdeiman
  • Registratie: September 2008
  • Laatst online: 07:08
gekkie schreef op vrijdag 3 november 2023 @ 15:24:
[...]

Je bedoeld in je query concat'en ipv je parameters netjes te binden ?
Kennelijk een school die nog nooit little bobby tables als scholier heeft gehad :p
Zeker, Pseudo (PHP) Code:
PHP:
1
2
3
<?php
mysql_query("INSERT INTO <table> (TextField) VALUES ('" . $_POST['html_post_value'] . "'");
?>


Kijk dat ze zoiets proberen uit te leggen prima, maar geef dan minimaal aan dat het zo niet moet en dat er beter manieren zijn. Prepared statements waren ook niet nieuw meer ofzo zeg maar (hou het even bij PHP in deze, daar ging het toen om).
Maar om dan tegen te gaan sputteren als er een (toentertijd bedweterige :p ) student aangeeft dat dit wel heel gevaarlijk is op deze manier is wel een uiterste.

[ Voor 32% gewijzigd door jbdeiman op 03-11-2023 15:50 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Mjah en vervolgens lang leve alle tutorials die dat qua PHP ook tot in den treure bleven promoten.
En geen enkele input validatie; En geen parameter binding.

Achja heb je gelijk ook de admin functionaliteit in een klap geïmplementeerd /sarcasme


Achja me de afgelopen dagen eens over het fenomeen "Clustered index" zitten verwonderen (vrij aardig gepromoot binnen MSSQL), terwijl ik dit vanuit Postgres niet ken.
En als Postgres ergens geen gebrek aan heeft is het een verscheidenheid aan datatypes en index types, dus waarom zou Postgres het niet hebben, terwijl het nog net niet wordt beschreven als de best thing since sliced bread.
Maar goed het ziet er naar uit dat ze bij MSSQL dus wel wat detals weglaten over wanneer het een voordeel(tje) op zou kunnen leveren. En het lijkt er zelfs op dat als je het combineert met meerdere non-clustered indexen het ook nog wel eens vrij desastreus zou kunnen uitpakken voor je performance.

[ Voor 58% gewijzigd door gekkie op 03-11-2023 16:09 ]


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
@gekkie https://www.postgresql.org/docs/current/sql-cluster.html ;)

(en alle relationele databases hebben het zover ik weet)

oh en het is niet de clustered + meerdere non-clustered indexen die het probleem vormen. Het is meerdere indexen. Want die moeten bijgehouden worden. Dus als jij een insert doet in een tabel, zal ook elk van die indexen bijgewerkt moeten worden*

[ Voor 79% gewijzigd door Caelorum op 03-11-2023 16:27 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Caelorum schreef op vrijdag 3 november 2023 @ 16:23:
@gekkie https://www.postgresql.org/docs/current/sql-cluster.html ;)

(en alle relationele databases hebben het zover ik weet)

oh en het is niet de clustered + meerdere non-clustered indexen die het probleem vormen. Het is meerdere indexen. Want die moeten bijgehouden worden. Dus als jij een insert doet in een tabel, zal ook elk van die indexen bijgewerkt moeten worden*
Dat is eenmalig actie bij Postgres en beklijft niet en je hebt nog gewoon een heap table.
Wat MSSQL doet is dat je geen heap table meer hebt, maar alleen nog een btree index.
En dat betekent dus dat alle andere non-clustered indexen dus geen pointer meer hebben naar een rowid .. maar naar je key in die clustered index, omdat hij die moet kunnen traversen. En dat behoeft dan weer niet altijd even efficient te zijn lijkt het op. En het probleem van het de noodzaak tot en omvang van je overige indexen lijkt daardoor nog wel een paar factoren erger te zijn in sommige gevallen dan bij een heap table met non-clustered indexen.

Maar goed met databases is 'the proof of the pudding' toch ook absoluut in 'the eating' en dan niet alleen de krenten uit de pap :p

[ Voor 16% gewijzigd door gekkie op 03-11-2023 16:50 ]


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
@gekkie indexen in SQL server zijn sowieso b-trees.

De clustered index is alleen niet efficiënt als er grote gaten in zijn gevallen, maar dat zal SQL server ook wel voor je fixen uiteindelijk. Het is vooral zaak om een index te kiezen die niet random is en waar inserts bij voorkeur aan het eind gebeuren en deletes niet random door de index heen.

Maar inderdaad er zijn wat gotchas. Maar de documentatie erover is vrij uitgebreid hoor.

Denk dat het trouwens juist efficiënter is dat het naar de clustered index wijst ipv de rowid. Want anders zou bij elke insert halverwege ofzo alle indexen opnieuw moeten worden gezet. Nu alleen als de entry in de clustered index wijzigt.

[ Voor 21% gewijzigd door Caelorum op 03-11-2023 19:06 ]


Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Caelorum schreef op vrijdag 3 november 2023 @ 19:04:
@gekkie indexen in SQL server zijn sowieso b-trees.
Ja maar in dit geval wordt je data dus alleen maar opgeslagen in een b-tree, die clustered index en niet daarnaast ook in een heap table.
De clustered index is alleen niet efficiënt als er grote gaten in zijn gevallen, maar dat zal SQL server ook wel voor je fixen uiteindelijk. Het is vooral zaak om een index te kiezen die niet random is en waar inserts bij voorkeur aan het eind gebeuren en deletes niet random door de index heen.
Ja maar wanneer heb je dat, een primary key met een default technisch identity column
Ben je dan nog heel veel bent opgeschoten ten opzichte van een heap table met een non-clustered index ?
Maar inderdaad er zijn wat gotchas. Maar de documentatie erover is vrij uitgebreid hoor.
Hmm dan heb ik misschien nog niet de juiste documentatie pagina gevonden :)
Denk dat het trouwens juist efficiënter is dat het naar de clustered index wijst ipv de rowid. Want anders zou bij elke insert halverwege ofzo alle indexen opnieuw moeten worden gezet. Nu alleen als de entry in de clustered index wijzigt.
Ik zou zeggen juist vaker, als je er non-clustered indexen klommen naast hebt die niet geupdate zouden hoeven te worden bij een update, zul je die nu waarschijnlijk wellicht wel vaker moeten updaten omdat het veld wat geupdate is wellicht onderdeel is van de key van die clustered index.

Dus zeg tabel met kolommen a, b, c, d, e. Primary key en default clustered index op (a, b, c)
Non clustered op d en Non clustered op e.
Als je nu up een rij een update doet op veld b, moet je de clustered index updaten en in order houden, en de beide Non-clustered updaten. Terwijl als je geen clustered index had gehad, Je af had gekund met het updaten van je heap-row en je non-clustered index over (a, b ,c) eventueel met d en e als included columns, zodat je die query die je effcient zou maken met je clustered index, ook met je full coverende non-clusterd index zou kunnen beantwoorden. Lijkt exrta storage van een heap table te kosten, maar je indexen op d en e zouden ook kleiner moeten kunnen zijn, want ze hoeven in hun leave-node niet te verwijzen naar (a, b, c) maar alleen naar een row id van de heap table.

Alles is plots afhankelijk geworden van die key van je clustered index ipv dat het naar een rowid kan verwijzen en ik vraag me erg af hoevaak die trade-off dan in het voordeel van die clustered index gaat uitvallen voor tabellen die niet bepaald eenduidig via alleen een primary key gequeried gaan worden.

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:38
gekkie schreef op vrijdag 3 november 2023 @ 19:47:
[...]

Ja maar in dit geval wordt je data dus alleen maar opgeslagen in een b-tree, die clustered index en niet daarnaast ook in een heap table.
[...]
De manier van opslaan van data op disk verandert niet als je een clustered index aanmaakt. Het zit nog steeds allemaal in Pages, of je nou praat over een heap of niet. Het enig wat verandert is of het geordend is opgeslagen of niet.
Ja maar wanneer heb je dat, een primary key met een default technisch identity column
Ben je dan nog heel veel bent opgeschoten ten opzichte van een heap table met een non-clustered index ?
[...]
Soms wel, omdat je ook iets mee controle hebt over welke pages worden geraakt.
Ik zou zeggen juist vaker, als je er non-clustered indexen klommen naast hebt die niet geupdate zouden hoeven te worden bij een update, zul je die nu waarschijnlijk wellicht wel vaker moeten updaten omdat het veld wat geupdate is wellicht onderdeel is van de key van die clustered index. [...]
Alleen als je elke clustered index te groot maakt ja.

Maar het is allemaal usecase afhankelijk. Moet wel zeggen dat er heel vaak al snel standaard een clustered index wordt toegevoegd, mede doordat elke primary key by default een clustered index is.

https://learn.microsoft.c...ide?view=sql-server-ver16

Acties:
  • 0 Henk 'm!

  • gekkie
  • Registratie: April 2000
  • Laatst online: 17-09 19:11
Caelorum schreef op vrijdag 3 november 2023 @ 20:12:
[...]
De manier van opslaan van data op disk verandert niet als je een clustered index aanmaakt. Het zit nog steeds allemaal in Pages, of je nou praat over een heap of niet. Het enig wat verandert is of het geordend is opgeslagen of niet.

Soms wel, omdat je ook iets mee controle hebt over welke pages worden geraakt.
Maar die ordening lijkt me dus (afhankelijk van de situatie) niet bepaald gratis, leuk als je een range moet hebben op je key.
Alleen als je elke clustered index te groot maakt ja.

Maar het is allemaal usecase afhankelijk. Moet wel zeggen dat er heel vaak al snel standaard een clustered index wordt toegevoegd, mede doordat elke primary key by default een clustered index is.

https://learn.microsoft.c...ide?view=sql-server-ver16
Yeps en kennelijk is die default nooit gechallenged, want elke tabel heeft een clustered index, soms met een aardige zwik non-clustered er naast (waarbij er ook de nodige overlap lijkt te zijn, dus nog een hoop potentieel redelijk laag hangend fruit).

Maar wat het voor mij dus wat triggerde was de notie dat Postgres het niet kent en dan is voor het voor mij toch de vraag "waarom niet ?", kennelijk kun je dus ook een best performante database hebben zonder.

Klopt uiteraard dat het usecase afhankelijk is, zoals al gauw in database land, dat maakt het ook wel uitdagend en complex hoe het reageert.
Dus experimenteren en testen (en daarbij niet te veel focussen op een enkele query maar het geheel (aan tradeoffs proberen te blijven overzien).

[ Voor 6% gewijzigd door gekkie op 03-11-2023 20:32 ]


Acties:
  • 0 Henk 'm!

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 16-09 09:06

Firesphere

Yoshis before Hoshis

Even een inhaalslag op de devschuur meetings gemaakt vandaag met een biefstukje:

https://www.id.nlbc.go.jp/CattleSearch/search/agreement_en

Zoek nummer 1413555835 , da's de Wagyu die ik vandaag heb gehad voor dinner :D

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


Acties:
  • +1 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Firesphere schreef op maandag 6 november 2023 @ 11:05:
Even een inhaalslag op de devschuur meetings gemaakt vandaag met een biefstukje:

https://www.id.nlbc.go.jp/CattleSearch/search/agreement_en

Zoek nummer 1413555835 , da's de Wagyu die ik vandaag heb gehad voor dinner :D
Oef, ik ga zuur zijn. Sorry.

spoiler: zuur
Maar toen je het post haf ik gehoopt dat de pagina een belachelijk prijs zou tonen of zo, niet de korte levensloop.


Verder gefeliciteerd met je verjaardag.

"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!

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 16-09 09:06

Firesphere

Yoshis before Hoshis

DevWouter schreef op maandag 6 november 2023 @ 17:05:
[...]

Oef, ik ga zuur zijn. Sorry.

spoiler: zuur
Maar toen je het post haf ik gehoopt dat de pagina een belachelijk prijs zou tonen of zo, niet de korte levensloop.


Verder gefeliciteerd met je verjaardag.
NZ$82 per 100 gram :)

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Oef… Aan de ene kant vind ik dat veel geld. Aan de andere kant ben ik ontzettend benieuwd of het gesmaakt heeft. :9
Hopelijk heeft het goed gesmaakt.

"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!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

.oisyn schreef op zaterdag 21 oktober 2023 @ 04:51:
[...]


So I made a thing :P
https://oisyn.nl/nandbox/

Dit was even een quick'n'dirty implementatie. Ik zat een beetje te browsen naar JS widgets voor dit soort graphs. Guess what: er bestaan er dus best veel :P. Maar ik ben geen webdevver en ik had eigenlijk helemaal geen zin om allerlei frameworks uit te gaan zitten pluizen. Na het klikken van wat links had ik er eigenlijk al helemaal geen zin meer in.

Toen stuitte ik wat lager op die pagina ineens op egui_node_graph, een Rust lib voor egui, een IM gui die we @work ook gebruiken. De bijbehorende example kun je zelfs out of the box deployen op het web. Dat tickt dan ineens toch wel heel veel persoonlijke boxes:
• Ik kan gewoon Rust typen *O*
• Ik kan egui een beetje onder de knie krijgen
• Wasm was ook al iets waar ik eens naar wilde kijken

In een paar uurtjes tijd dat standaard example verbouwd om dit te maken :D. Hij crasht overigens als je een circulaire connectie maakt (dus probeer maar geen latch of flip flop te bouwen :Y)), maar dat is door de manier hoe het voorbeeld de graph evalueert, dat moet ik allemaal nog gaan ombouwen naar iets fatsoenlijks.

De graph die hij on startup laat zien is overigens een half-adder.
Update: https://nandbox.oisyn.nl/

Je kunt subgraphs nog niet editen (vooral vanwege allerlei complicaties die dat met zich meebrengt met nodes die je al geinstantieerd hebt), maar je kunt ze wel in de graph uitvouwen en opnieuw maken. De oude instanties blijven dan gewoon bestaan. Als je voor Edit kiest dan haalt hij ze ook uit de node picker (dus doe eerst dat, dan Replace with child nodes, aanpassingen maken en opnieuw groeperen via het Edit menu in de menu bar)

Check even de paar examples in file -> examples.

Ctrl+drag om de geselecteerde nodes te kopiëren.
Ctrl inhouden bij de drop van een connectie om de opvolgende inputs te verbinden met de opvolgende outputs tussen de twee nodes (als je bijvoorbeeld een 32-bit right shift wil implementeren dan kun je een 31to1 adapter en een 1to32 adapter pakken, en dan de eerst output van de ene met ctrl ingedrukt droppen op de tweede input van de andere, en dan doet ie de rest ook).
Shift+click of shift+drag is nodes aan selectie toevoegen.

Ik zou zeggen dat hij functioneel compleet is, je kan hier in theorie een hele CPU mee bouwen, al zul je niet vrolijk worden van het encoderen van ROM :D

.edit: oh ja, een leuke oefening is een clock signaal te maken. Dat kan met een latch en wat delay nodes, en dan weer terug naar de latch, zodat hij steeds heen en weer flipt.

[ Voor 6% gewijzigd door .oisyn op 09-11-2023 16:41 ]

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!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 01:21

Tribits

Onkruid vergaat niet

Ben ik me daar lekker een spelletje aan het programmeren in Javascript met het idee het in de toekomst misschien nog eens ergens op een website te hosten. Kom ik er achter dat er aan beide kanten van de oceaan rechtszaken gevoerd zijn over de auteursrechten over dit schijnbaar simpele spelletje. Partijen die hun IP verdedigden waren MB en Hasbro, niet de minsten dus. Positieve is dan wel weer dat MB hier volgens mij grotendeels ongelijk heeft gekregen. Daarnaast heeft mijn variant inmiddels een geheel originele naam (je kan het wel aan mij overlaten als het niet gek genoeg moet zijn) en diverse eigenschappen parametriseerbaar heeft zodat er toch wel iets origineels is ontstaan. Zag daarnaast in de Android store ook diverse varianten, maar dat zegt weinig omdat dat volgens mij een moeras van plagiaat is. Maandag is mijn mentor er weer, even vragen hoe die er tegenaan kijkt.

[ Voor 1% gewijzigd door Tribits op 10-11-2023 19:58 . Reden: Zei ik dat nou echt? ]

Master of questionable victories and sheer glorious defeats


Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

Tribits schreef op vrijdag 10 november 2023 @ 19:55:
Ben ik me daar lekker een spelletje aan het programmeren in Javascript met het idee het in de toekomst misschien nog eens ergens op een website te hosten. Kom ik er achter dat er aan beide kanten van de oceaan rechtszaken gevoerd zijn over de auteursrechten over dit schijnbaar simpele spelletje. Partijen die hun IP verdedigden waren MB en Hasbro, niet de minsten dus. Positieve is dan wel weer dat MB hier volgens mij grotendeels ongelijk heeft gekregen. Daarnaast heeft mijn variant inmiddels een geheel originele naam (je kan het wel aan mij overlaten als het niet gek genoeg moet zijn) en diverse eigenschappen parametriseerbaar heeft zodat er toch wel iets origineels is ontstaan. Zag daarnaast in de Android store ook diverse varianten, maar dat zegt weinig omdat dat volgens mij een moeras van plagiaat is. Maandag is mijn mentor er weer, even vragen hoe die er tegenaan kijkt.
Allereerst Not a lawyer.
Ten tweede altijd verstandig om advies in te winnen bij experts (dus niet ik).
Ten derde wees voorzichtig met details als het project in opdracht van een ander is en je te maken hebt met geheimhoudingsplicht.

Maar op gameplay elementen alleen kan je geen intellectueel recht krijgen. Dus zolang het geen volledige kloon is zijn er veel opties. IP gaat ook vaker over merkrecht of beeltenissen. Zoals een blauwe egel of het woord “Edge”.

Verder gebruik je de term “Plagiaat” als kapstok term? Denk ik? Als je echt plagiaat pleegt dan weet je het vaak wel. ;)

"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!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 01:21

Tribits

Onkruid vergaat niet

DevWouter schreef op vrijdag 10 november 2023 @ 21:41:
[...]


Allereerst Not a lawyer.
Ten tweede altijd verstandig om advies in te winnen bij experts (dus niet ik).
Ten derde wees voorzichtig met details als het project in opdracht van een ander is en je te maken hebt met geheimhoudingsplicht.
Misschien zo hier en daar al aangegeven, maar ik bevind me in een vrij unieke setting bij een NGO (om het zo maar even te noemen). Aan de ene kant zijn we met handen en voeten gebonden, aan de andere kant zijn we volledig vrij om te gaan en staan waar we maar willen.
Maar op gameplay elementen alleen kan je geen intellectueel recht krijgen. Dus zolang het geen volledige kloon is zijn er veel opties. IP gaat ook vaker over merkrecht of beeltenissen. Zoals een blauwe egel of het woord “Edge”.
Zoiets kwam ook naar voren uit de rechtszaak die MB aan had gespannen. De rechter oordeelde dat het spelletje (ik laat hier even de naam achterwege) met een bord en steentjes zo triviaal was dat er geen rechten aan ontleend konden worden.
Verder gebruik je de term “Plagiaat” als kapstok term? Denk ik? Als je echt plagiaat pleegt dan weet je het vaak wel. ;)
Eh, plagiaat in gradaties. Ik heb even niet de relevante artikelen bijdehand maar er zijn wel programmeurs geweest die een aardige blog hebben gemaakt over dit soort perikelen. Soms worden domweg gerelabelde versies van een applicatie door een andere partij in de store geplaatst met de wetenschap dat ze zich in een vrijwel ongrijpbare jurisdictie bevinden. Andere keren gaat het om meer om conceptuele kopieën of puur IP kwesties. Punt is een beetje dat ik op het moment verbonden ben aan een NGO (of sorts) en dat mogelijk het hele project de nek omgedraaid wordt als zich juridische conflicten voor blijken te doen.

Overigens hebben we zo links en rechts ook wel wat materialen aangeschaft die aan kunnen tonen dat er bij bepaalde bord en kaartspelletjes sprake is van prior art, dus dat is ook iets waarmee we dan weer kunnen werken. Zoals aangegeven is het een redelijk uniek project en veelal werk in ontwikkeling. Ik laat de specifics even achterwege, ik ben zelf niet in een positie om de publiciteit te zoeken. Zoals gezegd: maandag weer even verder kijken.

Master of questionable victories and sheer glorious defeats


Acties:
  • +2 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Praatje ingestuurd naar Kotlin Confs request for speakers. Hopelijk word ik uitgenodigd!

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • DevWouter
  • Registratie: Februari 2016
  • Laatst online: 04:41

DevWouter

Creator of Todo2d.com

@Tribits
Zonder context altijd lastig in te schatten, maar ik wens jou en de NGO in elk geval veel sterkte en wijsheid.

"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!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 01:21

Tribits

Onkruid vergaat niet

DevWouter schreef op zondag 12 november 2023 @ 20:55:
@Tribits
Zonder context altijd lastig in te schatten, maar ik wens jou en de NGO in elk geval veel sterkte en wijsheid.
Ja, sorry voor vaguebooking. Komt enerzijds omdat ik het moeilijk vind om op mijn eigen situatie in te gaan en anderzijds omdat er op het moment nog weinig te tonen valt, het is werk in uitvoering. Met de tijd zal het spul wel op GitHub gezet worden en dan wordt waarschijnlijk wat meer duidelijk.

Juridisch lijkt het overigens allemaal nog al mee te vallen, wat ik zo uit de (zwaar gedateerde) uitspraak opmaak is dat je wel erg ver moet gaan in je plagiaat voordat er daadwerkelijk sprake is van een auteursrechtenschending. En mocht het al zover komen dan is er eigenlijk altijd nog wel een kans om het betreffende materiaal offline te halen.

Master of questionable victories and sheer glorious defeats

Pagina: 1 ... 33 ... 48 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.