Toon posts:

[alg] Slechtste programmeervoorbeelden deel 4 Vorige deelOverzichtLaatste deel

Dit topic is onderdeel van een reeks. Ga naar het meest recente topic in deze reeks.

Pagina: 1 2 3 ... 103 Laatste
Acties:
  • 979.823 views

  • Zyppora
  • Registratie: December 2005
  • Laatst online: 17-05 19:57

Zyppora

155/50 Warlock

Anoniem: 142689 schreef op donderdag 06 november 2008 @ 15:22:
[...]


Dat vind ik niet zo heel raar. Als het systeem van klant y 'J' gebruikt en klant x 'true' en je checkt zelf op 'yes' dan ga je echt niet tegen die klant zeggen dat hij zijn systeem maar moet aanpassen, tenzij je een of andere multinational bent die iets unieks aanbied.
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.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:54
Ik kwam een stukje code tegen die een andere programmeur eventjes snel van het internet het afgeplukt. :)

In het voorbeeld is het argument itemsize een getal
ASP:
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 Airplane Manager en Repeat


  • RobIII
  • Registratie: December 2001
  • Laatst online: 23:01

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

:D Da's wel een hele grote WTF :X
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... :X dude...
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).
Onbekend 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. :)
De titel 'programmeur' is deze collega van je IMHO niet waard :X
Ik heb de bron van 't kwaad volgens mij ook :P
The 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.
Daar gaat een naam op de blacklist :Y)

[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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 23-07-2021
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.
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...

  • RobIII
  • Registratie: December 2001
  • Laatst online: 23:01

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Gomez12 schreef op maandag 17 november 2008 @ 23:49:
een 1 en in de franse handleiding true of een 1 :)
Een oui, of "o" dus :X
Boolean. Binary is iets anders (zie BLOB e.d.)

[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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Gomez12 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...
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 zijn ;) )

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.”


  • Zyppora
  • Registratie: December 2005
  • Laatst online: 17-05 19:57

Zyppora

155/50 Warlock

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...
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?

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


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 23-07-2021
Sorry, persoonlijke vooroordelen spelen soms mee in software ontwikkeling, een franse vertaling zal er als het aan mij ligt nooit inkomen :)
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 ).
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.
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...
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?
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...
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.
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.
Je hebt het immers over een Boolean veld, niet over een string of een andere gelocaliseerde representatie.
Ik wel, maar de andere partij niet altijd...
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 ;) )
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.
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

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 00:39
code:
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]


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:14
creator1988 schreef op vrijdag 28 november 2008 @ 13:53:
code:
1
2
foreach(object bla in pr2invokeinf.GetValue(pr2invoke))
    Hoppeekeeee(bla);


Altijd fijn, lekker duidelijk
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.

Strava, Twitter


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 12-06-2021

Niemand_Anders

Dat was ik niet..

GetValue geeft een enumerator terug en die die doorloop je. In talen zoals Java en C# zal GetValue dus maar eenmaal worden aanroepen.

If it isn't broken, fix it until it is..


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Webgnome 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.
Dit is een foreach constructie en zoals Niemand Anders al zegt is dat geen probleem. Je bedoelt waarschijnlijk een volgende constructie

C#:
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.”


  • Peter
  • Registratie: Januari 2005
  • Laatst online: 17-05 09:36
Dat varieerd, het zou gebruikt kunnen worden als het uiteindelijke aantal niet bekend is (ook al is een while-loop dan handiger). In geval van een vaste waarde voor de hele loop zou iets als;

C#:
1
2
3
for( int i = 0, j = DoSomeCalculation(); i < j; i++ )
{
}


correcter zijn.

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 17:33

Haan

dotnetter

Het zóu zo kunnen ja, maar dat kan in principe met alle code in dit topic.. Mooi is anders zullen we maar zeggen :X

Kater? Eerst water, de rest komt later
Last.fm profiel


  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 17-05 15:10

Wijnbo

Electronica werkt op rook.

Gisteren een briljant stukje tegengekomen:

C#:
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...

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
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)
}
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.

“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.”


  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 17-05 11:39
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.
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.?

[Voor 20% gewijzigd door rickjehh op 01-12-2008 10:23]


  • BM
  • Registratie: September 2001
  • Laatst online: 21:44

BM

Moderator Spielerij
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.?
Klopt.
Oplossing is de lijst van achter naar voor doorlopen en dan de items verwijderen :)

Xbox
Even the dark has a silver lining


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
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.?
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.

