Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
In het voorbeeld is het argument itemsize een getal
1
2
3
4
5
6
7
8
9
10
11
12
| Sub Size(itemsize) Select case Len(itemsize) Case "1", "2", "3" Response.Write itemsize & " bytes" Case "4", "5", "6" Response.Write Round(itemsize/1000) & " Kb" Case "7", "8", "9" Response.Write Round(itemsize/1000000) & " Mb" End Select End Sub |
Speel ook Balls Connect en Repeat
Los van het feit dat er geen 1024/1048576 wordt gebruikt, wordt er naar de Len van itemsize gekeken (die dan impliciet gecast wordt naar string) en vervolgens gecompared in de switch met een string (die de len-return value dus weer zal casten naar een string). Het zal allicht werken (los van de afrondingsfout) maar...
En dan heb ik het nog niet gehad over de wel érg vage naam Size van de sub (waarbij Size volgens mij ook nog wel eens een reserved word zou kunnen zijn, maar dat weet ik even niet zeker).
De titel 'programmeur' is deze collega van je IMHO niet waardOnbekend schreef op maandag 17 november 2008 @ 23:37:
Ik kwam een stukje code tegen die een andere programmeur eventjes snel van het internet het afgeplukt.
Ik heb de bron van 't kwaad volgens mij ook
Daar gaat een naam op de blacklistThe Author
Misty Myslinski is a hired gun (read: contractor) saving corporate america from the tedium of menial tasks. She thinks that anything and everything should be done over the corporate intranet and is currently working to realize her vision. She also does freelance web-application development in her free minutes.
[ Voor 67% gewijzigd door RobIII op 17-11-2008 23:52 ]
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
Tsja, dat heet excessen zoeken...Zyppora schreef op donderdag 06 november 2008 @ 15:45:
[...]
Het wordt nog gekker als een (nieuwe) klant zegt 'wij gebruiken de string ':)' voor true en ':(' voor false', om maar een voorbeeld te noemen, en dat jij dan je webservice maar moet aanpassen om die waardes te slikken.
j/y/yes/true/1 zijn imho allemaal synoniemen voor elkaar, het controleren is er in 1 minuut ingebouwd en je bent gelijk compatibel met een heleboel andere systemen...
Eerlijk gezegd bouw ik dit soort dingen bij een webservice ofzo bijna altijd in, zolang ik intern maar 1 vorm heb maakt het mij weinig uit wat de externen zeggen, voorkomt in mijn ervaring een heleboel vragen en zolang je het goed en duidelijk documenteert ( dus in de NL handleiding een j of een 1, in de engelse handleiding een y of een 1 en in de franse handleiding true of een 1
Het is geen memo veld waar je allerlei troep in kan vinden het is een binary veld...
Een oui, of "o" dusGomez12 schreef op maandag 17 november 2008 @ 23:49:
een 1 en in de franse handleiding true of een 1
Boolean. Binary is iets anders (zie BLOB e.d.)Gomez12 schreef op maandag 17 november 2008 @ 23:49:
een binary veld...
[ Voor 32% gewijzigd door RobIII op 17-11-2008 23:52 ]
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
Aangezien klanten toch een implementatie voor het consumeren van de webservice moeten maken ( laten generenen ) is het toch niet teveel moeite om het gewoon als XML boolean te defineren? ( http://www.w3.org/TR/xmlschema-2/#boolean ). Je hebt het immers over een Boolean veld, niet over een string of een andere gelocaliseerde representatie. ( Al zie ik wel dat in de XML specificatie ook is vast gelegd dat lexical representation zowel true/false 1/0 mag zijnGomez12 schreef op maandag 17 november 2008 @ 23:49:
[...]
j/y/yes/true/1 zijn imho allemaal synoniemen voor elkaar, het controleren is er in 1 minuut ingebouwd en je bent gelijk compatibel met een heleboel andere systemen...
Anders heb je straks nog dat er piraten gebruik willen maken van de webservice moet je ook ( Aie Mate/ Arggggggggggh ) goed gaan keuren. Of wou je zeggen dat je ook al je Web Service methoden maar in alle verschillende talen moet gaan vertalen. Er is toch ook niemand die er over valt dat API calls gewoon in het engels zijn en gewoon een Boolean verwachten in plaats van een gelocaliseerde string? ( Behalve dan dat stomme VB in MS Office
[ Voor 10% gewijzigd door Woy op 18-11-2008 09:07 ]
“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.”
Niet eens zo zeer excessen als wel zien waar het fout kan gaan. Wat als klant A zegt dat een bepaalde waarde voor true moet staan, en klant B wil dat diezelfde waarde juist false moet voorstellen?Gomez12 schreef op maandag 17 november 2008 @ 23:49:
[...]
Tsja, dat heet excessen zoeken...
j/y/yes/true/1 zijn imho allemaal synoniemen voor elkaar, het controleren is er in 1 minuut ingebouwd en je bent gelijk compatibel met een heleboel andere systemen...
Eerlijk gezegd bouw ik dit soort dingen bij een webservice ofzo bijna altijd in, zolang ik intern maar 1 vorm heb maakt het mij weinig uit wat de externen zeggen, voorkomt in mijn ervaring een heleboel vragen en zolang je het goed en duidelijk documenteert ( dus in de NL handleiding een j of een 1, in de engelse handleiding een y of een 1 en in de franse handleiding true of een 1) en zolang je het maar gelijk converteert naar wat je zelf gebruikt dan zie ik het probleem niet echt.
Het is geen memo veld waar je allerlei troep in kan vinden het is een binary veld...
Het punt was dat er een webservice aangeboden wordt met een eenduidige API en dat daar niet bij elke nieuwe klant (of misschien zelfs bij elke klant die een upgrade uitvoert) die webservice aangepast moet worden. Op die manier maak je het onderhoud en doorontwikkeling onnodig moeilijk.
Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290
Sorry, persoonlijke vooroordelen spelen soms mee in software ontwikkeling, een franse vertaling zal er als het aan mij ligt nooit inkomen
Imho niet, maar in de dagelijkse praktijk tref ik gewoon veel klanten die dat wel als probleem zien. En zolang het redelijk eenduidig blijft ( j/ja y/yes true etc ) vind ik het een kleine moeite om het in de externe interface erbij te zetten. Zolang je het maar controleert en vertaalt op het moment dat je het intern brengt.rwb schreef op dinsdag 18 november 2008 @ 09:05:
[...]
Aangezien klanten toch een implementatie voor het consumeren van de webservice moeten maken ( laten generenen ) is het toch niet teveel moeite om het gewoon als XML boolean te defineren? ( http://www.w3.org/TR/xmlschema-2/#boolean ).
Kleine moeite van onze kant, groot plezier aan de klant zijn kant.
Zolang je maar duidelijk in de documentatie zet dat 0/1 de standaardwaarden zijn en dat de rest optioneel is zie ik het probleem niet echt, of je moet echt een purist zijn die nooit concessies voor een klant doet...
In de praktijk heb ik dat soort discussies juist eerder met 0/1 en true/false. Je wilt niet weten hoeveel diensten een 0 als false definieren en alles wat anders is als een 0 als true. Dan krijg je dus echt klant-discussies in de trant van : -1/2/3/4/5/6/7/8/9 is toch niet false dus moet het wel true zijn, accepteer dit dan ook gewoon alszijnde true. Dat is een punt waar ik heel stellig in ben, jij accepteer gewoon onze invoerconventies en anders heb je enkele eenduidige optionele alternatieven. Maar als het niet meer eenduidig wordt dan niet accepteren...Zyppora schreef op woensdag 19 november 2008 @ 12:17:
[...]
Niet eens zo zeer excessen als wel zien waar het fout kan gaan. Wat als klant A zegt dat een bepaalde waarde voor true moet staan, en klant B wil dat diezelfde waarde juist false moet voorstellen?
De webservice biedt ook een eenduidige API ( 0/1 ) dat er een paar synoniemen zijn toegevoegd aan de invoer kant verandert imho niets zolang het maar eenduidige synoniemen zijn.Het punt was dat er een webservice aangeboden wordt met een eenduidige API en dat daar niet bij elke nieuwe klant (of misschien zelfs bij elke klant die een upgrade uitvoert) die webservice aangepast moet worden. Op die manier maak je het onderhoud en doorontwikkeling onnodig moeilijk.
Ik wel, maar de andere partij niet altijd...Je hebt het immers over een Boolean veld, niet over een string of een andere gelocaliseerde representatie.
Ga bijv eens kijken naar een frans programma, ik geef je weinig kans dat de api calls in het engels zijn, of een duits binnenlands product, of een spaans product.Er is toch ook niemand die er over valt dat API calls gewoon in het engels zijn en gewoon een Boolean verwachten in plaats van een gelocaliseerde string? ( Behalve dan dat stomme VB in MS Office)
Sowieso kent niet elke implementatie van een product een boolean alszijnde een boolean, soms wordt er gewoon een gelocaliseerde string gebruikt omdat er iets "misbruikt" word
1
2
| foreach(object bla in pr2invokeinf.GetValue(pr2invoke))
Hoppeekeeee(bla); |
Altijd fijn, lekker duidelijk
[ Voor 3% gewijzigd door creator1988 op 28-11-2008 13:53 ]
Even afgezien van de uiterst originele functienamen en het bedroevende gebruik van variabelen etc is het zowiezo not done om in de for declaratie een functie aanroep te doen? Althans ik dacht altijd dat de forloop deze dan altijd valideerde net zolang tot deze niet meer klopt en dat het daarom dus ook beter was om een variabel te gebruiken waarin de waarde van de aanroep opgeslagen werd.creator1988 schreef op vrijdag 28 november 2008 @ 13:53:
code:
1 2foreach(object bla in pr2invokeinf.GetValue(pr2invoke)) Hoppeekeeee(bla);
Altijd fijn, lekker duidelijk
If it isn't broken, fix it until it is..
Dit is een foreach constructie en zoals Niemand Anders al zegt is dat geen probleem. Je bedoelt waarschijnlijk een volgende constructieWebgnome schreef op vrijdag 28 november 2008 @ 14:06:
[...]
Even afgezien van de uiterst originele functienamen en het bedroevende gebruik van variabelen etc is het zowiezo not done om in de for declaratie een functie aanroep te doen? Althans ik dacht altijd dat de forloop deze dan altijd valideerde net zolang tot deze niet meer klopt en dat het daarom dus ook beter was om een variabel te gebruiken waarin de waarde van de aanroep opgeslagen werd.
1
2
3
| for( int i = 0; i < DoSomeCalculation(); i++ ) { } |
Dat is inderdaad niet echt handig als DoSomeCalculation een zware berekening is.
“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
| for( int i = 0, j = DoSomeCalculation(); i < j; i++ ) { } |
correcter zijn.
Kater? Eerst water, de rest komt later
1
2
3
4
| foreach(var item in MyListBox.Items) { MyListBox.Items.Remove(item) } |
MyListBox.Items.Clear(); was denk ik iets handiger
Al zag ik dit soort constructies vaak, ik denk omdat het code is waar HEEL veel aan gewijzigd is, en het kan dus maar zo zijn dat er in die foreach nog iets met het te verwijderen ListItem werd gedaan. Maja, als je aan het refactoren bent, kijk dan ff verder dan je neus lang is...
Dat is ook wel een gevaarlijke constructie. Mischien dat het bij een LisBox goed gaat, maar bij een of andere collection heb je grote kans dat je een exception om je oren krijgt.Wijnbo schreef op maandag 01 december 2008 @ 08:26:
Gisteren een briljant stukje tegengekomen:
C#:
1 2 3 4 foreach(var item in MyListBox.Items) { MyListBox.Items.Remove(item) }
“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 aanpassen/verwijderen van een collection gaat toch altijd fout? Even denken, dan krijg je toch een Exception in de trend van "The List has been modified" o.i.d.?rwb schreef op maandag 01 december 2008 @ 09:16:
[...]
Dat is ook wel een gevaarlijke constructie. Mischien dat het bij een LisBox goed gaat, maar bij een of andere collection heb je grote kans dat je een exception om je oren krijgt.
[ Voor 20% gewijzigd door rickjehh op 01-12-2008 10:23 ]
Klopt.rickjehh schreef op maandag 01 december 2008 @ 10:21:
[...]
Het aanpassen/verwijderen van een collection gaat toch altijd fout? Even denken, dan krijg je toch een Exception in de trend van "The List has been modified" o.i.d.?
Oplossing is de lijst van achter naar voor doorlopen en dan de items verwijderen
Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three
Het aanpassen van een collection ( van het standaard framework ) terwijl je erdoor heen loopt met een iterator levert idd ( volgens mij ) altijd een exception op. Maar een andere implementatie van een Collection met een andere implementatie van de enumerator zou best ander gedrag kunnen vertonen.rickjehh schreef op maandag 01 december 2008 @ 10:21:
[...]
Het aanpassen/verwijderen van een collection gaat toch altijd fout? Even denken, dan krijg je toch een Exception in de trend van "The List has been modified" o.i.d.?
“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.”
Niet altijd. In java is het heel goed mogelijk om de lijst waar je doorheen itereert ook aanpast.rwb schreef op maandag 01 december 2008 @ 11:04:
[...]
Het aanpassen van een collection ( van het standaard framework ) terwijl je erdoor heen loopt met een iterator levert idd ( volgens mij ) altijd een exception op. Maar een andere implementatie van een Collection met een andere implementatie van de enumerator zou best ander gedrag kunnen vertonen.
1
2
3
4
5
6
| Iterator it = items.iterator(); while (it.hasNext()){ it.next(); //do something it.remove(); } |
Punt hierbij is dat de modificaties op de lijst ook via de iterator lopen. Lijst aanpassingen blijven dus binnen een bepaalde context waardoor de iterator er mee om weet te gaan.
Zou je de onderliggende lijst op een andere manier aanpassen dan krijg je in Java inderdaad ook een 'onderliggende lijst is aangepast' exception
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Volgens mij ook idd. Wat overigens wel kan is een item uit een lijst verwijderen d.m.v. een normale for-lus.rwb schreef op maandag 01 december 2008 @ 11:04:
[...]
Het aanpassen van een collection ( van het standaard framework ) terwijl je erdoor heen loopt met een iterator levert idd ( volgens mij ) altijd een exception op. Maar een andere implementatie van een Collection met een andere implementatie van de enumerator zou best ander gedrag kunnen vertonen.
Dat is wel gevaarlijk. Om dat werkend te krijgen zul je er wel voor moeten zorgen dat voor je loopconditie altijd de .size() gebruikt wordt. Anders zal het verwijderen van een element er voor zorgen dat je een index out of bounds fout krijgt.rickjehh schreef op maandag 01 december 2008 @ 13:15:
[...]
Volgens mij ook idd. Wat overigens wel kan is een item uit een lijst verwijderen d.m.v. een normale for-lus.
Dat lijkt triviaal, maar zeker wanneer er meerdere mensen met de code bezig zijn dan kan het best gebeuren dat iemand denkt dat hij een optimalisatie doorvoert, terwijl hij een bug introduceert.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Klopt, dat is wel het nadeel eraan ja. Je moet dan wel zorgen dat je altijd op de lengte van de lijst loopt om geen index out of bounds Exception te krijgen idd. Ik heb dit trucje al een aantal keren toegepast, maargoed toen werkte ik ook alleenJanoz schreef op maandag 01 december 2008 @ 13:19:
[...]
Dat is wel gevaarlijk. Om dat werkend te krijgen zul je er wel voor moeten zorgen dat voor je loopconditie altijd de .size() gebruikt wordt. Anders zal het verwijderen van een element er voor zorgen dat je een index out of bounds fout krijgt.
Dat lijkt triviaal, maar zeker wanneer er meerdere mensen met de code bezig zijn dan kan het best gebeuren dat iemand denkt dat hij een optimalisatie doorvoert, terwijl hij een bug introduceert.
Veliger, maar ook efficiënter (alhoewel een .size() over het algemeen wel dermate geoptimaliseerd is dat het niet zo heel veel uit zal maken)
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
[ Voor 31% gewijzigd door .oisyn op 01-12-2008 13:52 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Maar goed. Het mag inderdaad wel even benadrukt worden.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Het gaat hier dan ook over C# ik geef al aan dat zelfs een andere implementatie in .NET een andere resultaat kan hebben, dus nogal logisch dat het ook in Java anders kan zijn.Janoz schreef op maandag 01 december 2008 @ 11:25:
[...]
Niet altijd. In java is het heel goed mogelijk om de lijst waar je doorheen itereert ook aanpast.
Java:
1 2 3 4 5 6 Iterator it = items.iterator(); while (it.hasNext()){ it.next(); //do something it.remove(); }
Het is natuurlijk nogal afhankelijk wat je wilt bereiken hoe je het gaat doen. Met een for lusje kan het ook met maar 1 maal de lengte opvragen
1
2
3
4
5
| int length = list.Count; for(int i = 0; i < length; i++) { list.RemoveAt(0); } |
Of idd door er achterstevoren door heen te lopen. Het is ook afhankelijk wat voor type collectie je gebruikt. Zoals .oisyn ook al aangeeft is het bij een linked list niet echt handig om telkens het laatste item te verwijderen zonder gebruik te maken van een iterator.
Maar voor dit soort dingen heb je natuurlijk gewoon inderdaad de Clear functie die in de initiele post al genoemd word.
“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
| function gmtime() { $t = time(); $gm_time = gmdate('D M ',$t).sprintf('%2d',(int)gmdate('d',$t)).gmdate(' H:i:s Y',$t); return strtotime($gm_time); } |
't mooie is nog wel dat de functie helemaal niet de juiste waarde retourneert, want time() is tijdzone onafhankelijk
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.
Lol, mijn voorbeeld heeft een behoorlijke discussie op gang gebracht zie ikrwb schreef op maandag 01 december 2008 @ 14:46:
[...]
Het gaat hier dan ook over C# ik geef al aan dat zelfs een andere implementatie in .NET een andere resultaat kan hebben, dus nogal logisch dat het ook in Java anders kan zijn.
Het is natuurlijk nogal afhankelijk wat je wilt bereiken hoe je het gaat doen. Met een for lusje kan het ook met maar 1 maal de lengte opvragen
C#:
1 2 3 4 5 int length = list.Count; for(int i = 0; i < length; i++) { list.RemoveAt(0); }
Of idd door er achterstevoren door heen te lopen. Het is ook afhankelijk wat voor type collectie je gebruikt. Zoals .oisyn ook al aangeeft is het bij een linked list niet echt handig om telkens het laatste item te verwijderen zonder gebruik te maken van een iterator.
Maar voor dit soort dingen heb je natuurlijk gewoon inderdaad de Clear functie die in de initiele post al genoemd word.
Misschien even handig om te vermelden dat ik de WTF in heb gekort, aangezien er een kopie van de list werd gebruikt om leeg te maken, waarna de originele werd vervangen door de lege kopie. Eigelijk maakt dit het nog erger
Het blijkt natuurlijk niet uit de functie maar doorgaans betekend GM in combinatie met een T of Time Greenwich Mean Time..oisyn schreef op dinsdag 02 december 2008 @ 23:34:
't mooie is nog wel dat de functie helemaal niet de juiste waarde retourneert, want time() is tijdzone onafhankelijk
En aangezien de functie naam gmtime is en de return variabele de naam gm_time verwacht ik dat dat hier ook het geval is.
De unix timestamp is het aantal seconden sinds een bepaald event. Dat event nam plaats op 1 januari 1970 0:00:00 UTC (schrikkelseconden even buiten beschouwing gelaten). Aangezien het event een vast punt in de globale tijd is, maakt het niet uit of je nou in de VS of in Rusland de huidige timestamp opvraagt, je krijgt dezelfde waarde terug.
Wat de bedoeling van de schrijver van dat stukje code waarschijnlijk was, was om de timestamp zo te modificeren, dat als je 'm door een date formatter haalt die werkt met de lokale tijdzone, dat ie dan de UTC tijd teruggeeft. Dat is niet alleen onhandig en onduidelijk, het is ook nog eens foutgevoelig ivm zomertijd e.d.. Wat je eigenlijk moet doen is gewoon de normale timestamp gebruiken, en dan die dateformatter vertellen dat hij moet formatteren in UTC ipv de lokale tijdzone.
[ Voor 136% gewijzigd door .oisyn op 03-12-2008 10:49 ]
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
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
| <?php print "<table border=\"0\">"; print "<tr><td><div id=\"content\"><b>Veld </b></div></td><td width=\"150\"><div id=\"content\"><b>Veldnaam</b></div></td><td><div id=\"content\"><b>Verplicht</b></div></td></tr>"; $fieldstring=array(); $RevFieldCount=0; $break=0; while($FieldCount!=0){ // Naam met variabel getal. $FC=$FieldCount-1; $wtf_naam = "Name".$FC; $wtf_verplicht ="Mandatory".$FC; $wtf_ID = "ID".$FC; $field_ID = $_POST[$wtf_ID]; // Controle of veldnaam wel is ingevuld. if(isset($_POST[$wtf_naam])){ $tempName= $_POST[$wtf_naam]; } else { print "<tr><td colspan=\"3\"><div id=\"melding\">U heeft niet al de velden een naam gegeven.</div></td></tr>"; $break=1; break; } // Controle of veld verplicht is. if(isset($_POST[$wtf_verplicht])){ $tempMandatory = "Verplicht"; $db_Mandatory = 1; } else { $tempMandatory = "Nee"; $db_Mandatory = 0; } $RevFieldCount=$RevFieldCount+1; print "<tr><td><div id=\"content\">#".$FieldCount.": </div></td><td width=\"150\"><div id=\"content\">" .$tempName."</div></td><td width=\"150\"><div id=\"content\">" .$tempMandatory."</div></td></tr>"; $FieldCount=($FieldCount-1); // SQL per veld doorvoeren. $db->query("UPDATE module_fields SET name='".$tempName."', mandatory='".$db_Mandatory."' WHERE ID='".$field_ID."'"); } // Einde While Loop // Tabel afsluiten. print "</table><br />"; ?> |
+1 voor de creativiteit.
Ik ga nog even uitleggen hoe je een loop nou eigenlijk toepast
En daarna iemand ontslaan. Gok ik.
[ Voor 5% gewijzigd door flashin op 04-12-2008 15:15 ]
1
2
3
4
5
6
| if (!isset($_SESSION['LANGUAGE'])) { $this->setLanguageFromAccept(); header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); } |
(De enige koppeling in van session aan sessionid in deze site was via een cookie)
En dan ga ik nog niet zeuren over de missende exit na de header()
Kater? Eerst water, de rest komt later
Haan schreef op vrijdag 05 december 2008 @ 08:07:
* Haan snapt de PHP dingen die hier gepost worden nooit zo goed
Leuke redirect loop kan je hierdoor krijgen inderdaad.Maghiel schreef op donderdag 04 december 2008 @ 21:17:
En dan ga ik nog niet zeuren over de missende exit na de header()
Maar een exit() na de header(Location: .. ), wat gebeurt er eigenlijk als je dat niet doet?
De browser gaat vrolijk naar die nieuwe lokatie toe (meteen), dat zou in principe betekenen dat je script ook stopt met uitvoeren of niet? Erg zeker ben ik er niet van iig.
Ampera-e (60kWh) -> (66kWh)
{signature}
Het script kan anders dorogaan met uitvoeren en dat kan problemen geven als je bijv. een user redirect naar een andere pagina in geval van een error. Dan wil je voorkomen dat bijv. foute data alsnog in de database komtGreenSky schreef op vrijdag 05 december 2008 @ 09:14:
[...]
Leuke redirect loop kan je hierdoor krijgen inderdaad.
Maar een exit() na de header(Location: .. ), wat gebeurt er eigenlijk als je dat niet doet?
De browser gaat vrolijk naar die nieuwe lokatie toe (meteen), dat zou in principe betekenen dat je script ook stopt met uitvoeren of niet? Erg zeker ben ik er niet van iig.
Maar daar hoeft weer geen exit bij te pas te komen. Dat kun je best op een andere manier aanpakkenJanDM schreef op vrijdag 05 december 2008 @ 09:18:
[...]
Het script kan anders dorogaan met uitvoeren en dat kan problemen geven als je bijv. een user redirect naar een andere pagina in geval van een error. Dan wil je voorkomen dat bijv. foute data alsnog in de database komt
Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).
Intentionally left blank
Edit: Ok niet zo grijs dus, gewoon redirecten, <a> linkje printen, exit();
[ Voor 18% gewijzigd door !null op 05-12-2008 09:40 ]
Ampera-e (60kWh) -> (66kWh)
Dat is dus in het geval van een HEAD-request, geen GET (of POST) request. Ten tweede, is het een beetje verwarrend. Volgens de specificatie mag een HEAD-request namelijk helemaal geen message-body bevatten. Daar gebruiken ze MUST NOT, en dat is dus wél verplicht.crisp schreef op vrijdag 05 december 2008 @ 09:36:
De HTTP specificatie schrijft in ieder geval voor dat de response body van een 30x redirect zelf ook een link naar de nieuwe locatie zou moeten bevatten. Enkel een location-header sturen en verder niets is dus bad practice:
[...]
1
2
3
4
5
6
7
| function isTrue( bool bTrue )
{
if ( bTrue )
return true
else
return false
} |
Schitterend
'You like a gay cowboy and you look like a gay terrorist.' - James May
Nee, er staat duidelijk: "Unless the request method was HEAD" - in het geval van een HEAD request moet je inderdaad geen body sturen.Patriot schreef op vrijdag 05 december 2008 @ 10:13:
[...]
Dat is dus in het geval van een HEAD-request, geen GET (of POST) request. Ten tweede, is het een beetje verwarrend. Volgens de specificatie mag een HEAD-request namelijk helemaal geen message-body bevatten. Daar gebruiken ze MUST NOT, en dat is dus wél verplicht.
Intentionally left blank
[ Voor 33% gewijzigd door !null op 05-12-2008 10:36 ]
Ampera-e (60kWh) -> (66kWh)
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Maar dan heb je dus ook niet het gedoe dat je per ongeluk een <a> met de redirect link uit spuugt terwijl het een HEAD request is (mag geen body hebben), want je gaat sowieso niet redirecten.
Ampera-e (60kWh) -> (66kWh)
Haha, dat is een mooie idd!Phyxion schreef op vrijdag 05 december 2008 @ 10:17:
Ik kwam laatst nog een mooie tegen die ik toegestuurd kreeg:
code:
1 2 3 4 5 6 7function isTrue( bool bTrue ) { if ( bTrue ) return true else return false }
Schitterend
Dat vind ik nou een typisch voorbeeld van "4 uur cup-a-soup"-codePhyxion schreef op vrijdag 05 december 2008 @ 10:17:
Ik kwam laatst nog een mooie tegen die ik toegestuurd kreeg:
code:
1 2 3 4 5 6 7function isTrue( bool bTrue ) { if ( bTrue ) return true else return false }
Schitterend
Ja. Eigenlijk wel stom dat je daar nooit iemand over hoort. Feitelijk behoor je in je script te detecteren of het een HEAD is, en zo ja dan identieke headers zetten die je zou zetten bij een GET en vervolgens je script afsluiten. Alle dingen zoals content uit een db vissen en tonen als html pagina is dus compleet overbodig.GreenSky schreef op vrijdag 05 december 2008 @ 10:36:
Ok. Maar als het een HEAD request is, wordt je PHP script dan nog wel uitgevoerd?
Wat een webserver verder nog wel zou kunnen doen is de content die jouw script output gewoon wegfilteren. Geen idee of dat in de praktijk ook gebeurt...
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.
Alsof de gemiddelde devver uberhaupt de diverse http methods snapt....oisyn schreef op vrijdag 05 december 2008 @ 13:28:
Ja. Eigenlijk wel stom dat je daar nooit iemand over hoort.
{signature}
deze verplicht het gebruik van:
<head id='_head">
ten eerste heeft 'head' geen property 'id' en ten tweede mag een id nooit beginnen met '_' ...
(en ja, ik werk voor een grote overheidsinstantie)
This message was sent on 100% recyclable electrons.
Als je de content-lenght header mee moet/wilt sturen is het toch wel handig om dat te doen..oisyn schreef op vrijdag 05 december 2008 @ 13:28:
[...]
Ja. Eigenlijk wel stom dat je daar nooit iemand over hoort. Feitelijk behoor je in je script te detecteren of het een HEAD is, en zo ja dan identieke headers zetten die je zou zetten bij een GET en vervolgens je script afsluiten. Alle dingen zoals content uit een db vissen en tonen als html pagina is dus compleet overbodig.
Wat een webserver verder nog wel zou kunnen doen is de content die jouw script output gewoon wegfilteren. Geen idee of dat in de praktijk ook gebeurt...
Wordt HEAD in de praktijk gebruikt vraag ik me wel eens af...
Assumptions are the mother of all fuck ups | iRacing Profiel
Wooepscrisp schreef op vrijdag 05 december 2008 @ 10:19:
[...]
Nee, er staat duidelijk: "Unless the request method was HEAD" - in het geval van een HEAD request moet je inderdaad geen body sturen.
Het was nog vroeg, ik dacht even krom
Ik heb het maar even getest met Apache. De webserver retourneert de volgende HTTP headers, dus geen Content-Length (logisch):.oisyn schreef op vrijdag 05 december 2008 @ 13:28:
[...]
Ja. Eigenlijk wel stom dat je daar nooit iemand over hoort. Feitelijk behoor je in je script te detecteren of het een HEAD is, en zo ja dan identieke headers zetten die je zou zetten bij een GET en vervolgens je script afsluiten. Alle dingen zoals content uit een db vissen en tonen als html pagina is dus compleet overbodig.
Wat een webserver verder nog wel zou kunnen doen is de content die jouw script output gewoon wegfilteren. Geen idee of dat in de praktijk ook gebeurt...
HEAD / HTTP/1.1 Host: 127.0.0.1 HTTP/1.1 200 OK Date: Fri, 05 Dec 2008 12:55:56 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.6 X-Powered-By: PHP/5.2.6 Content-Type: text/html
Zoals verwacht geeft hij bij Date gewoon de huidige tijd mee, omdat het een script is.
Hij stuurt dus geen body mee uiteraard, maar het PHP script wordt inderdaad uitgevoerd!
Dat valt er dus inderdaad uit te filteren, want in PHP zie je gewoon:
1
| $_SERVER[ REQUEST_METHOD ] => HEAD |
[ Voor 4% gewijzigd door !null op 05-12-2008 14:01 ]
Ampera-e (60kWh) -> (66kWh)
Even een snelle test op tweakers.net en GoT wijst uit dat er geen content-length header wordt meegestuurd bij een HEAD. Doen scripts trouwens sowieso vrijwel nooit, aangezien je dan eerst alle output moet bufferen voordat je de header mee kunt sturen.Salandur schreef op vrijdag 05 december 2008 @ 13:41:
[...]
Als je de content-lenght header mee moet/wilt sturen is het toch wel handig om dat te doen.
Content zie ik er trouwens ook niet in terug, ook niet in een zelfgemaakt testscript, dus Apache (of wellicht PHP zelf) lijkt het er zelf uit te filteren.
.edit: btw, als bewijs dat m'n script wel daadwerkelijk werd uitgevoerd had ik er een extra header in gestopt:
X-Secret-Message: het script werkt
[ Voor 12% gewijzigd door .oisyn op 05-12-2008 14:05 ]
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.
Nog even over de Content-Length, deze wordt dus wel bij statische bestanden (plaatjes, html files) meegestuurd in het geval van HEAD. Zelf zojuist even getest, is dus wat uitgebreider bij statische bestanden:
HEAD /test.html HTTP/1.1 Host: 127.0.0.1 HTTP/1.1 200 OK Date: Fri, 05 Dec 2008 13:12:25 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.6 Last-Modified: Fri, 05 Dec 2008 13:11:32 GMT ETag: "c000000011f10-489-45d4c6a7da4cf" Accept-Ranges: bytes Content-Length: 1161 Content-Type: text/html
[ Voor 4% gewijzigd door !null op 05-12-2008 14:13 ]
Ampera-e (60kWh) -> (66kWh)
http://my.opera.com/hallv...bank-trusts-only-rabokeys
Niet direct slecht maar wel
Hail to the king baby!
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
| #include <stdio.h>
int main(void){
int getal;
int res, sw_ok = 0;
char naam[11];
char c;
while(sw_ok == 0){
printf("Voer nickname is (max 10 letters!): ");
res = scanf("%10[^\n]%c", naam, &c);
if(c != '\n'){
printf("Nickname is te lang!\n");
scanf("%*[^\n]%*c");
}
else
sw_ok = 1;
}
printf("Username : %s\n", naam);
while(sw_ok == 0){
//onbelangrijk
}
printf("%d spelers gekozen + deler\n", getal);
printf("--->In totaal %d spelers<---", getal + 1);
return 0;
} |
[ Voor 17% gewijzigd door Simon Verhoeven op 05-12-2008 21:53 ]
1
2
3
4
5
6
7
| ptr = #ifdef YOURE_A_PICKLER obscure ongedocumenteerde code #else eenvoudig te begrijpen code #endif + offset; |
Na 15 minuten staren heb ik maar besloten dat het graven in het framework geen klusje is voor het laatste uurtje van de werkweek. Misschien te abstract om door te gaan als een slecht programmeervoorbeeld, maar het leverde wel een WTF momentje op en het signaal om naar huis te gaan
Uit de documentatie ($_SERVER bij REQUEST_METHOD):.oisyn schreef op vrijdag 05 december 2008 @ 14:02:
.edit: btw, als bewijs dat m'n script wel daadwerkelijk werd uitgevoerd had ik er een extra header in gestopt:
X-Secret-Message: het script werkt
Dus tenzij je zelf buffert, bij je eerste echo/print stopt het script. Maar ik zie het regelmatig dat ze alles bufferen en op het laatste moment printen. Dat is dus zonde van de processortijd.Note: PHP script is terminated after sending headers (it means after producing any output without output buffering) if the request method was HEAD.
[ Voor 8% gewijzigd door CoolGamer op 06-12-2008 00:32 ]
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Wat heb je 'm verteld? Dat als ie eens fatsoenlijk leert te indenten dat ie dan wellicht ook nog eens z'n eigen code begrijpt?Simon Verhoeven schreef op vrijdag 05 december 2008 @ 21:50:
Ik kreeg daarstraks van een ex-klasgenoot de vraag waarom hij bij dit nooit in de 2de lus ging.
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 percent; try { percent = int.Parse(box_PercentTime.ToString().Substring(box_PercentTime.ToString().Length-4).Substring(0, this.box_PercentTime.Text.Length - 1)); } catch { Log.Info("Gebruiker lukt het om ongeldige waardes bij de invoerboxen in te voeren"); percent = 99; } |
Driemaal raden wat ik hier probeerde te doen, welk control box_PercentTime is en wat de mask ervan is.
2. Maskedtextbox
3. 000%
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
1
2
3
| string boxString = box_PercentTime.ToString(); string parseString = boxString.SubString(boxString.Length-4, box_PercentTime.Text.Length-1); percent = int.Parse(parseString); |
[ Voor 32% gewijzigd door .oisyn op 10-12-2008 16:28 ]
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.
Niet dat dat zin heeft want de compiler maakt er waarschijnlijk intern toch meerdere variabelen van maar toch.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
[ Voor 5% gewijzigd door .oisyn op 10-12-2008 17:13 ]
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
8
9
| try { socket->close(); delete socket; } catch(...) { cout << "Socket deleted twice" << endl; } |
1
| using namespace std; |
Dit schijnt niet aan te raden zijn omdat je programma namespace en de standaard namespace door elkaar lopen.
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Waarschijnlijk heeft het te maken met het feit dat MySQL standaard ook met localtime werkt. Vreselijk onhandig....oisyn schreef op woensdag 03 december 2008 @ 10:37:
Wat de bedoeling van de schrijver van dat stukje code waarschijnlijk was, was om de timestamp zo te modificeren, dat als je 'm door een date formatter haalt die werkt met de lokale tijdzone, dat ie dan de UTC tijd teruggeeft. Dat is niet alleen onhandig en onduidelijk, het is ook nog eens foutgevoelig ivm zomertijd e.d.. Wat je eigenlijk moet doen is gewoon de normale timestamp gebruiken, en dan die dateformatter vertellen dat hij moet formatteren in UTC ipv de lokale tijdzone.
Dat is dan ook weer een beetje kort door de bocht. Een using directive in een header is natuurlijk een big nono, maar op kleine schaal (bovenaan een kleine sourcefile of op functie-niveau) valt het op zich nog mee. Overigens tik ik zelf wel atlijd voluit std::. Ook handiger bij het gebruik van code completionSebazzz schreef op donderdag 11 december 2008 @ 17:44:
Blijkbaar ook nog met
C++:
1 using namespace std;
Dit schijnt niet aan te raden zijn omdat je programma namespace en de standaard namespace door elkaar lopen.
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.
Of met:Sebazzz schreef op donderdag 11 december 2008 @ 17:44:
Blijkbaar ook nog met
C++:
1 using namespace std;
Dit schijnt niet aan te raden zijn omdat je programma namespace en de standaard namespace door elkaar lopen.
1
2
3
4
5
6
7
| void foo() { using std::cout; using std::endl; // code cout << endl; } |
waar niets mis mee is
Snap het overigens niet, de originele code? Deleted twice? Hoezo? Hoe dan ook zou een opruim functie nooit moeten throwen, en een dtor al helemaal niet. Maar aangzien opruimfuncties vaak worden aangeroepen vanuit een dtor die ook beter niet.
[ Voor 4% gewijzigd door Zoijar op 11-12-2008 22:25 ]
Verwijderd
1
2
3
4
5
6
7
8
9
10
| if (pos > 1 && pos < (testArray.Length -1)) { while(pos < (testArray.Length - 1)) { testArray[pos] = testArray[pos + num]; for (int idx = posInDupe; idx < (posInDupe + num); idx++) { for (ndx = testArray.Length; ndx > (testArray.Length - num); ndx--) { testArray[ndx] = idx; } } } } |
WOEF!
Kater? Eerst water, de rest komt later
Verwijderd
Verderop:
1
| for(int idx = (pos - 1); idx < (pos + (num - 1)); idx ++) |
[ Voor 50% gewijzigd door Verwijderd op 16-12-2008 21:24 ]
Indien er gewoon een teller nodig is zou ik eerder voor het volgende gaan.
1
| for(int idx = 0; idx < num; idx++) |
Er staats in weze gewoon dit:
1
| for (i = 0 + x; i < num + x; i++) |
Waarbij x de ene keer pos -1 is en een andere keer posInDupe etc. Maar als je het zo ziet staan, vraag je je toch af wat het nut is van die extra x gebruiken
Kater? Eerst water, de rest komt later
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
Kan allemaal wel wat netter denk ik
Ik heb de nare eigenschap soms gewoon maar te beginnen met kloppen zonder eerst even na te denken over wat er moet gebeuren. Gelukkig wordt dat al een stuk minder
[ Voor 48% gewijzigd door Verwijderd op 17-12-2008 12:17 ]
Verwijderd
(rechtstreekse copy/paste, enkel uitlijning wat veranderd)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void telhoofdklein(char string[],int *hoofd,int *kleine) { *hoofd = 0; *kleine = 0; int tel; while (1 == 1) { /* de letter waar we nu naar kijken */ char c = string[i]; if (c == 0) break; if (c >= 'a') { if (c <= 'z') { *klein = *klein + 1; }} if (c >= 'A') { if (c <= 'Z') { *hoofd = *hoofd + 1; }} i = i + 1; } } |
Dat compileert volgens mij ook niet nee. Maar dat heeft niet zoveel met slecht programmeren te maken, meer een mislukte copypasta volgens mij.Verwijderd schreef op woensdag 17 december 2008 @ 23:09:
Deze haalde ik uit een Nederlandse eBook C, van de Universiteit Gent. Het is nog redelijk in het begin van het boek, bij de uitleg over pointers (wat ik zo goed mogelijk probeer te begrijpen), en het langdradige ontwerp is de bedoeling (na het voorbeeld staat er een oefening: Maak dit zo kort mogelijk), maar ik denk zelfs niet dat dit deftig gaat compileren.
(rechtstreekse copy/paste, enkel uitlijning wat veranderd)C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void telhoofdklein(char string[],int *hoofd,int *kleine) { *hoofd = 0; *kleine = 0; int tel; while (1 == 1) { /* de letter waar we nu naar kijken */ char c = string[i]; if (c == 0) break; if (c >= 'a') { if (c <= 'z') { *klein = *klein + 1; }} if (c >= 'A') { if (c <= 'Z') { *hoofd = *hoofd + 1; }} i = i + 1; } }
Als je de uitlijning hebt veranderd, waarom heb je 'm dan zo rampzalig gemaakt?Verwijderd schreef op woensdag 17 december 2008 @ 23:09:
(rechtstreekse copy/paste, enkel uitlijning wat veranderd)
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
Omdat ik absoluut geen besef heb van deftige uitlijning..oisyn schreef op donderdag 18 december 2008 @ 00:08:
[...]
Als je de uitlijning hebt veranderd, waarom heb je 'm dan zo rampzalig gemaakt?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void telhoofdklein(char string[],int *hoofd,int *kleine) { *hoofd = 0; *kleine = 0; int tel; while (1 == 1) { /* de letter waar we nu naar kijken */ char c = string[i]; if (c == 0) break; if (c >= 'a') { if (c <= 'z') { *klein = *klein + 1; }} if (c >= 'A') { if (c <= 'Z') { *hoofd = *hoofd + 1; }} i = i + 1; } } |
Persoonlijk ben ik dan weer niet zo'n fan van { of de then-clause van een if op dezelfde regel maar dat is een kwestie van voorkeur
[ Voor 9% gewijzigd door .oisyn op 18-12-2008 00:22 ]
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
Ikzelf heb ook nooit echt kunnen beslissen over of ik {} nu op dezelfde regel of niet plaats.
Anyway, dan werd het ineens een 'Slechte uitlijning'-voorbeeld.
Je hebt een logical AND ( && ) en een binary AND ( & ), maar waarschijnlijk is dat nog niet behandeld in de cursus ( Al is het wel erg basic )Simon Verhoeven schreef op donderdag 18 december 2008 @ 10:49:
Kan trouwens aan mij liggen, maar heeft C geen AND operator? (dacht gewoon &&)
“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 voorbeeld staat niet voor niets in dit topic natuurlijk.
* Creepy mept rwb
[ Voor 32% gewijzigd door Creepy op 18-12-2008 11:23 ]
"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
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
| void telhoofdklein(char string[],int *hoofd,int *kleine) {
*hoofd = *kleine = 0;
while (;;)
{ /* de letter waar we nu naar kijken */
char c = string[i++];
if (c == 0) break;
if ((c >= 'a') && (c <= 'z'))
*klein += 1;
if (c >= 'A') && (c <= 'Z')
*hoofd += 1;
} |
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| void telhoofdklein(char string[],int *hoofd,int *kleine) { *hoofd = *kleine = 0; int i = 0; while (1) { /* de letter waar we nu naar kijken */ char c = string[i++]; if (c == 0) break; if ((c >= 'a') && (c <= 'z')) *kleine += 1; if (c >= 'A' && c <= 'Z') *hoofd += 1; } } |
Verwijderd
is dat dan niet in principe hetzelfde? Of geldt niet true==1 en false==0?Creepy schreef op donderdag 18 december 2008 @ 11:21:
In C gebruik je && voor de logische AND en & voor de bitwise AND. Dus of het aan jou ligt......
Het voorbeeld staat niet voor niets in dit topic natuurlijk.
offtopic:
* Creepy mept rwb
7 & 5 is dan ook heel wat anders dan 7 && 5 (respectievelijk 5 en 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.
[ Voor 102% gewijzigd door CodeCaster op 19-12-2008 01:57 . Reden: Ok,. laat maar, hoe cripple wil je het hebben... ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Rechtstreeks de namespace importeren is niet altijd handig nee (zeker niet als 2 namespaces dezelfde classes bevatten, zoals een aantal database namespaces van Java geloof ik). In .NET hebben ze daar een handigheidje voor (weet niet of het in meerdere talen zo werkt):Sebazzz schreef op donderdag 11 december 2008 @ 17:44:
Blijkbaar ook nog met
C++:
1 using namespace std;
Dit schijnt niet aan te raden zijn omdat je programma namespace en de standaard namespace door elkaar lopen.
1
| using BLL = very.long.name.space; |
En vervolgens roep ik in mijn code BLL.Class aan. Dit werkt in mijn ogen fijner dan iedere keer de hele namespace te moeten typen en zorgt voor minder conflicten tussen de classes in de namespace (zo heb ik vaak in mijn BE en BLL diverse klassen zitten met de zelfde naam).
Ook is het bovenstaande handig mocht ooit de namespace veranderen (wat natuurlijk eigenlijk niet mag
Het jammere van Visual Studio is dat de code completion vaak alsnog de hele namespace neergooit als je bijvoorbeeld zegt:
1
2
| using BLL = very.long.name.space; BLL.Thing thing = new very.long.name.space.Thing(); //Het stukje na new is wat VS aan je voor zal stellen |
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.
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.