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.
Kater? Eerst water, de rest komt later
Toen ik net begon met html en javascript wou ik zoveel mogelijk verschillende html tags gebruiken om het aan te leren, en te oefenen. Liet ik het zien aan iemand anders, en die meteen: Ach javascript is voor mietjes je php leren, en je moet zeker leren werken met tables om je content te positioneren. Ok geen javscript meer, en met tables en een iframe, wat resulteerde in een mooie layout. Weer laten zien, toen was ie wel verbaasd, dacht dat ik met flash had ineen gezet. Print voorbeeld was wel helemaal fout. (tijden van ie5). Ohja, en outerglow en dergelijke filters, die ik later nooit meer heb gebruikt.
Met de aanbreek van een nieuwe internet-desing-golf, ben ik meegegaan, en heb ik nu tables achterwegengelaten. In het begin was het streven naar een zo flexibel mogelijk design, en erger: zelfs voor tabel data gebruikte ik geneste div. En alles uiteraard in XHTML.
Ondertussen ben ik daar ook weer vanaf gestapt. Ik heb nu een design, hardcoded in php, bestaande uit heel wat geneste DIV (gemiddeld niveau 3-4). Aanpassingen kan ik wel makkelijk maken, maar dan moet ik in mijn php-bron bestanden zitten.
De dag dat ik echt flexibel en modulair ga zijn, dan leer ik me eerst een framework aan. ook ben ik teruggestapt naar html 4.1 trans, xhtml geeft veel te veel crossbrowser inconsistenties.
Maar als je een andere layout wilt, dan kun je je meestal toch niet beperken tot een paar css aanpassingen, vandaar dat ik die filosofie niet volg. Ja wat zen garden presteerd is wel uniek
[ Voor 6% gewijzigd door g4wx3 op 30-01-2009 11:57 ]
Verwijderd
1
| if($type = 'langpack'){ |
ipv
1
| if($type == 'langpack'){ |
ook niet helemaal de bedoeling.
[ Voor 21% gewijzigd door Verwijderd op 30-01-2009 11:55 ]
CSS is ook helemaal niet bedoeld voor meerdere layouts. Layout hangt namelijk ook gewoon af van je flow. Met CSS kun je de flow niet aanpassen.g4wx3 schreef op vrijdag 30 januari 2009 @ 11:55:
Maar als je een andere layout wilt, dan kun je je meestal toch niet beperken tot een paar css aanpassingen, vandaar dat ik die filosofie niet volg. Ja wat zen garden presteerd is wel uniek
Ik vind het overigens een beetje dom dat je de HTML in je PHP hebt zitten hardcoden. Ik doe dat zelf nooit, terwijl ik ook nooit gebruik maak van allerlei frameworks. PHP is namelijk een template parser pur sang - gewoon van tevoren je data in variabelen zetten, en dan een php filetje includen die die data presenteert als html. Dan kun je de layout ook heel gemakkelijk aanpassen.
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.
1
| $smarty->sql =& $sql; |
Ik zie het nut ook niet zo in van dingen in de $_REQUEST array zetten. ( Of ieder geval zou ik het niet doen )Config schreef op vrijdag 30 januari 2009 @ 11:34:
PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if($can_install){ // handle manifest.php $target_manifest = remove_file_extension( $file ) . '-manifest.php'; if($type = 'langpack'){ $_REQUEST['manifest'] = $target_manifest; $_REQUEST['zipFile'] = $file; commitLanguagePack(); continue; } if($type = 'langpack'){ $_REQUEST['manifest'] = $target_manifest; $_REQUEST['zipFile'] = $file; commitLanguagePack(); continue; } include($target_manifest); //even more code
“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 doe het ook volledig met CSS. Enige HTML output is gestructureerde content in de vorm van div's en p's etc. Wat dat betreft is het net als XML/XSLT, wat het natuurlijk ook min of meer is in de vorm XHTML/CSS. Je kan makkelijk een compleet andere layout opzetten door alleen de .css file te herschrijven. Als je een nieuw "type" content toevoegd, dan moet je uiteraard de presentatie van die content beschrijven in de css..oisyn schreef op vrijdag 30 januari 2009 @ 17:50:
CSS is ook helemaal niet bedoeld voor meerdere layouts. Layout hangt namelijk ook gewoon af van je flow. Met CSS kun je de flow niet aanpassen.
Ik vind het overigens een beetje dom dat je de HTML in je PHP hebt zitten hardcoden. Ik doe dat zelf nooit, terwijl ik ook nooit gebruik maak van allerlei frameworks. PHP is namelijk een template parser pur sang - gewoon van tevoren je data in variabelen zetten, en dan een php filetje includen die die data presenteert als html. Dan kun je de layout ook heel gemakkelijk aanpassen.
Frameworks heb ik ook nog niet veel mee gedaan. Het is me ook niet duidelijk hoever sommige frameworks gaan. Is het een framework waarbinnen ik moet werken, of waarmee ik moet werken. Een library met wat generieke functies is erg makkelijk geschreven (even een alleskunnend database object daargelaten), maar het is natuurlijk zonde om het wiel opnieuw uit te vinden. En je kan profiteren van dingen als searchengine-friendly urls etc.
Wanneer een nieuw project zich aandient zal ik de keuze opnieuw moeten bekijken. (ik doe dit soort werk niet fulltime)
Ampera-e (60kWh) -> (66kWh)
Nee, XML is puur content zonder voorgedefinieerde volgorde. (X)HTML heeft een flow dat vast zit in het document. Als je een HTML doc hebt waar data in staat, kun je niet mbv CSS ervoor kiezen om die data horizontaal te rangschikken ipv verticaal zoals door de flow gedefinieerd wordt. Ook met floats kom je vaak in de problemen als je net iets anders wilt dan de manier waarvoor de doc in eerste instantie is opgezet. Met CSS bepaal je slechts het uiterlijk van de bestaande elementen. Niet de layout zelf. Je kúnt wel layoutwijzingen doen, maar ik vind dat meer CSS hacks dan daadwerkelijk mooie oplossingen. Dan kun je beter denken aan oplossingen als XML/XSLT of template systems.Zoijar schreef op maandag 02 februari 2009 @ 16:04:
[...]
Ik doe het ook volledig met CSS. Enige HTML output is gestructureerde content in de vorm van div's en p's etc. Wat dat betreft is het net als XML/XSLT, wat het natuurlijk ook min of meer is in de vorm XHTML/CSS.
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.
Wat is hier mis mee? Je vult de 'sql' property met een waarde, dat is toch niks raars?st0p schreef op maandag 02 februari 2009 @ 15:26:
Denk dat dit stukje code wel genoeg zegt over de algemene staat van de site die ik mag onderhouden:
PHP:
1 $smarty->sql =& $sql;
Waarschijnlijk wordt de gettext plugin of zo gebruikt binnen Smarty (ik neem aan dat dat een instantie is van Smarty, de template parser) om teksten uit de database te halen.
Ik zie dus niet direct wat hier zo erg aan is.
Het script dat hij include haalt z'n data uit $_REQUEST. Waarschijnlijk zijn die te includen scripts ook voor normaal gebruik (dus gewoon bla-manifest.php?zipFile=x&manifest=y aanroepen).rwb schreef op maandag 02 februari 2009 @ 15:32:
[...]
Ik zie het nut ook niet zo in van dingen in de $_REQUEST array zetten. ( Of ieder geval zou ik het niet doen )
PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?
Nuja, give up and use tables
[ Voor 7% gewijzigd door ValHallASW op 07-02-2009 02:27 ]
Shelving is het opslaan van je wijzigingen, maar niet het inchecken ervan.
on-topic:
Wat ik nogal vaak terug vindt in code van oude projecten:
1
2
3
4
5
6
| try { ... } catch (Exception ex) { throw new Exception(ex.Message); } |
Nogal fijn dat je daarna niet meer kan zien welk type exception de originele exception was (en de andere dingen ook, zoals stacktrace).

[ Voor 32% gewijzigd door MatHack op 08-02-2009 19:12 ]
There's no place like 127.0.0.1
1
2
3
4
5
6
7
| try { File.Open("blaat.txt"); } catch (Exception ex) { Log.Error("Het ging eventjes niet goed 8)", ex); throw; // anders verschuift de stacktrace (vergelijk met throw ex;) } |
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
http://blogs.msdn.com/fxc..._Nick-Guerrera_5D00_.aspx
http://hawvie.deviantart.com/
Ja, ik weet prima dat je dat niet moet doen, daarom kaartte ik het ook aan in dit topicHawVer schreef op zondag 08 februari 2009 @ 23:02:
@MatHack en Sebazzz, volgende artikel is zeker het lezen waard. Kort komt het er op neer waarom niet catchen op Exception niveau en hoe om te gaan met exception handling. Ik heb er veel van geleerd en zorgt er nu voor dat ik beter nadenk over het gebruik van excepties.
http://blogs.msdn.com/fxc..._Nick-Guerrera_5D00_.aspx
There's no place like 127.0.0.1
Zow... even wat posts over version control e.d. afgesplitst naar [alg] Ervaringen met Source Contol systemen.. Mocht ik nog wat vergeten zijn let me know
[ Voor 74% gewijzigd door Creepy op 10-02-2009 12:07 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
1
2
3
4
5
6
| if(!isset($_REQUEST['silent'])){ $_REQUEST['silent'] = true; } else if(isset($_REQUEST['silent']) && $_REQUEST['silent'] != true){ $_REQUEST['silent'] = true; } |
Waarheidstabel:
FALSE => true
TRUE => true
* => true
[ Voor 13% gewijzigd door Config op 10-02-2009 17:35 ]
Dat kan korterConfig schreef op dinsdag 10 februari 2009 @ 17:34:
PHP:
1 2 3 4 5 6 if(!isset($_REQUEST['silent'])){ $_REQUEST['silent'] = true; } else if(isset($_REQUEST['silent']) && $_REQUEST['silent'] != true){ $_REQUEST['silent'] = true; }
Waarheidstabel:
FALSE => true
TRUE => true
* => true
1
| $_REQUEST['silent'] = true; |
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
Ik zie hier nog weleens afschuwelijke logische constructies langskomen, maar deze slaat alles. Bedankt! Volgende keer dat ik iets zie, weet ik dat het altijd nog erger kan.Config schreef op dinsdag 10 februari 2009 @ 17:34:
PHP:
1 2 3 4 5 6 if(!isset($_REQUEST['silent'])){ $_REQUEST['silent'] = true; } else if(isset($_REQUEST['silent']) && $_REQUEST['silent'] != true){ $_REQUEST['silent'] = true; }
Waarheidstabel:
FALSE => true
TRUE => true
* => true
nvm
[ Voor 97% gewijzigd door MBV op 10-02-2009 18:03 ]
Niet helemaal. Als $_REQUEST['silent'] namelijk een niet-lege string is of een int/float ongelijk aan 0, dan houdt ie die waardeJaap-Jan schreef op dinsdag 10 februari 2009 @ 17:36:
Wat een gedoe om gewoonPHP:te doen.
1 $_REQUEST['silent'] = true;
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.
Blijft een omslachtige manier om dit te schrijven:.oisyn schreef op dinsdag 10 februari 2009 @ 18:18:
[...]
Niet helemaal. Als $_REQUEST['silent'] namelijk een niet-lege string is of een int/float ongelijk aan 0, dan houdt ie die waarde. In jouw oplossing wordt ie echter altijd true.
1
2
3
| if (!isset($_REQUEST['silent']) || !$_REQUEST['silent']) { $_REQUEST['silent'] = true; } |
Al denk ik dat de schrijver van de oorspronkelijke code de bedoeling had om de waarde in true te veranderen wanneer de waarde nog niet de waarde true had en geen rekening had gehouden met deze uitzondering die jij noemt. Dus Jaap-Jan's oplossing had waarschijnlijk dus ook voldaan.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Het moet denk ook wel een multithreaded omgeving zijn, anders controleer je ook niet nog een keer in de else of $_REQUEST['silent'] toch niet opeens stiekem gezet isConfig schreef op dinsdag 10 februari 2009 @ 17:34:
PHP:
1 2 3 4 5 6 if(!isset($_REQUEST['silent'])){ $_REQUEST['silent'] = true; } else if(isset($_REQUEST['silent']) && $_REQUEST['silent'] != true){ $_REQUEST['silent'] = true; }
Waarheidstabel:
FALSE => true
TRUE => true
* => true
“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 wil geloof ik niet weten hoeveel recursieve else's jij gebruikt in een multithreaded app. Dat gaat denk ik richting oneindig ofzo?rwb schreef op dinsdag 10 februari 2009 @ 20:46:
[...]
Het moet denk ook wel een multithreaded omgeving zijn, anders controleer je ook niet nog een keer in de else of $_REQUEST['silent'] toch niet opeens stiekem gezet is
Want volgens jouw theorie kan tussen de check en de daadwerkelijke uitvoering van de code nog steeds de status veranderen dus nog maar eens een keertje controleren en nog een keer en nog een keer....
Verder denk ik dat je de reactie van rwb te serieus neemt
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.
[ Voor 50% gewijzigd door Zoijar op 11-02-2009 00:02 ]
Reageer je nu op .oisyn? Want ik denk dat 'ie geen double-checked locking bedoeld, maar een spinlock.Zoijar schreef op woensdag 11 februari 2009 @ 00:02:
double-checked locking (considered harmful)Ik wil toch nog steeds een keer een paper publiceren met een "considered harmful" titel....
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
1
2
| // Wait while SPI transfer is in progress while (!(*SPI_STATUS & 0x00000001)) ; |
Inderdaad niet met geneste if's want dat is nogal zinloos als je niet iets anders doet tussen de if/else
[ Voor 3% gewijzigd door Woy op 11-02-2009 09:55 ]
“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.”
Nee, meer in het algemeen op twee keer exact hetzelfde checken achter elkaarJaap-Jan schreef op woensdag 11 februari 2009 @ 00:09:
[...]
Reageer je nu op .oisyn? Want ik denk dat 'ie geen double-checked locking bedoeld, maar een spinlock.
Ik heb het niet over double checked locking. Ik heb het over lock-free code. Zoals bijvoorbeeld het pushen van een object op een stack / linked list mbv test-and-set/compare-and-swap operaties.Zoijar schreef op woensdag 11 februari 2009 @ 00:02:
double-checked locking (considered harmful)Ik wil toch nog steeds een keer een paper publiceren met een "considered harmful" titel....
[ Voor 3% gewijzigd door .oisyn op 11-02-2009 10:44 ]
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.
1
2
3
4
5
6
7
| int counter = 0; //... heel veel spaghetti code counter = ++counter; //nog meer spaghetti code ... |
Kater? Eerst water, de rest komt later
Het zou pas mooi zijn als het er zo stondflux_w42 schreef op vrijdag 13 februari 2009 @ 13:55:
Iemand heeft blijkbaar het nut van short notations niet helemaal door![]()
![]()
Java: counter.java
1 2 3 4 5 6 7 int counter = 0; //... heel veel spaghetti code counter = ++counter; //nog meer spaghetti code ...
1
2
3
4
5
6
7
| int counter = 0; //... heel veel spaghetti code counter = counter++; //nog meer spaghetti code ... |
“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.”
Wat is hier nou precies mis mee? Had hij counter++ moeten gebruiken of mis ik iets volledigflux_w42 schreef op vrijdag 13 februari 2009 @ 13:55:
Iemand heeft blijkbaar het nut van short notations niet helemaal door![]()
![]()
Java: counter.java
1 2 3 4 5 6 7 int counter = 0; //... heel veel spaghetti code counter = ++counter; //nog meer spaghetti code ...
Hoe werkt dat in Java? In C++ ben je in dit geval overgeleverd aan de keuzes van de compilerWoy schreef op vrijdag 13 februari 2009 @ 14:11:
[...]
Het zou pas mooi zijn als het er zo stond
Java: counter.java
1 2 3 4 5 6 7 int counter = 0; //... heel veel spaghetti code counter = counter++; //nog meer spaghetti code ...
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:Quincy5 schreef op vrijdag 13 februari 2009 @ 14:12:
[...]
Wat is hier nou precies mis mee? Had hij counter++ moeten gebruiken of mis ik iets volledig
1
| ++counter; |
1
| counter += 2; |
[ Voor 66% gewijzigd door kenneth op 13-02-2009 14:15 ]
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Stel counter = 10;Quincy5 schreef op vrijdag 13 februari 2009 @ 14:12:
[...]
Wat is hier nou precies mis mee? Had hij counter++ moeten gebruiken of mis ik iets volledig
++counter verhoogt counter voor uitvoering al naar 11;
counter++ verhoogt counter na uitvoering naar 11;
In dit geval, counter = ++counter, dan is "counter =" compleet nutteloos omdat het al 11 is. Dit komt op hetzelfde neer als counter = counter.
'You like a gay cowboy and you look like a gay terrorist.' - James May
Snap het nog steeds niet helemaal, maar in C is counter++ equivalent aan counter += 1. Is dit in Java anders of is dit een foutje?
Edit:

[ Voor 24% gewijzigd door Quincy5 op 13-02-2009 14:21 . Reden: phyxion's uitleg ]
Ik weet niet precies hoe het gedefineerd is eigenlijk. Nou ik er over nadenk is het inderdaad nog gekker dan dat ik bedoelde.oisyn schreef op vrijdag 13 februari 2009 @ 14:15:
[...]
Hoe werkt dat in Java? In C++ ben je in dit geval overgeleverd aan de keuzes van de compiler.
[ Voor 20% gewijzigd door Woy op 13-02-2009 14:36 ]
“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.”
int counter = 1;.oisyn schreef op vrijdag 13 februari 2009 @ 14:15:
[...]
Hoe werkt dat in Java? In C++ ben je in dit geval overgeleverd aan de keuzes van de compiler.
counter = counter++;
counter is nu nog steeds 1, java doet eerst counter assignment, dan pas increment
int counter = 1;
counter = ++counter;
counter is nu 2 omdat de increment nu voor de assignment gebeurt.
In beide gevallen is het gewoon domme code, want doe je counter++ of ++ counter zonder assignments ergens zit je altijd safe
Neem je whisky mee, is het te weinig... *zucht*
Dit is een tegenspraak. Als ie aan het eind pas de increment doet dan is het 2. Ik denk dat je bedoelt dat hij eerst de increment doet, en vervolgens de oude waarde aan counter assignt (wat de increment weer teniet doet). Het is dan trouwens wel zo dat een andere thread eventueel tijdelijk een 2 kan zienmomania schreef op vrijdag 13 februari 2009 @ 14:23:
[...]
int counter = 1;
counter = counter++;
counter is nu nog steeds 1, java doet eerst counter assignment, dan pas increment
In C en C++ is alleen gedefinieerd dat de bijwerking van de post-increment iig plaats vindt vóór het volgende sequence point. Dat sequence-point is hier het einde van de statement, dus je weet niet of het nou voor of na de assignment is.
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.
1
2
3
4
5
6
| ldsfld int32 IncrementTest.Program::counter dup ldc.i4.1 add stsfld int32 IncrementTest.Program::counter stsfld int32 IncrementTest.Program::counter |
Dus dan heb je idd een korte periode ( tussen regel 5 en 6 ) waarin counter 2 is
[ Voor 3% gewijzigd door Woy op 13-02-2009 14:58 ]
“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.”
1
2
3
4
5
6
7
8
9
10
11
12
13
| Preincrement: 0: iconst_0 1: istore_1 2: iinc 1, 1 5: iload_1 6: istore_1 Postincrement: 0: iconst_0 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1 |
Bij Java dus niet anders. Bij postincrement is counter tussen de iinc en de istore_1 even 1.
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
1
2
3
| return key.startsWith(prefix + ".") || key.startsWith(prefix) || key.equals(prefix); |
Mmmm alleen de eerste regel was goed geweest denk ik
key & prefix zijn beide String
[ Voor 7% gewijzigd door Snake op 13-02-2009 18:43 ]
Going for adventure, lots of sun and a convertible! | GMT-8
Je kan maar nooit zeker genoeg zijn he! ;-)Snake schreef op vrijdag 13 februari 2009 @ 18:42:
Java:
1 2 3 return key.startsWith(prefix + ".") || key.startsWith(prefix) || key.equals(prefix);
Mmmm alleen de eerste regel was goed geweest denk ik![]()
key & prefix zijn beide String
[ Voor 7% gewijzigd door .oisyn op 14-02-2009 00:31 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
"een". volgens mij is het in C# net zo goed ongedefinieerd, maar ik kan me vergissen.
Mijn lokale versie die bij VC 2008 komt zegt idd:
Echter, in de online versie van die pagina staat dat niet, en in de change history onderaan die pagina staat:When two operators with the same precedence are present in an expression, they are evaluated based on associativity. Left-associative operators are evaluated in order from left to right. For example, x * y / z is evaluated as (x * y) / z. Right-associative operators are evaluated in order from right to left. The assignment operators and the tertiary operator (?: ) are right-associative. All other binary operators are left-associative. However, C# standard does not specify when, in an expression, the "set" portion of an increment instruction is executed. For example, the output of the following example code is 6:
C#:
1 2 3 int num1 = 5; num1++; System.Console.WriteLine(num1);
However, the output of the following example code is undefined:
C#:
1 2 3 int num2 = 5; num2 = num2++; //not recommended System.Console.WriteLine(num2);
Aangezien de = operator rechts-associatief is, wordt num++ éérst geevalueerd.Removed erroneous statement about undefined output.
[ Voor 3% gewijzigd door .oisyn op 14-02-2009 03:29 ]
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.
Dan staat er idd dit:
1
2
3
4
5
6
| int postfixplusplus(ref int x) { int tmp = x; x = x + 1; return tmp; } num2 = postfixplusplus(ref num2); |
1
2
3
4
5
6
| $file = 'forum_view.tpl'; /////////////////////////// $file = 'index.php' //voor error debugging include($file); |
niet echt precies mijn code, maar het geeft een voorbeeld
Verwijderd

1
2
3
4
5
6
7
8
9
10
11
| int main() { int a = 23; int *b = &a; int &c = *b; c = 47 & *b; c = a * *b - c; return a; } |
Dit heb ik uiteraard expres zo geschreven. Je ziet hier de '*' en de '&' beide op 3 verschillende manieren gebruikt worden. De '*' als pointer declaratie, dereferencing operator, en vermenigvuldigingsoperator. De '&' als address-of operator, reference declaratie, en bitwise AND operator. Geen wonder dat C++ nogal verwarrend is voor beginners.
Ik stel voor om een mini-uitbreiding te maken, die voor deze 6 verschillende taken 6 verschillende tekens gebruikt. Volgens mij hebben we nog '@', '#', '$', '%' over.
[ Voor 4% gewijzigd door Verwijderd op 22-02-2009 05:46 ]
% = modulus volgens mij
# = is commentaar
$ zou je nog eventueel kunnen gebruiken, maar @ zou ik niet gebruiken in programmeertalen (intuïtie)
[ Voor 5% gewijzigd door dcm360 op 22-02-2009 10:08 ]
Dit komt me bekend voor. Toevallig geen code van Texas Instruments binnen een MV Kernel?Woy schreef op woensdag 11 februari 2009 @ 09:14:
Het was inderdaar niet al te serieus bedoeld ( vandaar de), maar in de code waarin ik nu bezig ben staan toch wel zulke dingen.
C:
1 2 // Wait while SPI transfer is in progress while (!(*SPI_STATUS & 0x00000001)) ;
Inderdaad niet met geneste if's want dat is nogal zinloos als je niet iets anders doet tussen de if/else
Voorbeeldjes van hun code:
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
| // SPI_controller_driver.c static struct XXX_spi_config_t spi_config; // niet geinitialiseerd! static int XXX_spi_setup_transfer(struct spi_device* spi, ...) { ... spi->controller_data = NULL; spi->controller_data = &spi_config; /* moet zijn: * if (spi->controller_data == NULL) * spi->controller_data = &spi_config */ ... } // some_spi_eeprom_driver.c static int spi_generic_config(XXX_spi_config_t* spi_cfg) { // volledige initialisatie van spi_cfg } static int __devinit eeprom_probe(struct spi_device* spi) { ... // controller data van 1 bepaalde controller wijzigen binnen een device // driver en het dan nog _generic_ durven noemen! spi_generic_config(spi->controller_data); ... } |
Dit gebeurde in de code flow:
- de default config struct was niet geinitialiseerd en de controller data stond op NULL
- in de XXX_spi_setup_transfer werd vervolgens de default toegewezen.
- deze default werd dan ingevuld in de EEPROM driver.
Alles werkt! Tot je een ander SPI device gebruikt natuurlijk!
Het staat dan bovendien nog eens vol met
1
| while (XXX_spi_base->SPI_BUF & SPI_SPIBUF_RXEMPTY_MASK) ; |
Waar je te tegenaan loopt als je bepaalde settings niet juist instelt. Mooie trial and error dus als je je eigen SPI device wilt gaan gebruiken
Verbaast het je als dan doorheen hun code volgend statement staat:
1
| MODULE_AUTHOR("Texas Instruments India"); |
[ Voor 59% gewijzigd door H!GHGuY op 22-02-2009 11:06 ]
ASSUME makes an ASS out of U and ME
Het is niet (alleen) om het veiliger te maken, maar vooral om het überhaupt werkend te maken voor applicaties die een andere dan de engelse taal gebruiken. Voor als je perse met bytes wilt werken kun je (in java) het type 'byte' gebruiken.Verwijderd schreef op zondag 22 februari 2009 @ 05:45:
Ik vind C++ een hele mooie, logische, en krachtige taal. Het is prettig om te weten dat een 'char' gewoon een byte in je geheugen is, waarvan je het adres kan opvragen. Geen abstracties en beperkingen die het veiliger moeten maken zoals bij Java en C#.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
(Toegegeven, architecturen met bytes van meer dan 8 bits zijn behoorlijk zeldzaam tegenwoordig.)
$ kan gebruikt worden in namen van variabelen en functies.g4wx3 schreef op zondag 22 februari 2009 @ 10:03:
$ zou je nog eventueel kunnen gebruiken, maar @ zou ik niet gebruiken in programmeertalen (intuïtie)
! is not en ^ (pointer declaratie + dereferencing in Delphi) is xor, dus @ zou de enige optie zijn eigenlijk.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Niet in C of C++, maar # is wel een preprocessor symbol.g4wx3 schreef op zondag 22 februari 2009 @ 10:03:
# = is commentaar
Alleen in PHP vziw, dus lekker boeienddcm360 schreef op zondag 22 februari 2009 @ 10:08:
@ wordt in (enkele?) programmeertalen gebruikt om af te dwingen dat er geen foutmeldingen gegeven worden
Niet in C of C++.IceManX schreef op zondag 22 februari 2009 @ 14:36:
[...]
$ kan gebruikt worden in namen van variabelen en functies.
Overigens gaat DOT's verhaal ook op voor % en ^ in C++/CLI.
[ Voor 31% gewijzigd door .oisyn op 22-02-2009 16:45 ]
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.
Verwijderd
Is een byte (by eight) niet per definitie 8 bits?Soultaker schreef op zondag 22 februari 2009 @ 13:31:
Dat is dus weer geen byte, maar een 8-bits integer.
(Toegegeven, architecturen met bytes van meer dan 8 bits zijn behoorlijk zeldzaam tegenwoordig.)
En in C#.oisyn schreef op zondag 22 februari 2009 @ 16:43:
[...]
Alleen in PHP vziw, dus lekker boeiend. Het gaat hier om C en C++.
1
| string test = @"ejkjke\eee\ed"; |
http://hawvie.deviantart.com/
Verwijderd
HawVer schreef op zondag 22 februari 2009 @ 17:06:
[...]
En in C#
C#:
1 string test = @"ejkjke\eee\ed";
Klopt. Niks 'nasty' aan.Verwijderd schreef op zondag 22 februari 2009 @ 17:20:
Dit is geen afdwingen van foutmeldingen voor zover ik weet, maar voorkomt escape sequences
[...]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Helaas:Verwijderd schreef op zondag 22 februari 2009 @ 16:48:
[...]
Is een byte (by eight) niet per definitie 8 bits?
En een byte kan 2..* bits bevatten afhankelijk van architectuur en/of OS van een systeem. Dat het sinds zeg een jaar of 1970 op 99.99999999% van de computers 8 bits is - tjaThe term "byte" comes from "bite," as in the smallest amount of data a computer could "bite" at once.
Verwijderd
Dit heeft toch niets te maken maken met de associatieviteit van de = operator? Het gaat er hier om dat de de postfix ++ operator een hoger precedence heeft dan de assignment operator. De 'precedence' bepaalt welke operator een operand 'wint':Aangezien de = operator rechts-associatief is, wordt num++ éérst geevalueerd.
1
2
| num2 = (num2++); // als ++ operator hoger precedence heeft (num2 = num2)++; // als assignment operator hogere precedence heeft |
Aangezien de assignment operator de laagst mogelijke precedence heeft geldt dus de eerste situatie: eerst wordt (num2++) geevalueerd. Maar aangezien de postfix operator inhoudt dat de waarde eerst wordt gebruikt en dan pas wordt verhoogd, zou je verwachten dat er dit gebeurt:
1
2
| num2 = num2; num2++; |
Op zich niet, ware het niet dat C# definieert dat de order of evaluation gelijk is aan de associativiteit van de operatorVerwijderd schreef op zondag 22 februari 2009 @ 18:54:
[...]
Dit heeft toch niets te maken maken met de associatieviteit van de = operator?
Wat nog niet wil zeggen wanneer de side-effects van de postfix increment daadwerkelijk worden afgerond. C++ kent dezelfe associativiteit en precedence, maar toch is de order of evaluation niet gedefinieerd waardoor een expressie als n = n++ resulteert in undefined behaviour. Omdat het niet duidelijk is wanneer de nieuwe waarde van n na ophoging daadwerkelijk wordt weggeschreven - dat kan zowel voor als na de assignment. Bij C# is het altijd ervoor.Het gaat er hier om dat de de postfix ++ operator een hoger precedence heeft dan de assignment operator. De 'precedence' bepaalt welke operator een operand 'wint'
Als de postfix increment een lagere precedence zou hebben dan de assignment dan is die ambiguiteit er niet eens meer (moet de assignment operator wel resulteren in een l-value anders kan het al niet eens)
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.
Wel in mijn MinGW GCC installatie. Ik had het al getest, anders had ik het nooit met zoveel zekerheid durven zeggen.
More than meets the eye
There is no I in TEAM... but there is ME
system specs
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.
Welke zou jij doen? (pseudocode)
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
| abstract class A { string _x; public string X { get { return _x; } set { _x = value; } } // nog veel meer properties public abstract string[] Methode(int getal); } // implementatie class B : A { public B() { _x = "test"; } public string[] Methode( int getal ) { // code } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| interface A { public string GetX(); public string SetX(string x); public string[] Methode( int getal ); } // impl class B : A { string _x; public string GetX() { return _x; } public string SetX(string x) { return _x = x; } public string[] Methode( int getal ) { // code } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| A aah = null; if (radio_B.Checked) { aah = new B(); } else if (radio_C.Checked) { aah = new C(); } //etc aah.Property = x; aah.Andere_prop = y; if (aah.KanIets) { aah.DoeIets(); } else { aah.DoeNiets(); } int ander_getal = aah.DoeNogWat(getalletje); |
[ Voor 88% gewijzigd door Sebazzz op 22-02-2009 21:04 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Niet voor niets heet een halve byte ook een nibble.
@ als dereference operator.Verwijderd schreef op zondag 22 februari 2009 @ 05:45:
Ik vind C++ een hele mooie, logische, en krachtige taal. Het is prettig om te weten dat een 'char' gewoon een byte in je geheugen is, waarvan je het adres kan opvragen. Geen abstracties en beperkingen die het veiliger moeten maken zoals bij Java en C#. Maar die syntax...
C++:
1 2 3 4 5 6 7 8 9 10 11 int main() { int a = 23; int *b = &a; int &c = *b; c = 47 & *b; c = a * *b - c; return a; }
Ik stel voor om een mini-uitbreiding te maken, die voor deze 6 verschillende taken 6 verschillende tekens gebruikt. Volgens mij hebben we nog '@', '#', '$', '%' over.
' of ` kan als address-of operator.
Even denken wat voor teken voor een reference. # kan niet, zoals .oisyn al opmerkte. Je ontkomt eigenlijk niet aan het dubbel definieren van operators, want voor de rest zijn alle 'speciale' basis ASCII- tekens wel in gebruik in C en C++.
$ om een pointervariabele te maken.
* en & houden gewoon hun 'normale' definitie van vermenigvuldigen en bitwise-AND.
Ik had zelf om die reden zoveel moeite met het begrijpen van pointers en references in C en/of C++. Ik had eerst niet door dat die & en * dubbel gebruikt voor voor definitie en address-of en deference operator.
[ Voor 93% gewijzigd door Jaap-Jan op 22-02-2009 21:45 ]
| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett
(MSN gesprek)(17:54:45) JaNuZ -:code:
1 2 3 4 5 6 <? $msg = strtolower($_GET['msg']); if($msg == 'Start'){ echo "$msg"; } ?>
(17:54:48) JaNuZ -: dat werkt niet eens
- de variabele tussen double quotes zetten als je enkel de variabele print
oh, en de mierenneukerparser (error level USER_SPILLEDMILK):
- gebruik van short tags (<? ?>)
En ja, dat hij een hoofdletter in z'n if-je heeft staan zie ik wel, maar dat is moeilijk een slecht programmeervoorbeeld te noemen. Zo'n dingen gebeuren nu eenmaal.
[ Voor 30% gewijzigd door link0007 op 03-03-2009 18:32 ]
IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;
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.
Bij onze supermarkt gebruiken we een toepassingen programma dat direct op de database zit. Daarin worden verschillende applicaties aangeboden, onder andere het DASA (Decentraal Assortiments Systeem AH). Hierin staan alle producten van de supermarkt.
Het leuke van dit systeempje is dat je in het programma alleen functietoetsen kan gebruiken die gedefineerd zijn (logisch) maar de functietoetsen die niet gedefineerd zijn, geeft hij een grote error op. Daarnaast staan veel velden die wél readonly moeten zijn maar niet zo gemarkeerd zijn (dus gewoon een normaal tekstveld zijn). Als je erin typt krijg je errors. Om er wat in te typen moet je F7 drukken.
Daarnaast staan er geen sneltoetsen in de menu's vermeld terwijl die er wél zijn. En bij een vraag messagebox krijg je een warning icoontje, en bij een informatie messagebox een stop icoontje.
Daarnaast is het denk ik ook niet beveiligd. Als je alles van chocomel wilt weten typ je '%chocomel%' (note de '%' ofwel een interne LIKE). Maar met ' OR '1'='1 krijg je alles!
Het uren programma zit ook goed in elkaar. Deze pakt alleen hele kwartieren (vermoedelijk wordt het dus intern naar decimalen omgerekent) en 10:48 past er dus niet in.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
De applicatie is dus niet beveiligd tegen sql injection.Sebazzz schreef op dinsdag 03 maart 2009 @ 21:53:
Daarnaast is het denk ik ook niet beveiligd. Als je alles van chocomel wilt weten typ je '%chocomel%' (note de '%' ofwel een interne LIKE). Maar met ' OR '1'='1 krijg je alles!Gelukkig hebben ze een hele mooie optie hiervoor, namelijk aparte accounts voor de database. En deze dan geen DELETE rechten geven om het probleem op te lossen.
Het is dan te hopen dat die accounts dus ook geen drop / truncate rechten hebben ;-)
Maar zelfs met update statements kan je het systeem overhoop halen.
Als die applicatie dus ook bepaald welke prijzen aangerekend worden, is dit eigenlijk wel een vrij groot risico ...
What about UPDATE? En DROP?Sebazzz schreef op dinsdag 03 maart 2009 @ 21:53:
Niet eens een slecht programmeervoorbeeld maar eerder een slecht user interface design.
Bij onze supermarkt gebruiken we een toepassingen programma dat direct op de database zit. Daarin worden verschillende applicaties aangeboden, onder andere het DASA (Decentraal Assortiments Systeem AH). Hierin staan alle producten van de supermarkt.
Het leuke van dit systeempje is dat je in het programma alleen functietoetsen kan gebruiken die gedefineerd zijn (logisch) maar de functietoetsen die niet gedefineerd zijn, geeft hij een grote error op. Daarnaast staan veel velden die wél readonly moeten zijn maar niet zo gemarkeerd zijn (dus gewoon een normaal tekstveld zijn). Als je erin typt krijg je errors. Om er wat in te typen moet je F7 drukken.
Daarnaast staan er geen sneltoetsen in de menu's vermeld terwijl die er wél zijn. En bij een vraag messagebox krijg je een warning icoontje, en bij een informatie messagebox een stop icoontje.
Daarnaast is het denk ik ook niet beveiligd. Als je alles van chocomel wilt weten typ je '%chocomel%' (note de '%' ofwel een interne LIKE). Maar met ' OR '1'='1 krijg je alles!Gelukkig hebben ze een hele mooie optie hiervoor, namelijk aparte accounts voor de database. En deze dan geen DELETE rechten geven om het probleem op te lossen.
Het uren programma zit ook goed in elkaar. Deze pakt alleen hele kwartieren (vermoedelijk wordt het dus intern naar decimalen omgerekent) en 10:48 past er dus niet in.
Going for adventure, lots of sun and a convertible! | GMT-8
Wie gaat er dan ook op de minuut nauwkeurig uren bijhouden? Hele kwartieren vind ik al redelijk nauwkeurig. Maar het zou idd mooier zijn geweest als dat automatisch werd afgerond naar het dichtsbijzijnde kwartier ofzo.Sebazzz schreef op dinsdag 03 maart 2009 @ 21:53:
Het uren programma zit ook goed in elkaar. Deze pakt alleen hele kwartieren (vermoedelijk wordt het dus intern naar decimalen omgerekent) en 10:48 past er dus niet in.
Kater? Eerst water, de rest komt later
Better to remain silent and be thought a fool then to speak out and remove all doubt.
Enorme WTF. Elke persoon die zegt dat het met het beperken van DELETE rechten opgelost is moet ter plekke ontslagen worden en mag voor de rest van zijn leven tomaten plukken.Sebazzz schreef op dinsdag 03 maart 2009 @ 21:53:
Niet eens een slecht programmeervoorbeeld maar eerder een slecht user interface design.
...
Daarnaast is het denk ik ook niet beveiligd. Als je alles van chocomel wilt weten typ je '%chocomel%' (note de '%' ofwel een interne LIKE). Maar met ' OR '1'='1 krijg je alles!Gelukkig hebben ze een hele mooie optie hiervoor, namelijk aparte accounts voor de database. En deze dan geen DELETE rechten geven om het probleem op te lossen.
{signature}
Dat lijkt me vrij overbodig, bekijk de code als volgt:Verwijderd schreef op zondag 22 februari 2009 @ 05:45:
C++:
1 2 3 4 5 6 7 8 9 10 11 int main() { int a = 23; int *b = &a; int &c = *b; c = 47 & *b; c = a * *b - c; return a; }
Ik stel voor om een mini-uitbreiding te maken, die voor deze 6 verschillende taken 6 verschillende tekens gebruikt. Volgens mij hebben we nog '@', '#', '$', '%' over.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| int main() { // a is een integer. int a = 23; // b is een POINTER naar een integer, geïnitialiseerd met het ADRES van a. int * b = &a; // c is een REFERENCE naar een integer, geïnitialiseerd met de WAARDE van de pointer naar b. int & c = *b; c = 47 & (*b); c = a * (*b) - c; return a; } |
Bij de declaratie van de variabele gaat het steeds om een pointer of reference, bij het initialiseren of toewijzen gaat het steeds om het adres of waarde. Verder plaats ik bij de declaratie de * of & apart omdat het een woord op zich is en niet lijkt op een adres of waarde, die tegen het type laten plakken vind ik ook niet netjes.
Het toevoegen van extra symbolen voor deze operaties maakt het meer verwarrend of drukker, je gaat namelijk nog meer te begrijpen symbolen voorzien voor zaken die slechts te maken hebben met twee dingen: Refereren en de-refereren.
(Verwarring met de vermenigvuldiging-operator heb ik nog niet weten voorkomen)
1
2
3
| int* b, c; c = 5; b = &c; |
c is een int, b is een pointer. Daar heb ik ooit heel lang naar gezocht...
1
2
3
4
| int const a, b; // b: const int int const * a, b; // b: const int int * const a, b; // b: int int const * const a, b; // b: const int |
Wmb had een definitie gewoon bestaan uit een type gevolgd door een of meer variabel-namen. Ook voor pointers naar functies e.d.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| // dus niet int(*bar)[3]; void (*foo)(); // maar int[3]* bar; void () * foo; // en dus ook niet int (*foo(float(*(*bar)(int))[5])[3] { } // maar int[3]* (float[5]* (int) * bar) foo { } // oftewel, een functie 'foo' met 1 parameter 'bar' (wat een pointer is naar een functie // die een int accepteert en een pointer naar float[5] returnt) en als returntype een pointer // naar int[3] |
Het slaat natuurlijk nergens op dat het hoofd-type van de declaratie toevallig als return-waarde wordt genomen. Ik bedoel:
1
| int a, (*b)(), c; |
Wat heeft int überhaupt nog met b te maken, behalve dat het toevallig de returntype is van die functiepointer?
[ Voor 25% gewijzigd door .oisyn op 04-03-2009 12:09 ]
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.
Verwijderd
DASA wordt bij een heule boel Albert Heijns gebruikt, zo zijn er nog wel tig voorbeelden te noemen van enorme pakketten waar enorme stupiditeiten in zitten. De gewoonste zaak van de wereld hoor.Voutloos schreef op woensdag 04 maart 2009 @ 09:10:
[...]
Enorme WTF. Elke persoon die zegt dat het met het beperken van DELETE rechten opgelost is moet ter plekke ontslagen worden en mag voor de rest van zijn leven tomaten plukken.
Maar daarom geen minder grote WTF!Verwijderd schreef op woensdag 04 maart 2009 @ 12:29:
[...]
DASA wordt bij een heule boel Albert Heijns gebruikt, zo zijn er nog wel tig voorbeelden te noemen van enorme pakketten waar enorme stupiditeiten in zitten. De gewoonste zaak van de wereld hoor.
“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 vermoed overigens dat het niet kunnen gebruiken van Ctrl+A (Alles selecten) in een veld (en meer standaard functietoetsen danwel niet gedefineerde functie) een voorbeeld van goed bedoelde gebruiksvriendelijkheid zijn want je krijgt de melding om dan voor hulp op Ctrl+F1 te drukken.
Wat ook heel vervelend is dat normaal tabben door een formulier niet mogelijk is terwijl het allemaal standaard WinForms zijn. De tab toets wordt bij bepaalde velden gewoon geblokkeerd.
[ Voor 21% gewijzigd door Sebazzz op 04-03-2009 14:50 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Verwijderd
1
| addslashes(htmlentities(md5($_REQUEST["txtWacht"]))) |
1
2
3
4
5
6
7
| if (isset($_GET['t'])) { //doe iets } else if (isset($_GET['i'])) { if (isset($_GET['t'])) { // doe iets } } |
En zo staan er nog wel een hoop tussen...
[ Voor 22% gewijzigd door Sebazzz op 04-03-2009 15:47 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
^dit. Hetzelfde geldt voor OOP, dat moet je gewoon 'zien', doorhebben, snappen, etc. Dat, en toepassen wat slimme mensen zeggen,Sebazzz schreef op woensdag 04 maart 2009 @ 15:21:
Dat krijg je als je gewoon het essentiële inzicht mist dat je voor programmeren nodig hebt. Je kan het of je kan het niet. Je kan het dan wel vaak beter, maar je moet als je code leest de complete mogelijke flow van de code in één klap kunnen doorzien want anders zal je dit soort fouten maken en imho nooit goed programmeren. Programmeren is gewoon een talent. Je kan piano spelen leren ja, maar je zal nooit zo goed worden als Wibi. Dit klinkt wat hard, maar het is mijn mening![]()
Talent is voor 3/4 gewoon hard oefenen. Mensen die heel goed piano kunnen spelen, hebben dat op jonge leeftijd al zoveel gedaan, dat haal je als volwassene bijna niet meer in.Sebazzz schreef op woensdag 04 maart 2009 @ 15:21:
Programmeren is gewoon een talent. Je kan piano spelen leren ja, maar je zal nooit zo goed worden als Wibi. Dit klinkt wat hard, maar het is mijn mening![]()
Talent is talent.
Er zijn kinderen zijn die op extreem jonge leeftijd al heel vaardig zijn in bijv. piano spelen, terwijl ze nog niet de tijd gehad hebben om veel te kunnen oefenen.
Wat betreft oefenen heb je natuurlijk wel een punt: Oefenen icm talent zorgt voor vaardigheid. Hoe minder talent, hoe harder je moet oefenen om een bepaald niveau te halen. Hoe meer talent, hoe minder je hoeft te oefenen om hetzelfde niveau te halen.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Neemt niet weg dat talent beter tot z'n recht komt bij goed oefenen, en dat het dus niet wil zeggen dat iemand die meer getalenteerd is ook per definitie beter is. Maar hij zou wel beter kunnen zijn.
Interessant leesvoer over talent bij programmeren
.edit: @kenneth: ja dat zeg ik toch
[ Voor 3% gewijzigd door .oisyn op 04-03-2009 17:09 ]
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 heb gelezen (krant, waarschijnlijk NRC next) dat kinderen die talent hebben voor pianospelen de mogelijkheid hebben om goed piano te kunnen spelen. Geef ze een stel ouders dat veel klassieke muziek luistert, vaak zelf piano speelt, en de mogelijkheid om achter die piano te kruipen, dan zullen ze op den duur goed kunnen spelen. Geef ze die kans niet, en ze zullen het, ook op latere leeftijd, slecht kunnen leren.
Maar dat talent is alleen 1/4 ofzo. Iemand met veel talent pikt het eerste stuk veel sneller op, en zal dus meer gemotiveerd zijn om verder te oefenen. Als zo iemand daardoor 5 uur per dag gaat oefenen, dan krijg je een Wibi de 2e. Had je mij (beetje talent) kunnen motiveren om 6 uur te oefenen, dan had ik misschien net zo goed gespeeld.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Private Function zeef(ByVal ZoekenTotGetal As Integer) As List(Of Integer) Dim priem As New List(Of Integer) 'lijst met priem getallen Dim Prime(ZoekenTotGetal) As Boolean '** Effe Dimme ** For I As Integer = 2 To ZoekenTotGetal Prime(I) = 1 '** Alles naar 1 ** For J As Integer = 2 To ZoekenTotGetal If I Mod J = 0 And I <> J Then Prime(I) = 0 '** Geen Priem dan 0 End If Next J If Prime(I) Then priem.Add(I) '** Zet op je form wat 1 is ** Next I Return priem End Function |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Private Function zeef(ByVal ZoekenTotGetal As Integer) As List(Of Integer) Dim filter(ZoekenTotGetal) As Boolean 'alle getalleen tot ZoekenTotGetal Dim priem As New List(Of Integer) 'lijst met priem getallen For I As Integer = 2 To ZoekenTotGetal If filter(I) = False Then 'als getal niet uitgefilterd is priem.Add(I) 'dan is het priem For J As Integer = I To ZoekenTotGetal Step I 'en filter je alle getallen met priemfactor eruit filter(J) = True Next End If Next Return priem End Function |
Dat zei je niet. En wij ontkennen niet dat veel oefenen belangrijk(er) is voor de ontwikkeling. Maar je zei dat 3/4e van het talent gewoon oefenen is. Waarschijnlijk bedoel je dus 3/4e van de vaardigheid is oefenen, en 1/4e is talent.MBV schreef op woensdag 04 maart 2009 @ 17:40:
Maar dat talent is alleen 1/4 ofzo.
Daarnaast stel ik: mensen met 0 talent kunnen oefenen wat ze willen, ze zullen nooit goed worden.
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 durf wel te zeggen dat de meeste rare constructies komen van mensen die een essentieel stukje talent of inzicht (natuurlijk is inzicht hebben ook een talent hoewel je het wel kan kweken) missen..oisyn schreef op woensdag 04 maart 2009 @ 18:06:
[...]
Daarnaast stel ik: mensen met 0 talent kunnen oefenen wat ze willen, ze zullen nooit goed worden.
Iets anders: Wat iedereen bij programmeren wel eens kan doen is stukken code overnieuw schrijven. Je implementeert een idee of een algoritme of wat dan ook. Je laat het voor wat het is, en een week of wat later schrijf je dat stuk code opnieuw. Gegarandeerd dat je er geen spijt van krijgt
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Mijn excuses voor de bewoording, maar dat was wel precies wat ik bedoelde. Dat wat mensen als talent zien (MBV kan heel goed piano spelen, echt een talent) is maar voor een klein deel erfelijk, en voor een heel groot deel oefening..oisyn schreef op woensdag 04 maart 2009 @ 18:06:
[...]
Dat zei je niet. En wij ontkennen niet dat veel oefenen belangrijk(er) is voor de ontwikkeling. Maar je zei dat 3/4e van het talent gewoon oefenen is. Waarschijnlijk bedoel je dus 3/4e van de vaardigheid is oefenen, en 1/4e is talent.
Daarnaast stel ik: mensen met 0 talent kunnen oefenen wat ze willen, ze zullen nooit goed worden.
En ook mensen die niet getalenteerd zijn in een gebied kan je dingen leren, mits ze graag willen (erg moeilijk om door het eerste stuk te gaan zonder talent) en intelligent genoeg zijn. Dan kan je intelligentie ook als talent zien, maar ik dacht niet dat we het daar over hadden.
Maar goed, ik ben geen deskundoloog op dat vlak, dus dikke kans dat ik er volledig naast zit. Ik hoop het niet, er zijn nog wat dingen die ik wil leren waar ik geen talent voor heb
[ Voor 3% gewijzigd door MBV op 14-03-2009 00:01 ]
Dit topic is gesloten.
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.