“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.”


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

Janoz

Moderator Devschuur®

!litemod

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.
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();
}


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'


  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 17-05 11:39
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.
Volgens mij ook idd. Wat overigens wel kan is een item uit een lijst verwijderen d.m.v. een normale for-lus.

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

Janoz

Moderator Devschuur®

!litemod

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 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.

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


  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 17-05 11:39
Janoz 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.
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 alleen :) Het kan echter wel een handige oplossing zijn als je iets uit een Generic List o.i.d. wil verwijderen.

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

Janoz

Moderator Devschuur®

!litemod

De echte oplossing is al door BM gegeven.

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'


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Mwoa, het is niet heel vreemd dat size() een O(N) complexity heeft voor linked lists, zodat een O(1) splice() geïmplementeerd kan worden. Maar goed, dan is een for-loopje ook onhandig omdat elke access dan O(N) wordt, en kun je dus beter een iterator gebruiken.

[Voor 31% gewijzigd door .oisyn op 01-12-2008 13:52]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


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

Janoz

Moderator Devschuur®

!litemod

mind the 'over het algemeen' ;)

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'


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
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 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.

“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.”


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
PHP:
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);
}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

WTF???
't mooie is nog wel dat de functie helemaal niet de juiste waarde retourneert, want time() is tijdzone onafhankelijk :P

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 17-05 15:10

Wijnbo

Electronica werkt op rook.

rwb 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.
Lol, mijn voorbeeld heeft een behoorlijke discussie op gang gebracht zie ik :D

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 :o new List() was sneller geweest :P

  • Puc van S.
  • Registratie: Maart 2002
  • Laatst online: 19:45
.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 :P
Het blijkt natuurlijk niet uit de functie maar doorgaans betekend GM in combinatie met een T of Time Greenwich Mean Time.

En aangezien de functie naam gmtime is en de return variabele de naam gm_time verwacht ik dat dat hier ook het geval is.

[http://www.okbreijnen.nl] [Overwatch] [Cennahysh]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Dan snap je niet wat een timestamp precies is :) want dat is wat de functie retourneert, alleen een "GMT" timestamp, wat onzin 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]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 04-05 21:14
PHP:
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 :p

En daarna iemand ontslaan. Gok ik.

[Voor 5% gewijzigd door flashin op 04-12-2008 15:15]


  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 15-05 13:02
Ik moest vandaag uitzoeken waarom een site niet gevonden kon worden met zoekmachines en niet geindexeerd werd. Kom je dit tegen:

PHP:
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() :p

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 17:33

Haan

dotnetter

* Haan snapt de PHP dingen die hier gepost worden nooit zo goed ;(

Kater? Eerst water, de rest komt later
Last.fm profiel


  • user109731
  • Registratie: Maart 2004
  • Niet online
Er word gekeken of een 'language' variabele gezet is in de sessie. Dat is niet het geval, dus wordie ingesteld en een redirect gedaan naar dezelfde pagina. Het probleem hier is denk ik dat zoekmachines geen cookies accepteren en de sessie-variabele dus niet werkt, waardoor je een leuke redirect-loop krijgt :P

  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 17-05 11:39
Haan schreef op vrijdag 05 december 2008 @ 08:07:
* Haan snapt de PHP dingen die hier gepost worden nooit zo goed ;(
_/-\o_

  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
Maghiel schreef op donderdag 04 december 2008 @ 21:17:

En dan ga ik nog niet zeuren over de missende exit na de header() :p
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.

Ampera-e (60kWh)


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Het script gaat gewoon door. De meeste browsers volgen meteen braaf de redirect, maar verdere output kan wel degelijk aankomen.

{signature}


  • user109731
  • Registratie: Maart 2004
  • Niet online
GreenSky 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.
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 :)

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:39

Patriot

Fulltime #whatpulsert

JanDM 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 :)
Maar daar hoeft weer geen exit bij te pas te komen. Dat kun je best op een andere manier aanpakken :P Het is duidelijk wat de poster bedoelde, maar nu doet hij alsof je na een header() met daarin een redirect altijd een exit moet plakken.

de Tweakers-cookiewall is illegaal


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

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:
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


  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
Ok, ik dacht al dat het een grijs gebied was. Zal er volgende keer beter op letten als ik aan het redirecten ga, ik weet niet eens of ik in het verleden wel exit() heb gebruikt.

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)


  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:39

Patriot

Fulltime #whatpulsert

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:

[...]
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.

