Ik zei dan ook minstens. Het gaat hier ook om 2 nummers, niet om 1 nummer
Ik vind het dan toch netter om dat getal ook in een alt-tekst te zetten. Dan kunnen blinden de captcha ook goed gebruiken.rwb schreef op vrijdag 24 oktober 2008 @ 16:12:
De vraag is of de captcha visueel ook 96334 bevatte of dat het alleen een identifier was voor de server om te herleiden over welke captcha het gaat. Als dat het geval is dan zou het geen probleem zijn ( Mits ze niet hergebruikt worden)
💶 Wil je in een vrije democratie blijven wonen? Betaal dan voor nieuws. 📰
❌ ceterum censeo contra factiones ad dextrum extremum esse pugnandum. 🙅🏻♂️
En spambots ook. Handig hè. Er zijn voor diverse webtalen libraries beschikbaar die tekst naar gesproken tekst in bijv. MP3 formaat kunnen omzetten. Dat is een betere optie.ucchan schreef op vrijdag 24 oktober 2008 @ 20:35:
[...]
Ik vind het dan toch netter om dat getal ook in een alt-tekst te zetten. Dan kunnen blinden de captcha ook goed gebruiken.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Totdat je internationaal wilt gaan... Of je te maken hebt met mensen die al het geluid uitzetten behalve hun screenreader om geen last te hebben van flash-reclames etc... Of als je niet ongelimiteerde bandbreedte hebt...Sebazzz schreef op vrijdag 24 oktober 2008 @ 20:46:
[...]
En spambots ook. Handig hè. Er zijn voor diverse webtalen libraries beschikbaar die tekst naar gesproken tekst in bijv. MP3 formaat kunnen omzetten. Dat is een betere optie.
IMHO zijn screenreaders echt the way to go for blinden, dat is een eenduidige stem etc speciaal gemaakt voor blinden / slechtzienden. Denk aub niet dat je met een mp3'jes als webdesigner iets oplost, volgens mij maak je het alleen maar ontoegankelijker hoe goed je bedoelingen ook zijn.
Alt-tekst is bedoeld als redelijk universeel alternatief. Gebruik dit dan ook gewoon en ondervang de spambots op andere manieren dan een geaccepteerde werkwijze te slopen...
Maar het idee van een captcha is natuurlijk juist dat niet makkelijk door een machine gelezen kan worden zodat spambots niet automatisch dingen kunnen doen. Het leesbaar maken voor een screenreader maakt dat hele concept onbruikbaar.Gomez12 schreef op vrijdag 24 oktober 2008 @ 21:28:
[...]
Totdat je internationaal wilt gaan... Of je te maken hebt met mensen die al het geluid uitzetten behalve hun screenreader om geen last te hebben van flash-reclames etc... Of als je niet ongelimiteerde bandbreedte hebt...
IMHO zijn screenreaders echt the way to go for blinden, dat is een eenduidige stem etc speciaal gemaakt voor blinden / slechtzienden. Denk aub niet dat je met een mp3'jes als webdesigner iets oplost, volgens mij maak je het alleen maar ontoegankelijker hoe goed je bedoelingen ook zijn.
Alt-tekst is bedoeld als redelijk universeel alternatief. Gebruik dit dan ook gewoon en ondervang de spambots op andere manieren dan een geaccepteerde werkwijze te slopen...
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Het gaat een beetje offtopic, maar wellicht is het dan een goed idee om de alt-tekst wat uitgebreider te maken dan enkel de tekst die je moet typen. Voorbeelden:
alt="Type negen zes drie drie vier in getallen"
alt="bereken 12+96334-12" (of is deze te moeilijk voor mensen?)
alt="Type negen zes drie drie vier in getallen"
alt="bereken 12+96334-12" (of is deze te moeilijk voor mensen?)
De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!
Anoniem: 178962
Het lijkt me niet dat dit het juiste topic is voor een captcha discussie (plus dat we die al zoveel gehad hebben).
Ten eerste: nee, het gaat wel degelijk om één getal. Het eerste getal is willekeurig, het tweede getal moet hetzelfde zijn. Vergelijk het met het gooien van twee dobbelstenen: de kans dat je twee dezelfde cijfers gooit is 1/6, niet 1/36. De kans dat je twee keer 6 gooit is wél 1/36 (maar de kans dat je twee dezelfde cijfers gooit is (de kans dat je twee keer 1 gooit) + (de kans dat je twee keer 2 gooit) + ... + (de kans dat je twee keer 6 gooit) = 6*(de kans dat je twee keer 1 gooit)=1/6BalusC schreef op vrijdag 24 oktober 2008 @ 20:04:
Ik zei dan ook minstens. Het gaat hier ook om 2 nummers, niet om 1 nummer
Verder: Hoyle's fallacy. Dat de kans klein is dat het gebeurt betekent nog niet dat het daarom geen toeval is!
Reken er maar op dat er een hoop mensen zijn die dat te moeilijk vinden.pietje63 schreef op zaterdag 25 oktober 2008 @ 16:46:
alt="bereken 12+96334-12" (of is deze te moeilijk voor mensen?)
Hoyle's gaat over evolutie theorie en dat argument, niet over algemene kansrekening. Het zou eerder een Prosecutors fallacy zijn.ValHallASW schreef op zaterdag 25 oktober 2008 @ 17:05:
Verder: Hoyle's fallacy. Dat de kans klein is dat het gebeurt betekent nog niet dat het daarom geen toeval is!
[ Voor 19% gewijzigd door Zoijar op 25-10-2008 17:39 ]
.oisyn suggereerde dus dat dit niet het geval isValHallASW schreef op zaterdag 25 oktober 2008 @ 17:05:
het tweede getal moet hetzelfde zijn
Dat is niet wat ValHallASW bedoelt. Het tweede getal (rand) moet hetzelfde zijn aan het eerste (seed), om de test (rand == seed) te laten slagen. De kans dat rand == seed is gelijk aan 1 op rand_length (zolang seed_length <= rand_length), en niet 1 op rand_length * seed_length oid.
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.
Er lopen discussies door elkaar. Ik had het gewoon over dat stukje HTML code van KabouterSuper waarbij met geen woord over diens werking danwel een randomgenerator werd gerept. That's all.
Kwam dit net tegen:
Java:
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
45
46
47
48
49
50
51
52
53
54
55
| /** * Vergelijk 2 objecten met elkaar * * @param a * @param b * @param found * @return true als gelijk. */ @SuppressWarnings("unchecked") private boolean vergelijk(Object a, Object b, boolean found) { if (found) { if (a != null && b != null) { if (a instanceof Integer) { if (((Long) a).intValue() == ((Long) b).intValue()) { return true; } } if (a instanceof String) { if (((String) a).equals(b)) { return true; } } if (a instanceof Double) { if (((Double) a).doubleValue() == ((Double) b).doubleValue()) { return true; } } if (a instanceof Set) { if (((Set) a).size() == ((Set) b).size()) { return true; } } } else if (a == null && b != null && b instanceof Set) { if (((Set) b).size() == 0) { return true; } } return a == null && b == null; } return found; } |
Naast dat het een draak van een methode is vermoed ik ook nog eens dat de toegevoegde found een soort kut oplossing is voor het halverwege afkappen wanneer iets al gevonden is.
iets als:
iets als:
Java:
1
2
3
4
| found = false; for(Object o : someCollection) { found = vergelijk(o,subject,found); } |
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Comparable interface??
Sv3n schreef op woensdag 29 oktober 2008 @ 09:56:
Kwam dit net tegen:
Java:
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 45 46 47 48 49 50 51 52 53 54 55 /** * Vergelijk 2 objecten met elkaar * * @param a * @param b * @param found * @return true als gelijk. */ @SuppressWarnings("unchecked") private boolean vergelijk(Object a, Object b, boolean found) { if (found) { if (a != null && b != null) { if (a instanceof Integer) { if (((Long) a).intValue() == ((Long) b).intValue()) { return true; } } if (a instanceof String) { if (((String) a).equals(b)) { return true; } } if (a instanceof Double) { if (((Double) a).doubleValue() == ((Double) b).doubleValue()) { return true; } } if (a instanceof Set) { if (((Set) a).size() == ((Set) b).size()) { return true; } } } else if (a == null && b != null && b instanceof Set) { if (((Set) b).size() == 0) { return true; } } return a == null && b == null; } return found; }
Niet eens nodig. Alle gebruikte objecten implementeren gewoon equals. Het enige verschil is de manier waarop met sets omgegaan wordt. Daarbij wordt alleen gekeken of beide evenveel elementen bevatten en staat een lege set gelijk aan een null (onafhankelijk van het type van het null object)Webgnome schreef op woensdag 29 oktober 2008 @ 10:33:
Comparable interface??
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ik kom net dit tegen in een oud stukje code van een ex-stagair:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| /** * Checks for a space * */ private function has_space($text) { if( ereg(" ",$text) ) { return true; } return false; } // end func has_space |
Anoniem: 140111
Behalve twee returns, wat je slordig kunt vinden, wat is hier fout aan?Maghiel schreef op woensdag 29 oktober 2008 @ 15:58:
Ik kom net dit tegen in een oud stukje code van een ex-stagair:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 /** * Checks for a space * */ private function has_space($text) { if( ereg(" ",$text) ) { return true; } return false; } // end func has_space
(ik ken de php api niet echt)
Anoniem: 58827
Denk dat hij bedoeld datAnoniem: 140111 schreef op woensdag 29 oktober 2008 @ 16:07:
[...]
Behalve twee returns, wat je slordig kunt vinden, wat is hier fout aan?
(ik ken de php api niet echt)
code:
1
2
3
4
5
| <?php if(ereg(" ",$text)){ /// uit te voeren code } ?> |
Gewoon ook werkt.
Of het feit dat er een regular expression engine opgestart word om te kijken of er een spatie voorkomt in een string.Anoniem: 58827 schreef op woensdag 29 oktober 2008 @ 16:12:
[...]
Denk dat hij bedoeld dat
Gewoon ook werkt.
Er is niets mis met die twee returns, maar wat is het verschil tussen dit doen:Anoniem: 140111 schreef op woensdag 29 oktober 2008 @ 16:07:
[...]
Behalve twee returns, wat je slordig kunt vinden, wat is hier fout aan?
(ik ken de php api niet echt)
PHP:
1
2
3
4
| if (ereg(" ",$text)) { //uit te voeren code } |
en
PHP:
1
2
3
4
| if (has_space($text)) { // uit te voeren code } |
Das net zoiets doen als zo'n functie maken
PHP:
1
2
3
4
| function outputSomething($string) { echo $string; } |
iddAnoniem: 58827 schreef op woensdag 29 oktober 2008 @ 16:12:
[...]
Denk dat hij bedoeld dat
code:
1 2 3 4 5 <?php if(ereg(" ",$text)){ /// uit te voeren code } ?>
Gewoon ook werkt.
en dat ook iddOf het feit dat er een regular expression engine opgestart word om te kijken of er een spatie voorkomt in een string.
[ Voor 8% gewijzigd door Maghiel op 29-10-2008 16:19 ]
Wat PrisonerOfPain zegt lijkt me. Plus dat je het ook zo kan schrijven:
edit: Ik vind een HasSpace functie niet zo heel erg. Tuurlijk kan je het in 1 keer schrijven, maar dit is weer een puntje voor de netheid. (al snap ik dat genoeg mensen het direct zullen doen)
PHP:
1
2
3
4
| private function has_space($text) { return ereg(" ",$text); } |
edit: Ik vind een HasSpace functie niet zo heel erg. Tuurlijk kan je het in 1 keer schrijven, maar dit is weer een puntje voor de netheid. (al snap ik dat genoeg mensen het direct zullen doen)
[ Voor 37% gewijzigd door !null op 29-10-2008 16:24 ]
Ampera-e (60kWh) -> (66kWh)
Het verschil is dat bij de tweede variant veel duidelijker is wat het doet, plus dat het gemakkelijker aan te passen is als je de regex wilt veranderen, om bijv. ook naar andere whitespaces te zoeken.Maghiel schreef op woensdag 29 oktober 2008 @ 16:19:
[...]
Er is niets mis met die twee returns, maar wat is het verschil tussen dit doen:
PHP:
1 2 3 4 if (ereg(" ",$text)) { //uit te voeren code }
en
PHP:
1 2 3 4 if (has_space($text)) { // uit te voeren code }
Ik vind wat jij zegt dan ook absoluut geen slecht programmeervoorbeeld. Daarnaast is het weliswaar een beetje overkill om een reguliere expressie te gebruiken als je ook gewoon strstr() kunt doen die een stuk sneller is, maar fout is het echter niet, en de regex kan makkelijk uitgebreid worden om ook naar andere whitespaces (zoals tabs en returns) te zoeken.
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.
Inderdaad, al blijft het onzin om handmatig true of false te returnen.
Ampera-e (60kWh) -> (66kWh)
Klopt, maar dat gaat hier niet op, want eregi() returnt niet of er een match is maar hoeveel van de string gematcht is. Je zou 'm natuurlijk kunnen casten naar bool.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik ben ook de enige die deze ClassCastException waiting to happen heeft gezien?Sv3n schreef op woensdag 29 oktober 2008 @ 09:56:
Java:
1 2 3 if (a instanceof Integer) { if (((Long) a).intValue() == ((Long) b).intValue())
Inderdaad. Een strpos lijkt me een stukje handiger / efficienter in dit geval, als je toch een aparte functie wilt hebben.PrisonerOfPain schreef op woensdag 29 oktober 2008 @ 16:18
Of het feit dat er een regular expression engine opgestart word om te kijken of er een spatie voorkomt in een string.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Ik denk dat hij dat bedoeltAnoniem: 58827 schreef op woensdag 29 oktober 2008 @ 16:12:
Denk dat hij bedoeld dat [code=]<?php
Functie op zich is prima, maar bij een scripted language krijg je een performance los.
Ok, das waar en dat geldt ook voor de betere vervangings functies die hier gesuggereerd worden. Wat zou jij dan doen? '== true' ?.oisyn schreef op woensdag 29 oktober 2008 @ 17:10:
Klopt, maar dat gaat hier niet op, want eregi() returnt niet of er een match is maar hoeveel van de string gematcht is. Je zou 'm natuurlijk kunnen casten naar bool.
Ampera-e (60kWh) -> (66kWh)
die hele functie is niet nodig, want php heeft gewoon ctype_space 
shit je hebt gelijk
shit je hebt gelijk

[ Voor 11% gewijzigd door chocoschijtje op 29-10-2008 22:30 ]
Ik denk dat je de door jezelf aangedragen documentatie beter moet doorlezen
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.
Die komt natuurlijk niet voor, er staat '@SuppressWarnings("unchecked")' boven de functie, die dat mogelijke probleem gewoon oplost.IceManX schreef op woensdag 29 oktober 2008 @ 20:51:
Ik ben ook de enige die deze ClassCastException waiting to happen heeft gezien?
Misschien werkt ctype_graph welchocoschijtje schreef op woensdag 29 oktober 2008 @ 22:18:
die hele functie is niet nodig, want php heeft gewoon ctype_space
shit je hebt gelijk
(Oke, je checkt dan niet precies op een spatie, maar ook op een tab, een nieuwe regel, enz. En het is idd misschien wat omslachtig.

Ik weet alles van niks
Vind Excel ongelovelijk irritant.
En voor de mensen die niet zo onderlegd zijn in Java en classes, wat kan er dan fout gaan of een exception geven?IceManX schreef op woensdag 29 oktober 2008 @ 20:51:
Ik ben ook de enige die deze ClassCastException waiting to happen heeft gezien?
Eerst controleer je om te kijken of het van het type Integer is, maar daarna probeer je het te casten naar een Long.Quincy5 schreef op donderdag 30 oktober 2008 @ 13:31:
[...]
En voor de mensen die niet zo onderlegd zijn in Java en classes, wat kan er dan fout gaan of een exception geven?
@YopY
Dat is alleen om de waarschuwingen van de non generic Set te onderdrukken.
[ Voor 10% gewijzigd door Janoz op 30-10-2008 13:36 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Hij kijkt of het een Integer is, en vervolgens cast ie het naar een Long. You do the math.
.edit: damn you Janoz
.edit: damn you Janoz
[ Voor 13% gewijzigd door .oisyn op 30-10-2008 13:36 ]
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.
Opzich hoeft dat toch niet slecht te zijn? Stel je voor dat je alleen input waardes wilt die in het bereik van een Integer liggen, maar vervolgens met het getal berekeningen gaat doen (waardoor het een Long kan worden). Ik geef toe dat het een vrij lelijke oplossing is, maar toch kan het.Janoz schreef op donderdag 30 oktober 2008 @ 13:35:
[...]
Eerst controleer je om te kijken of het van het type Integer is, maar daarna probeer je het te casten naar een Long.
@YopY
Dat is alleen om de waarschuwingen van de non generic Set te onderdrukken.
Maar van Integer naar Long krijg je toch geen problemen? Andersom krijg je wel exceptions (geloof dat je dan iets kreeg over precision).
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Je kunt een Integer object niet zomaar naar een Long object casten. Verder is Long niet eens rechtstreeks gerelateerd aan Integer. Beiden extenden ze Number. Wanneer het meegegeven object een Long zou zijn geweest dan zou de check met Integer dus gewoon false opleveren. Zou het een Integer zijn, dan krijg je een ClassCastException omdat je een (subclass van) Integer probeert te casten naar een Long.
[ Voor 67% gewijzigd door Janoz op 30-10-2008 14:23 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Net als dat je in C++ niet zomaar een int* naar een long* kunt casten, maar wel een int naar een long. In het laatste geval converteer je gewoon de waarde, maar in het eerste geval ga je een object van een bepaald type ineens interpreteren alsof het een ander type heeft.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dat hij cast gebruikte had ik even gemist. Uiteraard heb je gelijk over die check, dat is ook logisch natuurlijk.Janoz schreef op donderdag 30 oktober 2008 @ 14:21:
Je kunt een Integer object niet zomaar naar een Long object casten. Verder is Long niet eens rechtstreeks gerelateerd aan Integer. Beiden extenden ze Number. Wanneer het meegegeven object een Long zou zijn geweest dan zou de check met Integer dus gewoon false opleveren. Zou het een Integer zijn, dan krijg je een ClassCastException omdat je een (subclass van) Integer probeert te casten naar een Long.
Maar het volgende is wel mogelijk (en ik dacht dat het daar over ging):
code:
1
2
3
| int x = 1; long y = 1; y = x; |
Dit is volgens mij in de meeste talen wel mogelijk (in C# zeker) en zal geen errors geven.
Blijkt dat ik me meng in een discussie zonder eerst het begin te lezen
[ Voor 0% gewijzigd door .Gertjan. op 30-10-2008 15:15 . Reden: Oeps... Geef zelf het verkeerde voorbeeld in de code. Het moet natuurlijk y = x zijn. ]
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
In java kan dat iig niet zomaar zonder explicite cast.
y = x
kan daarintegen wel.
y = x
kan daarintegen wel.
[ Voor 6% gewijzigd door Janoz op 30-10-2008 15:05 ]
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dat is imho een beetje een slecht voorbeeld, op veel systemen wordt een long hetzelfde geïnterpreteerd als een int..oisyn schreef op donderdag 30 oktober 2008 @ 14:25:
Net als dat je in C++ niet zomaar een int* naar een long* kunt casten, maar wel een int naar een long. In het laatste geval converteer je gewoon de waarde, maar in het eerste geval ga je een object van een bepaald type ineens interpreteren alsof het een ander type heeft.
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
*cough*64 bit*cough*bobo1on1 schreef op donderdag 30 oktober 2008 @ 16:59:
Dat is imho een beetje een slecht voorbeeld, op veel systemen wordt een long hetzelfde geïnterpreteerd als een int.
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.
Snap jij de betekenis van "veel"?
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Zo weinig 64bits systemen zijn er niet, en zeker in de toekomst zal dat toenemen.
Slecht dus
.
Slecht dus
Het is helemaal geen slecht voorbeeld, want op geen enkel systeem mag je een int* casten naar een long* zonder reinterpret_cast, ookal geldt sizeof(int)==sizeof(long). Het toch wel doen is UB, en kan dus net zo goed je harde schijf formatteren (extreem voorbeeld, maar een compliant compiler mag dergelijke code genereren). Dat het over het algemeen gewoon werkt als sizeof(int)==sizeof(long) maakt het nog geen good practice.bobo1on1 schreef op donderdag 30 oktober 2008 @ 16:59:
[...]
Dat is imho een beetje een slecht voorbeeld
Overigens hanteert Win x64 het LLP64 model, waardoor een long dus nog steeds 32 bits is
[ Voor 40% gewijzigd door .oisyn op 30-10-2008 22:20 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
tut tut ...bobo1on1 schreef op donderdag 30 oktober 2008 @ 21:58:
Snap jij de betekenis van "veel"?
Wikipedia: 64-bit
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.
Binnen Java is er een verschil tussen primitieve variabelen en objectvariabelen. Jouw voorbeeld werkt in Java perfect, maar als je het volgende doet:.Gertjan. schreef op donderdag 30 oktober 2008 @ 14:33:
[...]
Dat hij cast gebruikte had ik even gemist. Uiteraard heb je gelijk over die check, dat is ook logisch natuurlijk.
Maar het volgende is wel mogelijk (en ik dacht dat het daar over ging):
code:
1 2 3 int x = 1; long y = 1; y = x;
Dit is volgens mij in de meeste talen wel mogelijk (in C# zeker) en zal geen errors geven.
Blijkt dat ik me meng in een discussie zonder eerst het begin te lezen
code:
1
2
3
| Int x = 1; Long y = 1; y = x; |
dan gaat de compiler op alle drie de regels over zijn nek. Dat is ook wat er volgens mij in de code die aangedragen werd, fout is: men gaat met objecten te werk als waren ze primitieven, en probeert hier omheen te werken door te classcasten (maar dat gaat nog hopelozer fout). Kwestie van even de longValue() methode aanroepen en gebruikmaken van primitieven.
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
In java 5 en hoger zit autoboxing zodat het alleen nog op de laatste regel fout gaat.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Zelf nu ook bezig @ school met wat c#, en je merkt dat je in een aantal weken toch wel wat vooruitgang boekt. Denk je effe een logincheck te maken..
Ik had het van mezelf al "logisch" bedacht dat ik 2 strings met elkaar wilde vergelijken(1 die je invoert, en 1 waarde van sql query), en als ze dan overeen kwamen dat je dan ingelogd was..
Zonder alle gekheid van connectionstrings etc:
Code:
Dat kon natuurlijk veel makkelijker:
Achteraf gezien ook niet de meeste briljante oplossing van me. Zou betekenen als 2 verschillende users hetzelfde wachtwoord hebben dat het dan ook werkt. Maargoed!
Naja, aldoende leert men..
Ik had het van mezelf al "logisch" bedacht dat ik 2 strings met elkaar wilde vergelijken(1 die je invoert, en 1 waarde van sql query), en als ze dan overeen kwamen dat je dan ingelogd was..
Zonder alle gekheid van connectionstrings etc:
Code:
C#:
1
2
3
4
5
6
7
8
9
10
11
| string uitDB = "SELECT password FROM logins WHERE username = 'pietje'"; string invoer = password.Text; if (invoer == uitDB) { label1.Text = "goedzo!"; } else { label1.Text = "fout!"; } |
Dat kon natuurlijk veel makkelijker:
C#:
1
| string sql = "SELECT nr, username, password FROM logins WHERE username = '" + username.Text + "' AND password = '" + password.Text + "'"; |
Achteraf gezien ook niet de meeste briljante oplossing van me. Zou betekenen als 2 verschillende users hetzelfde wachtwoord hebben dat het dan ook werkt. Maargoed!
Naja, aldoende leert men..
[ Voor 7% gewijzigd door enira op 01-11-2008 02:29 ]
Twitch: Phyloni1
Path of Exile character info: Active character
Ga toch maar eens kijken naar prepared statements, want dit is zeer SQL injection gevoelig.jarnotjuh schreef op zaterdag 01 november 2008 @ 02:25:
C#:
1 string sql = "SELECT nr, username, password FROM logins WHERE username = '" + username.Text + "' AND password = '" + password.Text + "'";
Achteraf gezien ook niet de meeste briljante oplossing van me. Zou betekenen als 2 verschillende users hetzelfde wachtwoord hebben dat het dan ook werkt. Maargoed!
Naja, aldoende leert men..
Going for adventure, lots of sun and a convertible! | GMT-8
Euh, hoe dan?jarnotjuh schreef op zaterdag 01 november 2008 @ 02:25:
Achteraf gezien ook niet de meeste briljante oplossing van me. Zou betekenen als 2 verschillende users hetzelfde wachtwoord hebben dat het dan ook werkt.
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.
Inderdaad.
edit:
Los daarvan is "nr" wel een vrij slechte benaming voor een kolomnaam in je database. Wat voor nummer is het? Een telefoonnummer? Huisnummer? Sofinummer? Jij bedoelt waarschijnlijk een ID; noem het dan ook zo. [ Voor 27% gewijzigd door NMe op 01-11-2008 05:47 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Bij voorbeeld 1(code die ik dus eerst had) select ik alleen password uit mijn tabel.. Dus KAN je meerdere usernames terugkrijgen.. Of zie ik dat fout? Kreeg het van meerdere mensen te horen, en zag het zelf achteraf ook.
En dit was een voorbeeld, dat 'Nr' is inderdaad aangepast naar 'ID'. Ben er al door meerdere mensen op aangewezen.
Ben maar niet bang, ik wil eerst gewoon dat het werkt. Daarna moeten we inderdaad met stored procedures(prepared statements dus?Snake schreef op zaterdag 01 november 2008 @ 03:20:
Ga toch maar eens kijken naar prepared statements, want dit is zeer SQL injection gevoelig.
Twitch: Phyloni1
Path of Exile character info: Active character
C#:
1
2
| if (invoer == uitDB) //etc |
is ook niet zo netjes, om strings te vergelijken gebruik je
C#:
1
| invoer.Equals(uitDB) |
en wat ik zelf altijd nog voor de zekerheid doe als je het case-insensitive wil houden:
C#:
1
| invoer.Equals(uitDB, StringComparison.InvariantCultureIgnoreCase) |
Kater? Eerst water, de rest komt later
Wat is dan het verschil? Ik gebruik altijd gewoon operator== om strings te vergelijken.Haan schreef op zaterdag 01 november 2008 @ 12:28:
C#:
1 2 if (invoer == uitDB) //etc
is ook niet zo netjes, om strings te vergelijken gebruik je
C#:
1 invoer.Equals(uitDB)
Ik weet niet of het in C# zo is maar in java is een String een object en objecten vergelijk je met .equalsZoijar schreef op zaterdag 01 november 2008 @ 12:57:
[...]
Wat is dan het verschil? Ik gebruik altijd gewoon operator== om strings te vergelijken.
In C# kan je gewoon de comparison operator gebruiken om strings te vergelijken.
Dat is waar, maar ik krijg het toch soms voor elkaar dat het niet werkt
En met Equals werkt het altijd.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Als je een unique constraint op de username kolom hebt gezet, zou je maar één rij terug moeten krijgen. (Of in code afvangen dat een username maar één keer kan voorkomen, maar dat is een minder nette manier imo).jarnotjuh schreef op zaterdag 01 november 2008 @ 12:15:
[...]
Bij voorbeeld 1(code die ik dus eerst had) select ik alleen password uit mijn tabel.. Dus KAN je meerdere usernames terugkrijgen.. Of zie ik dat fout? Kreeg het van meerdere mensen te horen, en zag het zelf achteraf ook.
In C# is trouwens de == operator van String objecten overschreven zodat deze waardes vergelijkt, en niet referenties.
[ Voor 9% gewijzigd door MatHack op 01-11-2008 13:46 . Reden: String opmerking toegevoegt ]
There's no place like 127.0.0.1
Ik weet er ook niet meer het fijne van, maar als het goed is zit het zo: met == kijk je of de object referenties gelijk zijn, met Equals() kijk je of de objecten zelf gelijk zijn. Zoiets in ieder geval..
Daarbij kan je met de verschillende methoden die je in C# hebt om strings te vergelijken gewoon wat meer controle uitoefenen, zoals bijvoorbeeld het voorbeeld dat ik eerder al gaf.
Daarbij kan je met de verschillende methoden die je in C# hebt om strings te vergelijken gewoon wat meer controle uitoefenen, zoals bijvoorbeeld het voorbeeld dat ik eerder al gaf.
Kater? Eerst water, de rest komt later
C# heeft iets dat operator overloading heet, in alle valuetypes (geen echte classes, pass by value) is == dan ook overwritten met .equals().Haan schreef op zaterdag 01 november 2008 @ 13:44:
Ik weet er ook niet meer het fijne van, maar als het goed is zit het zo: met == kijk je of de object referenties gelijk zijn, met Equals() kijk je of de objecten zelf gelijk zijn. Zoiets in ieder geval..
Daarbij kan je met de verschillende methoden die je in C# hebt om strings te vergelijken gewoon wat meer controle uitoefenen, zoals bijvoorbeeld het voorbeeld dat ik eerder al gaf.
Hmm dat is natuurlijk waar ook ja, daar had ik helemaal niet bij stil gestaan. Blijft alleen het punt van bijvoorbeeld makkelijk case-insensitive kunnen vergelijken over als reden om wel de Equals() methode te gebruiken
Kater? Eerst water, de rest komt later
Je haalt alleen een wachtwoord op, maar je doet dat op basis van een username, die naar ik hoop uniek is. Je haalt dus het wachtwoord van één specifieke gebruiker ok; het zou pas gebeuren zoals jij nu zegt als je een gebruikersnaam op zou vragen en in de WHERE een wachtwoord zou vergelijken.jarnotjuh schreef op zaterdag 01 november 2008 @ 12:15:
[...]
Bij voorbeeld 1(code die ik dus eerst had) select ik alleen password uit mijn tabel.. Dus KAN je meerdere usernames terugkrijgen.. Of zie ik dat fout? Kreeg het van meerdere mensen te horen, en zag het zelf achteraf ook.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Maar je wilt passwords meestal juist NIET case-insensitive vergelijken. En daarom is de password in de where clause zetten juist een slecht idee - de meeste RDBMs willen bij where clauses de case nog wel eens negeren als het varchar / text velden zijn. Pas als je ze binary gaat vergelijken wordt de case meegenomen.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Als het goed is sla je een hash van je wachtwoord op, niet het wachtwoord zelf. En MD5, SHA1 e.d. maakt het niet uit of dat nou bijv. 5ed of 5ED is.
Full-stack webdeveloper in Groningen
Anoniem: 279039
In professionele systemen mag je dat inderdaad wel aannemen, maar in dit geval (schoolopdrachten of zelfstudie) kan het dus voorkomen dat je (tijdelijk) gebruik maakt van plaintext opslag.ZanderZ schreef op zaterdag 01 november 2008 @ 16:42:
Als het goed is sla je een hash van je wachtwoord op, niet het wachtwoord zelf. En MD5, SHA1 e.d. maakt het niet uit of dat nou bijv. 5ed of 5ED is.
En in dat geval moet je er wel aan denken dat je eventueel rekening moet houden met hoofd- en kleine letters.
Je selecteert password voor alle rijen waarvoor de WHERE clause geldt. Dus voor alle rijen waar username='pietje' AND password='geheim'. Dan krijg je niet ineens resultaten terug als er een user 'henk' bestaat met een ander wachtwoord en je doet WHERE username='henk' AND password='geheim'. Er bestaat namelijk helemaal geen rij waarvoor geldt username='henk' AND password='geheim'.jarnotjuh schreef op zaterdag 01 november 2008 @ 12:15:
[...]
Bij voorbeeld 1(code die ik dus eerst had) select ik alleen password uit mijn tabel.. Dus KAN je meerdere usernames terugkrijgen.. Of zie ik dat fout? Kreeg het van meerdere mensen te horen, en zag het zelf achteraf ook.
In feite maakt het niet eens uit dat je SELECT password doet (is ook onzinnig, dat zal altijd 'geheim' zijn als je daarop zoekt), je kunt net zo goed SELECT 1 doen. SELECT user_id is dan wellicht handiger, dan weet je ook meteen om welke user_id het gaat
[ Voor 23% gewijzigd door .oisyn op 02-11-2008 14:24 ]
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.
System.String is volgens mij een reference type. Je hebt wel gelijk dat de == operator overwritten is:roy-t schreef op zaterdag 01 november 2008 @ 14:01:
[...]
C# heeft iets dat operator overloading heet, in alle valuetypes (geen echte classes, pass by value) is == dan ook overwritten met .equals().
public static bool operator ==(string a, string b)
Member of System.String
Summary:
Determines whether two specified System.String objects have the same value.
Parameters:
a: A System.String or null.
b: A System.String or null.
Returns:
true if the value of a is the same as the value of b; otherwise, false.
[ Voor 22% gewijzigd door JMfx op 02-11-2008 16:37 ]
Equals heeft voor het type string een overload waar je een StringComparison kan meegevenJMfx schreef op zondag 02 november 2008 @ 16:33:
[...]
System.String is volgens mij een reference type. Je hebt wel gelijk dat de == operator overwritten is:
[...]
[ Voor 0% gewijzigd door Daspeed op 02-11-2008 16:41 . Reden: edit: nu mijn bovenbuurman zijn post gewijzigd heeft slaat die van mij niet echt ergens meer op :P ]
Ik had het al gezien, daarom had ik het verwijderdDaspeed schreef op zondag 02 november 2008 @ 16:38:
[...]
Equals heeft voor het type string een overload waar je een StringComparison kan meegeven
[ Voor 3% gewijzigd door JMfx op 02-11-2008 16:49 ]
Hier spreek je jezelf een beetje tegen. Een professioneel systeem werkt dus met hashing, waardoor case-sensitivity niet belangrijk is. Een schoolopdracht vaak (nog) niet, waardoor het wel belangrijk is. En wat boeit vaak geen hol met schoolopdrachten? Juist, de beveiliging.Anoniem: 279039 schreef op zaterdag 01 november 2008 @ 17:02:
[...]
In professionele systemen mag je dat inderdaad wel aannemen, maar in dit geval (schoolopdrachten of zelfstudie) kan het dus voorkomen dat je (tijdelijk) gebruik maakt van plaintext opslag.
En in dat geval moet je er wel aan denken dat je eventueel rekening moet houden met hoofd- en kleine letters.
edit:
Hier stond onzin
Hier stond onzin
ZanderZ schreef op zaterdag 01 november 2008 @ 16:42:
Als het goed is sla je een hash van je wachtwoord op, niet het wachtwoord zelf. En MD5, SHA1 e.d. maakt het niet uit of dat nou bijv. 5ed of 5ED is.
Euh, since whenWijnbo schreef op dinsdag 04 november 2008 @ 14:26:
Een professioneel systeem werkt dus met hashing, waardoor case-sensitivity niet belangrijk is.
code:
1
2
3
4
5
| md5("5ed") = "a08e8432acac59e97148477a09c7f558" md5("5ED") = "b9c19b35ed6e5e4f9f7895b58c34ad5e" Sha1("5ed") = "0f81011f36bc3d46f060bee62abd2648465e3b13" Sha1("5ED") = "e093348aa602230914710363bb9bb84089d4af26" |
Dus tenzij je doelt op de case van de hash gewoon niet waar.
[ Voor 116% gewijzigd door RobIII op 04-11-2008 15:05 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Een hash is een reeks binaire waardes (bytes). De presentatie van deze bytes bepaald of het wel of niet case-sensitive is. Als ik de hash via heximale waardes presenteer (zoals vaak het geval is) dan maakt de case inderdaad niet uit, maar als ik de hash als base64 presenteerd zit er wel degelijk een verschil tussen 'A' en 'a'.Wijnbo schreef op dinsdag 04 november 2008 @ 14:26:
Een professioneel systeem werkt dus met hashing, waardoor case-sensitivity niet belangrijk is.
Webbased talen zullen inderdaad snel de heximale notatie gebruiken, maar wat meer algemene talen geven gewoon de hash bytes terug. Zo heeft C# geen methode om een byte array heximaal te noteren, maar heeft wel wel een Convert.ToBase64String() methode.
@RobIII: WijnBo bedoelde meer de presentatie van de uitkomst van de hash, niet de input.
[ Voor 5% gewijzigd door Niemand_Anders op 04-11-2008 14:40 ]
If it isn't broken, fix it until it is..
Mm.. niet zozeer een slecht programmeer voorbeeld, maar meer slechte definitie: Ik moet tegen een webservice van een externe partij aanpraten, staat er in de definitie
Overigens zijn datums in dit systeem ook gewoon strings, maar daar hebben ze gelukkig wel gewoon een definitie voor
Ik ben benieuwd of je ook willekeurig "true", "J", "Ja" of 1 terug krijgt.Boolean
Enkelvoudig datatype. Toegestane waarden zijn: “true”, “J”, ”Ja", 1, “false”, “N”, “Nee” en "0".
Overigens zijn datums in dit systeem ook gewoon strings, maar daar hebben ze gelukkig wel gewoon een definitie voor
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
Ik doelde op de case van de hash iddRobIII schreef op dinsdag 04 november 2008 @ 14:31:
[...]
Want? Een fatsoenlijk systeem heeft gewoon case-sensitive wachtwoorden hoorEven een paar willekeurige quotes van password guidelines:
Euh, since when
code:
1 2 3 4 5 md5("5ed") = "a08e8432acac59e97148477a09c7f558" md5("5ED") = "b9c19b35ed6e5e4f9f7895b58c34ad5e" Sha1("5ed") = "0f81011f36bc3d46f060bee62abd2648465e3b13" Sha1("5ED") = "e093348aa602230914710363bb9bb84089d4af26"
Dus tenzij je doelt op de case van de hash gewoon niet waar.
Full-stack webdeveloper in Groningen
Grappig dat 'Yes' en 'No' dan niet zijn toegestaan..rwb schreef op dinsdag 04 november 2008 @ 14:38:
Mm.. niet zozeer een slecht programmeer voorbeeld, maar meer slechte definitie: Ik moet tegen een webservice van een externe partij aanpraten, staat er in de definitie
[...]
Ik ben benieuwd of je ook willekeurig "true", "J", "Ja" of 1 terug krijgt.
Overigens zijn datums in dit systeem ook gewoon strings, maar daar hebben ze gelukkig wel gewoon een definitie voor
If it isn't broken, fix it until it is..
Dat zijn toch dingen die ik gewoon voor de 'ouwehoer' eens zou proberen en ze dan doodleuk mailen dat hun documentatie niet compleet isNiemand_Anders schreef op dinsdag 04 november 2008 @ 14:43:
[...]
Grappig dat 'Yes' en 'No' dan niet zijn toegestaan..
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Je moet de zin die van IcemanX die je quote nog maar eens rustig doorlezen denk ikRobIII schreef op dinsdag 04 november 2008 @ 14:31:
[...]
Want? Een fatsoenlijk systeem heeft gewoon case-sensitive wachtwoorden hoor
bold, italic en underline door mij toegevoegdIceManX schreef op zaterdag 01 november 2008 @ 15:19:
Maar je wilt passwords meestal juist NIET case-insensitive vergelijken.
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Kolere zegNetForce1 schreef op dinsdag 04 november 2008 @ 15:02:
[...]
Je moet de zin die van IcemanX die je quote nog maar eens rustig doorlezen denk ik, hij zegt nl dit:
[...]
bold, italic en underline door mij toegevoegd

Niet case-insensitive... zeg dan gewoon case sensitive

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Ja dat bedoelde ik uiteindelijk ook. Ik typte het alleen niet...NetForce1 schreef op dinsdag 04 november 2008 @ 15:02:
[...]
bold, italic en underline door mij toegevoegd
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Huh, ik zie het toch echt zo in je post staan, en er staat geen edit-tijd bij.IceManX schreef op dinsdag 04 november 2008 @ 16:48:
[...]
Ja dat bedoelde ik uiteindelijk ook. Ik typte het alleen niet...
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Je hebt gelijk, ik slaap gewoon 
Ik dacht dat je mij aan het verbeteren was, en tja, dan had ik je gelijk moeten geven

Ik dacht dat je mij aan het verbeteren was, en tja, dan had ik je gelijk moeten geven
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Geen stukje code, maar iets wat ik vandaag op school tegen kwam. Waar mijn C# `leraar` mee kwam aanzetten.
Een groepje leerlingen is bezig met een app, Ze hebben het main screen gemaakt, en vragen aan de docent hoe ze de child forms het beste kunnen maken, zodat deze in het hoofdscherm geopend worden.
Eerste methode die ik zou zeggen, MDI.
Komt de leraar met zijn methode: Inheritance.
Het child form, de parent laten overerven, en op deze manier het nieuwe form opbouwen. (er zijn een 15tal forms)
. En stug blijven volhouden dat het de manier is.
Een groepje leerlingen is bezig met een app, Ze hebben het main screen gemaakt, en vragen aan de docent hoe ze de child forms het beste kunnen maken, zodat deze in het hoofdscherm geopend worden.
Eerste methode die ik zou zeggen, MDI.
Komt de leraar met zijn methode: Inheritance.
Het child form, de parent laten overerven, en op deze manier het nieuwe form opbouwen. (er zijn een 15tal forms)


[ Voor 10% gewijzigd door CrashOverDrive op 05-11-2008 00:04 ]
Ik dacht ook dat je iets inherit uit system.windows.forms
Op zich is MDI een mooie vorm, als je wil dat alles binnen in het main screen zit. Echter, je ziet dat de 'grote' bekende applicaties van MDI zijn afgestapt, zoals het hele MS Office. Ik vind het zelf ook fijner werken zonder MDI, in de 'office' gevallen. Echter zullen er genoeg situaties zijn waarbij MDI wel wenselijk is.CrashOverDrive schreef op woensdag 05 november 2008 @ 00:01:
Geen stukje code, maar iets wat ik vandaag op school tegen kwam. Waar mijn C# `leraar` mee kwam aanzetten.
Een groepje leerlingen is bezig met een app, Ze hebben het main screen gemaakt, en vragen aan de docent hoe ze de child forms het beste kunnen maken, zodat deze in het hoofdscherm geopend worden.
Eerste methode die ik zou zeggen, MDI.
Komt de leraar met zijn methode: Inheritance.
Het child form, de parent laten overerven, en op deze manier het nieuwe form opbouwen. (er zijn een 15tal forms). En stug blijven volhouden dat het de manier is.
Ampera-e (60kWh) -> (66kWh)
Situatie in dit geval: Inventaris systeempje. Dus een hoofdscherm, en een lading forms die zaken regelen zoals: Voorraad bijwerken, artiest toevoegen, checkout, etc. Lijkt MDI me toch echt the way to go.GreenSky schreef op woensdag 05 november 2008 @ 09:29:
[...]
Op zich is MDI een mooie vorm, als je wil dat alles binnen in het main screen zit. Echter, je ziet dat de 'grote' bekende applicaties van MDI zijn afgestapt, zoals het hele MS Office. Ik vind het zelf ook fijner werken zonder MDI, in de 'office' gevallen. Echter zullen er genoeg situaties zijn waarbij MDI wel wenselijk is.
Nouja, vooral net niet. Wél losse items op je taakbalk maar je moet met het MDI-subkruisje een document sluiten... ik raak er niet aan gewendGreenSky schreef op woensdag 05 november 2008 @ 09:29:Echter, je ziet dat de 'grote' bekende applicaties van MDI zijn afgestapt, zoals het hele MS Office.
Ik zou het gewoon als UserControls implementeren, je kunt daarna altijd nog kiezen of je het in een MDIChild host of dat je het via bijvoorbeeld tabbladen, of een outlook style navigatie doet. Doordat je je controls dan gewoon makkelijk in een andere container kunt stoppen, ben je niet zo gebonden aan het hele MDI gebeuren.CrashOverDrive schreef op woensdag 05 november 2008 @ 09:49:
[...]
Situatie in dit geval: Inventaris systeempje. Dus een hoofdscherm, en een lading forms die zaken regelen zoals: Voorraad bijwerken, artiest toevoegen, checkout, etc. Lijkt MDI me toch echt the way to go.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”
@CrashOverDrive, er zijn nog andere opties zoals een groot scherm met tabbladen, kan ook heel mooi werken.
MDI is een leuke vorm, maar het leent zich er voor om een GUI te maken met te veel schermpjes naast elkaar open --> onoverzichtelijk en rommelig etc. Dat lokt het een beetje uit. (maar dat hoeft natuurlijk niet)
Hmm je hebt gelijk, in Office 2003. Thuis even kijken of dat ook zo is in 2007. Dom dat me dat nooit is opgevallen zeg.ValHallASW schreef op woensdag 05 november 2008 @ 10:32:
[...]
Nouja, vooral net niet. Wél losse items op je taakbalk maar je moet met het MDI-subkruisje een document sluiten... ik raak er niet aan gewend
MDI is een leuke vorm, maar het leent zich er voor om een GUI te maken met te veel schermpjes naast elkaar open --> onoverzichtelijk en rommelig etc. Dat lokt het een beetje uit. (maar dat hoeft natuurlijk niet)
Ampera-e (60kWh) -> (66kWh)
ValHallASW schreef op woensdag 05 november 2008 @ 10:32:
[...]
Nouja, vooral net niet. Wél losse items op je taakbalk maar je moet met het MDI-subkruisje een document sluiten... ik raak er niet aan gewend
Dit is overigens volgens mij alleen in Excel. Als je het kruisje gebruikt van het hoofdwindow ben je al je documenten kwijt. Dit terwijl je in Word volgens mij alleen maar het huidige document sluit.
Dat is in ieder geval de reden waarom ik er niet aan kan wennen, omdat Word en Excel beide een andere methode gebruiken...
Zo is dacht ik de situatie in Office 2003.
[ Voor 3% gewijzigd door .Gertjan. op 05-11-2008 10:50 ]
The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.
Anoniem: 14829
En aan de andere kant zie je bv. dat iedere zichzelf respecterende browser ondertussen 'tabbed browsing' doet, wat in feite gewoon MDI is, en de meeste mensen vinden dat gewoon prettig werken.GreenSky schreef op woensdag 05 november 2008 @ 09:29:
Op zich is MDI een mooie vorm, als je wil dat alles binnen in het main screen zit. Echter, je ziet dat de 'grote' bekende applicaties van MDI zijn afgestapt, zoals het hele MS Office.
Nee, werken met tabs is SDI. Je werkt namelijk met 1 document (window) tegelijk, die de hele applicatie inneemt. Of je dat implementeert middels tabs of middels daadwerkelijk verschillende applicatie-windows doet er verder weinig toe.
Neemt niet weg dat MDI imho nog wel degelijk nuttig gebruikt wordt. Iets als Photoshop zou ik me niet kunnen indenken zonder MDI.
Neemt niet weg dat MDI imho nog wel degelijk nuttig gebruikt wordt. Iets als Photoshop zou ik me niet kunnen indenken zonder MDI.
[ Voor 22% gewijzigd door .oisyn op 05-11-2008 21:50 ]
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.
Tabs is toch TDI?.oisyn schreef op woensdag 05 november 2008 @ 21:47:
Nee, werken met tabs is SDI. Je werkt namelijk met 1 document (window) tegelijk, die de hele applicatie inneemt. Of je dat implementeert middels tabs of middels daadwerkelijk verschillende applicatie-windows doet er verder weinig toe.
Neemt niet weg dat MDI imho nog wel degelijk nuttig gebruikt wordt. Iets als Photoshop zou ik me niet kunnen indenken zonder MDI.

True, maar wat voor criterium komt daarbij kijken?.oisyn schreef op woensdag 05 november 2008 @ 21:47:
Nee, werken met tabs is SDI. Je werkt namelijk met 1 document (window) tegelijk, die de hele applicatie inneemt. Of je dat implementeert middels tabs of middels daadwerkelijk verschillende applicatie-windows doet er verder weinig toe.
Neemt niet weg dat MDI imho nog wel degelijk nuttig gebruikt wordt. Iets als Photoshop zou ik me niet kunnen indenken zonder MDI.
De beschikking moeten hebben over meerdere (configureerbare) sets van tools, en je 'werkwindow' tegelijk oid?
Je kunt de forms ook in een panel laten zien.. vies trucje, maar niet iedereen heeft zin in MDI. Onder andere wanneer je duidelijk maar 1 form tegelijk wil laten zien, maar nog wel toegang tot de parent wil hebben.CrashOverDrive schreef op woensdag 05 november 2008 @ 00:01:
Geen stukje code, maar iets wat ik vandaag op school tegen kwam. Waar mijn C# `leraar` mee kwam aanzetten.
Een groepje leerlingen is bezig met een app, Ze hebben het main screen gemaakt, en vragen aan de docent hoe ze de child forms het beste kunnen maken, zodat deze in het hoofdscherm geopend worden.
Eerste methode die ik zou zeggen, MDI.
Inheritance is wel erg vreemd dat hij daarmee komt
Ask yourself if you are happy and then you cease to be.
Volgens wikipedia wordt TDI idd meer gezien als MDI dan als SDI. Het criterium lijkt ook meer te zijn dat je in een SDI app met 1 document werkt, en dat alle toolwindows en menu's e.d. dus voor dat document opgeaan. Om meerdere documents te openen moet je dus meerdere apps (of instances van de main window binnen de app) openen, die als losse taken op de taakbalk terecht komen. In dat opzicht is een TDI dus ook een vorm van MDI.
IOW, I stand corrected
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.
Ja TDI lijkt me ook een vorm van MDI, toch meerdere documenten. Alleen niet naast elkaar te zetten (doorgaans).
Ik zou in zo'n inventaris geval met tabs werken denk ik. Dan zou ik 1 inventaris overzicht tab maken, en dan een tab die open kan staan voor ieder soort scherm. Dus max 1 voor het editen van een inventaris item bijvoorbeeld. Zo kun je redelijk wat naast elkaar open hebben, en dan nog kun je het nog steeds strak en overzichtelijk houden. In het main panel waar alle tabs geladen worden kun je dan ook gebruik maken van een witte achtergrond, is toch prettiger (vind ik).
Ik zou in zo'n inventaris geval met tabs werken denk ik. Dan zou ik 1 inventaris overzicht tab maken, en dan een tab die open kan staan voor ieder soort scherm. Dus max 1 voor het editen van een inventaris item bijvoorbeeld. Zo kun je redelijk wat naast elkaar open hebben, en dan nog kun je het nog steeds strak en overzichtelijk houden. In het main panel waar alle tabs geladen worden kun je dan ook gebruik maken van een witte achtergrond, is toch prettiger (vind ik).
Ampera-e (60kWh) -> (66kWh)
Anoniem: 142689
Dat vind ik niet zo heel raar. Als het systeem van klant y 'J' gebruikt en klant x 'true' en je checkt zelf op 'yes' dan ga je echt niet tegen die klant zeggen dat hij zijn systeem maar moet aanpassen, tenzij je een of andere multinational bent die iets unieks aanbied.rwb schreef op dinsdag 04 november 2008 @ 14:38:
Mm.. niet zozeer een slecht programmeer voorbeeld, maar meer slechte definitie: Ik moet tegen een webservice van een externe partij aanpraten, staat er in de definitie
[...]
Ik ben benieuwd of je ook willekeurig "true", "J", "Ja" of 1 terug krijgt.
Overigens zijn datums in dit systeem ook gewoon strings, maar daar hebben ze gelukkig wel gewoon een definitie voor
Dit topic is gesloten.
Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.