de Tweakers-cookiewall is illegaal


  • Phyxion
  • Registratie: April 2004
  • Laatst online: 09-05 13:14

Phyxion

_/-\o_

Ik kwam laatst nog een mooie tegen die ik toegestuurd kreeg:

code:
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


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 23:35

crisp

Devver

Pixelated

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.
Nee, er staat duidelijk: "Unless the request method was HEAD" - in het geval van een HEAD request moet je inderdaad geen body sturen.

Intentionally left blank


  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
Ok. Maar als het een HEAD request is, wordt je PHP script dan nog wel uitgevoerd? Besluit dan webserver dan niet dat het niet nodig is om het script uit te voeren?

[Voor 33% gewijzigd door !null op 05-12-2008 10:36]

Ampera-e (60kWh)


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

Janoz

Moderator Devschuur®

!litemod

Dat kan een webserver helemaal niet beslissen. Er is namelijk helemaal geen manier voor de webserver om te bepalen of een dynamisch gegenereerde pagina eigenlijk anders is. Ik weet niet hoe het geimplementeerd is, maar ik kan me voorstellen dat voor de correcte werking een HEAD request ten alle tijden wordt beantwoord met een 'haal maar een nieuwe op'. Mocht je dit anders willen dan zul je hiervoor waarschijnlijk zelf wat moeten ondernemen.

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


  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
Dat ben ik helemaal met je eens, maar dat betekend dat bij simpelweg alleen een HEAD request (los van of daarna nog een GET komt) het PHP script niet wordt uitgevoerd. Dat is opzich ook logisch.
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)


  • rickjehh
  • Registratie: Februari 2008
  • Laatst online: 17-05 11:39
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
7
function isTrue( bool bTrue )
{
if ( bTrue )
 return true
else
 return false
}

Schitterend :)
Haha, dat is een mooie idd!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 23:14
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
7
function isTrue( bool bTrue )
{
if ( bTrue )
 return true
else
 return false
}

Schitterend :)
Dat vind ik nou een typisch voorbeeld van "4 uur cup-a-soup"-code

Strava, Twitter


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

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?
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...

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
.oisyn schreef op vrijdag 05 december 2008 @ 13:28:
Ja. Eigenlijk wel stom dat je daar nooit iemand over hoort.
Alsof de gemiddelde devver uberhaupt de diverse http methods snapt... :X

{signature}


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 02-08-2021
wij gebruiken een grafische standaard op mijn werk voor websites / webapplicaties (asp.net).
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.


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 18:08

Salandur

Software Engineer

.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...
Als je de content-lenght header mee moet/wilt sturen is het toch wel handig om dat te doen.

Wordt HEAD in de praktijk gebruikt vraag ik me wel eens af...

Assumptions are the mother of all fuck ups | iRacing Profiel | GT Sport stats


  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:39

Patriot

Fulltime #whatpulsert

crisp 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.
Wooeps B)

Het was nog vroeg, ik dacht even krom :+

de Tweakers-cookiewall is illegaal


  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
.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...
Ik heb het maar even getest met Apache. De webserver retourneert de volgende HTTP headers, dus geen Content-Length (logisch):
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:
code:
1
$_SERVER[ REQUEST_METHOD ] => HEAD

[Voor 4% gewijzigd door !null op 05-12-2008 14:01]

Ampera-e (60kWh)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

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.
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.

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

:P

[Voor 12% gewijzigd door .oisyn op 05-12-2008 14:05]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • !null
  • Registratie: Maart 2008
  • Laatst online: 18-05 08:27
Haha jij hebt het dus ook getest.

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)


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 18-05 17:25
Ik zit net even dit bericht op de FP te lezen nieuws: Opera 10 slaagt voor Acid3-test en kwam daarin deze link tegen:

http://my.opera.com/hallv...bank-trusts-only-rabokeys

Niet direct slecht maar wel :? :? :?

Hail to the king baby!


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Ik kreeg daarstraks van een ex-klasgenoot de vraag waarom hij bij dit nooit in de 2de lus ging.

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
#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]


  • xos
  • Registratie: Januari 2002
  • Laatst online: 08-05 11:21
Vandaag in een stukje oude code gedoken diep in het framework wat we al jaren gebruiken.
C:
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 :p

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 14:28

CoolGamer

What is it? Dragons?

.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

:P
Uit de documentatie ($_SERVER bij REQUEST_METHOD):
Note: PHP script is terminated after sending headers (it means after producing any output without output buffering) if the request method was HEAD.
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.

[Voor 8% gewijzigd door CoolGamer op 06-12-2008 00:32]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

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.
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?

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Dat hij moet leren te indenten en dat hij vervolgens al eens moet beginnen met de variabelen te controleren die hij gebruikt voor zijn lussen.

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 22:22
C#:
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;
            }
:') Ken je framework.

Driemaal raden wat ik hier probeerde te doen, welk control box_PercentTime is en wat de mask ervan is.

spoiler:
1. Ik probeerde de literals en de ingevoerde waarde te scheiden
2. Maskedtextbox
3. 000%

[Website en online portfolio] [Return: realtime retrospective tool] [PokerTime planning poker]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Even compleet los van het framework, want die ken ik niet, ben je wel enorm omslachtig bezig met die ToString() aanroepen en de dubbele substring. Het gebruik van tussentijdse variabelen is niet verboden hoor!

C#:
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]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 22:22
Blijkbaar was ik toen beginner en wilde ik het geheugengebruik laag houden :S
Niet dat dat zin heeft want de compiler maakt er waarschijnlijk intern toch meerdere variabelen van maar toch.

[Website en online portfolio] [Return: realtime retrospective tool] [PokerTime planning poker]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Bovendien maak je het geheugengebruik alleen maar meer door elke keer ToString() aan te roepen, die intern hoogstwaarschijnlijk elke keer een nieuwe string moet aanmaken en opbouwen (waardoor het ook nog eens langzamer wordt). Bovendien dragen lokale variabelen niet zo snel bij aan meer geheugengebruik - zodra de functie returnt (en waarschijnlijk al eerder) worden de variabelen op de stack vanzelf opgeruimd.

[Voor 5% gewijzigd door .oisyn op 10-12-2008 17:13]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • YopY
  • Registratie: September 2003
  • Laatst online: 03-05 15:22
Daar komt nog eens bij dat je beter leesbare, begrijpbare code kunt schrijven dan micro-optimalisaties kunt doen (want dat is dit - hoeveel geheugen neemt een string van 2 getallen nu echt in?)

  • user109731
  • Registratie: Maart 2004
  • Niet online
Wij leren alleen Java, maar ik heb met een mede-student een programma in C++ geschreven. Dan kom je zulke code tegen:
C++:
1
2
3
4
5
6
7
8
9
try
{
  socket->close();
  delete socket;
} 
catch(...) 
{
  cout << "Socket deleted twice" << endl;
}

:)

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 22:22
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.

[Website en online portfolio] [Return: realtime retrospective tool] [PokerTime planning poker]


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
.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.
Waarschijnlijk heeft het te maken met het feit dat MySQL standaard ook met localtime werkt. Vreselijk onhandig...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

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.
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 completion :P

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

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.
Of met:

C++:
1
2
3
4
5
6
7
void foo() {
   using std::cout;
   using std::endl;

// code
   cout << endl;
}

waar niets mis mee is :) (ik type ook overigens altijd std:: voor alles. "std::en<tab>" :) )
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]


Anoniem: 281802

C#:
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!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 17:33

Haan

dotnetter

En afgezien van de eeuwige lus werkt het waarschijnlijk ook nog? :P

Kater? Eerst water, de rest komt later
Last.fm profiel


Anoniem: 281802

Wazige constructies kom je soms tegen zeg :9
Verderop:
C#:
1
for(int idx = (pos - 1); idx < (pos + (num - 1)); idx ++)

[Voor 50% gewijzigd door Anoniem: 281802 op 16-12-2008 21:24]


  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Wat is daar wazig aan? Ik zou de (pos + (num - 1)) schrijven als ((pos - 1) + num), maar verder vind ik het nu niet echt rare code :P

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Hangt een beetje af van wat er in de lus zelf staat.
Indien er gewoon een teller nodig is zou ik eerder voor het volgende gaan.
code:
1
for(int idx = 0; idx < num; idx++)

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 17:33

Haan

dotnetter

Dat is inderdaad precies wat de code zo wazig maakt, ook in het uitgebreidere voorbeeld.
Er staats in weze gewoon dit:
code:
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
Last.fm profiel


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Er is dus niet "gewoon" een teller nodig, want idx wordt regelrecht gebruikt (en de naam zelf al geeft al een beetje aan dat het geen telller is maar een index). Het is imho gewoon heel duidelijk dat idx vanaf 'pos-1' 'num' posities afdoet.

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


Anoniem: 281802

Het is oude code van mezelf, probeersels om arrays op te vullen met her origineel ,op basis van elementen die eruit zijn gehaald, had wat scheutiger moeten zijn met comments (en met logica :o :+ ). Achteraan dus het originele array weer plakken.
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 Anoniem: 281802 op 17-12-2008 12:17]


Anoniem: 260596

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;
    }
}

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:39

Patriot

Fulltime #whatpulsert

Anoniem: 260596 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
Dat compileert volgens mij ook niet nee. Maar dat heeft niet zoveel met slecht programmeren te maken, meer een mislukte copypasta volgens mij.

de Tweakers-cookiewall is illegaal


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Anoniem: 260596 schreef op woensdag 17 december 2008 @ 23:09:
(rechtstreekse copy/paste, enkel uitlijning wat veranderd)
Als je de uitlijning hebt veranderd, waarom heb je 'm dan zo rampzalig gemaakt?

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


Anoniem: 260596

.oisyn schreef op donderdag 18 december 2008 @ 00:08:
[...]

Als je de uitlijning hebt veranderd, waarom heb je 'm dan zo rampzalig gemaakt?
Omdat ik absoluut geen besef heb van deftige uitlijning. :X

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Het is heel simpel. Statements binnen hetzelfde blok geef je dezelfde indentatie. Statements in subblokken indent je 1 tab meer. Een { } geeft een blok aan, of gewoon de enkele statement na een for, while, do, if of else.

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; 
    } 
}

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]

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


Anoniem: 260596

Wel, ik kopieerde het uit een PDF, waarna het na een paste dus geen uitlijning meer had. Om het toch maar iets duidelijker te maken verzon ik zelf maar een uitlijning.
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. ;)

  • Simon Verhoeven
  • Registratie: Juni 2008
  • Laatst online: 30-08-2018

Simon Verhoeven

The trial never ends.

Kan trouwens aan mij liggen, maar heeft C geen AND operator? (dacht gewoon &&)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Simon Verhoeven schreef op donderdag 18 december 2008 @ 10:49:
Kan trouwens aan mij liggen, maar heeft C geen AND operator? (dacht gewoon &&)
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 )

“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.”


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:42

Creepy

Moderator Devschuur®

Tactical Espionage Splatterer

In C gebruik je && voor de logische AND en & voor de bitwise AND. Dus of het aan jou ligt...... :P
Het voorbeeld staat niet voor niets in dit topic natuurlijk.
offtopic:
* 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


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 17:28

NetForce1

(inspiratie == 0) -> true

De opdracht is juist om het stukje code korter te maken, de idee is dan dus dat de &&-operator gebruikt gaat worden lijkt me.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Anoniem: 34209

geen idee of dit compiled maar
code:
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; 
}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Nee, dat compiled niet.

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


Anoniem: 260596

Ik meen te denken dat ie het zo wel moet doen:
C:
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; 
     }
}

  • FD-man
  • Registratie: Januari 2002
  • Laatst online: 28-09-2015
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...... :P
Het voorbeeld staat niet voor niets in dit topic natuurlijk.
offtopic:
* Creepy mept rwb
is dat dan niet in principe hetzelfde? Of geldt niet true==1 en false==0?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:02

.oisyn

Moderator Devschuur® / Cryptocurrencies

Demotivational Speaker

Jawel, maar een bitwise and is niet hetzelfde als een logical and omdat bij de logical and de input altijd wordt geconverteerd naar bool, terwijl de bitwise and rechtstreeks werkt op de bits van de input.

7 & 5 is dan ook heel wat anders dan 7 && 5 (respectievelijk 5 en true)

You see, killbots have a preset kill limit. Knowing their weakness, I sent wave after wave of my own men at them until they reached their limit and shut down. Kif, show them the medal I won.


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

👌👀 good shit ✔💯

:$

[Voor 102% gewijzigd door CodeCaster op 19-12-2008 01:57. Reden: Ok,. laat maar, hoe cripple wil je het hebben...]

As always, we are nailed to a cross of our own construction.


  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 21-03 22:00
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.
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):

C#:
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 :+), dan hoef je dat maar op 1 regel in die file te doen.

Het jammere van Visual Studio is dat de code completion vaak alsnog de hele namespace neergooit als je bijvoorbeeld zegt:
C#:
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.

Pagina: 1 2 3 ... 103 Laatste

Dit topic is gesloten.

Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes. :)


Nintendo Switch (OLED model) Apple iPhone SE (2022) LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S22 Garmin fēnix 7 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2022 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee