Interessant, zal ik eens naar kijken, bedankt
Heb je dus sowieso een array nodig, en zit je moeilijk te doen met make_pair.R4gnax schreef op zaterdag 30 juli 2011 @ 23:52:
[...]
Is toch simpel te doen met een iteration constructor?
Dat heet C++2011 tegenwoordigen met C++0x
[ Voor 19% gewijzigd door .oisyn op 31-07-2011 03:20 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dit soort dingen mag ik onderhouden:
PHP:
1
2
3
4
5
6
7
8
| $x = count($products); $y = 0; foreach ($products as $product) { $searchstring .= "artikel_nr = {$product['id']}"; $y++; if ($x != $y) { $searchstring .= " OR "; } |
Ik had zoiets gedaandev10 schreef op dinsdag 02 augustus 2011 @ 11:37:
Dit soort dingen mag ik onderhouden:
PHP:
1 2 3 4 5 6 7 8 $x = count($products); $y = 0; foreach ($products as $product) { $searchstring .= "artikel_nr = {$product['id']}"; $y++; if ($x != $y) { $searchstring .= " OR "; }
PHP:
1
2
3
4
5
| foreach ($products as $product) { $searchstring .= "artikel_nr = {$product['id']}"; if ($product != end($products)) { $searchstring .= " OR "; } |
Maar ik weet niet of het veel sneller is dan jouw voorbeeld
If money talks then I'm a mime
If time is money then I'm out of time
Ik had waarschijnlijk "artikel_nr IN (value1, value2)" gedaan, maar verder... X en Y mochten wat mooier, maar de count wordt netjes maar één keer gedaan en er wordt bijgehouden of er een OR bij moet.
Of er nu echt een 'beste' manier is... Ik heb regelmatig van dit soort constructies.

Of er nu echt een 'beste' manier is... Ik heb regelmatig van dit soort constructies.
PHP:
al was dat in een taal die geen foreach had dus kon je gewoon de i van de for-lus gebruiken om te kijken of het de eerste was 1
2
3
4
5
6
7
8
9
10
11
12
13
| <?php $searchstring .= "artikel_nr IN ("; $first = true; foreach ($products as $product) { if ($first) { $searchstring .= $product['id']; $first = false; } else { $searchstring .= ", {$product['id']}"; } $searchstring .= ")"; } ?> |
edit:
Edit: Ik ken ook geen PHP, dus als er syntax-fouten in zitten komt dat daardoor
Het gaat om het idee 
Edit: Ik ken ook geen PHP, dus als er syntax-fouten in zitten komt dat daardoor
[ Voor 7% gewijzigd door Paul op 02-08-2011 11:56 ]
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Dan ga je er wel van uit dat een product niet meerdere keren in de lijst met products kan staan, anders mist er hier en daar een " OR ". Plus, het laatste product ophalen kan natuurlijk beter 1x buiten de loop in plaats van n-keer in de loop.Matis schreef op dinsdag 02 augustus 2011 @ 11:40:
[...]
Ik had zoiets gedaan
PHP:
1 2 3 4 5 foreach ($products as $product) { $searchstring .= "artikel_nr = {$product['id']}"; if ($product != end($products)) { $searchstring .= " OR "; }
Maar ik weet niet of het veel sneller is dan jouw voorbeeldWat mij betreft wel beter leesbaar.
Know your API.
PHP:
1
2
3
4
5
6
| $searchstring .= implode(" OR ", array_map(function($p) { return "artikel_nr=" . $p['id'] }, $products)); //of $searchstring .= "artikelnr IN (" . implode(",", array_map(function($p) { return $p['id'] }, $products)) . ")"; |
[ Voor 53% gewijzigd door .oisyn op 02-08-2011 11:59 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik ken PHP maar amper dus ik ga hier gokken, maar levert dat niet "kaas OR worst OR ham OR cola" op?
Edit: Ok, dat was dus van voor de edit van .oisyn
TBH vind ik het minder leesbaar, vergt meer kennis om het te schrijven en tevens levert het een andere string op dan het originele stukje
Niet dat je altijd maar het wiel opnieuw moet uitvinden (not invented here
), maar als je API-calls (bijna) net zo lang zijn als het alternatief, terwijl dat alternatief wat intuïtiever is (en ja, dat is een mening
) dan heb ik niet zo'n probleem mee
Edit: Ok, dat was dus van voor de edit van .oisyn
TBH vind ik het minder leesbaar, vergt meer kennis om het te schrijven en tevens levert het een andere string op dan het originele stukje
PHP:
1
2
| $searchstring .= "artikel_nr = "; $searchstring .= implode(" OR artikel_nr = ", array_map(function($p) { return $p['id'] }, $products)); |
Niet dat je altijd maar het wiel opnieuw moet uitvinden (not invented here
[ Voor 28% gewijzigd door Paul op 02-08-2011 12:08 ]
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Lengte is irrelevant, het gaat om de complexiteit. Een custom made loop is altijd complexer dan het aanroepen van een functie. Dat ik het in 1 regel schrijf is ook niet de kern van mijn post, als je het leesbaarder vind in meerdere regels moet je dat natuurlijk vooral doen. Een bug maken in een for-loop is een stuk gemakkelijker dan een bug maken in een functie-aanroep van een standaard functie. En je ziet wat voor zooitje sommige mensen maken van eigengemaakte loops.
Dat het meer kennis vergt om te schrijven, ja duh, kennis van de standaard API is nou eenmaal belangrijk. Die functies bestaan er niet voor niets.
Dat het meer kennis vergt om te schrijven, ja duh, kennis van de standaard API is nou eenmaal belangrijk. Die functies bestaan er niet voor niets.
[ Voor 39% gewijzigd door .oisyn op 02-08-2011 12:19 ]
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.
Lengte is niet direct het aantal enters, hoe langer iets is hoe complexer het vaak wordt, waardoor het langer kost om te doorgronden wat er gebeurd.
Een loop complexer dan een functie, je nest daar een nieuwe functie in een functie die je in een functie gebruikt, dat kost ook wel even om te doorgronden. Als dat de standaard aanroep van explode is dan zal het voor mensen die veel PHP'en vast duidelijk zijn en dan heb ik niks gezegd, maar 'de api' is ook niet altijd de heilige graal natuurlijk
Dat gezegd hebbende is kennis van de API inderdaad wel erg belangrijk, kijk bijvoorbeeld alleen al naar de hoeveelheden code die mensen kunnen verzinnen om berekeningen met datums te doen
Een loop complexer dan een functie, je nest daar een nieuwe functie in een functie die je in een functie gebruikt, dat kost ook wel even om te doorgronden. Als dat de standaard aanroep van explode is dan zal het voor mensen die veel PHP'en vast duidelijk zijn en dan heb ik niks gezegd, maar 'de api' is ook niet altijd de heilige graal natuurlijk
Dat gezegd hebbende is kennis van de API inderdaad wel erg belangrijk, kijk bijvoorbeeld alleen al naar de hoeveelheden code die mensen kunnen verzinnen om berekeningen met datums te doen

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Dat zeg ik, als je het in meerdere regels leesbaarder vindt moet je dat vooral zo opschrijven. Bijvoorbeeld:Paul schreef op dinsdag 02 augustus 2011 @ 12:28:
Een loop complexer dan een functie, je nest daar een nieuwe functie in een functie die je in een functie gebruikt, dat kost ook wel even om te doorgronden.
PHP:
1
2
3
| function GetProductId($p) { return $p['id']; } $productids = array_map("GetProductId", $products); $searchstring .= "artikelnr IN (" . implode(",", $productids) . ")"; |
Waar het om gaat is dat je gewoon gebruik maakt van bekende en standaard bouwstenen in de taal, of "patterns" zo je wilt. Kwa concept omschrijven de functiemethoden namelijk precies het hele proces - het mappen van producten naar id's, om die vervolgens aan elkaar te rijgen in een enkele string.
De enige reden waarom jij het minder goed snapt is omdat je die functies niet kent, en daardoor maar dus moet raden wat het resultaat waarschijnlijk gaat zijn. Als jij C# niet kent dan zul je de LINQ syntax ook een stuk minder goed snappen, maar toch is dat anno 2011 de de-facto manier om een dergelijke transformatie op een array van producten los te laten om zo een query string te vormen. Je lost het probleem op een veel hoger niveau op, ipv low-level code te gaan zitten kloppen.
[ Voor 14% gewijzigd door .oisyn op 02-08-2011 12:39 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Dat zal zeker niet helpen nee.oisyn schreef op dinsdag 02 augustus 2011 @ 12:34:
De enige reden waarom jij het minder goed snapt is omdat je die functies niet kent, en daardoor maar dus moet raden wat het resultaat waarschijnlijk gaat zijn.
Bij de loop zien je in iedere regel code en correlatie met het uiteindelijke resultaat, terwijl bij de (uitgeschreven) API-calls eerst een meta-probleem oplost (hoe krijg ik abstract veld X uit structuur Y) dat ontstaat uit een ander meta-probleem (mijn data is in een ander formaat dan dat de API-call verwacht / kan gebruiken), terwijl je in de loop direct $product['id'] kunt gebruiken.
Het is helemaal geweldig dat het allemaal kan, en met de juiste mensen zal het zeker een hogere arbeidsproductiviteit opleveren, maar het zorgt er ook voor dat je als programmeur veel meer kennis nodig hebt. Ik kan zonder specifieke kennis van PHP, C# of Java een loopje maken dat een WHERE-clause maakt, maar zonder dat ik de PHP-API ken of weet hoe LinQ precies in elkaar zit kan ik jouw code niet onderhouden. Ik ben helaas de bron kwijt, maar ik stuitte lang geleden op de uitspraak "Als je iets zo slim als je kunt in elkaar zet, ben je te dom om het de debuggen / onderhouden", en ik denk dat dit steeds meer op gaat spelen.
Hoe specifieker de technologie die je gebruikt, hoe minder je er van op moet kijken dat niet iedereen het snapt, en hoe vaker je tegen gaat komen dat mensen het op de minder 'complexe' manier doen. Hier op het werk moeten we nieuwe collega's ook eerst leren hoe het framework dat wij gebruiken werkt voordat ze goed mee kunnen draaien in het team, terwijl het verder wel gewoon goede programmeurs zijn.
Dat is ook een beetje de basis van mijn relaas: Ik zou de code die dev10 postte helemaal niet vreemd opkijken, zeker niet omdat hij het over 'onderhouden' heeft. Misschien ken ik er teveel gewicht aan toe, 'slechte programmeervoorbeelden', maar niet iedereen heeft intieme kennis van alle framework-calls, en sommige dingen zijn gewoon van een tijdperk toen dat hele framework er nog niet was, en dan zou ik (op wat kleine schoonheidsfoutjes) dit zeker niet heel slecht willen noemen, het is gewoon een andere (lower level) manier om het probleem op te lossen.
Er zijn zeer zeker gebieden / stukken code waarbij ik je absoluut gelijk geeft, daar niet van
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Even realistisch blijven. Het gaat hier over implode(), een van de meest gebruikte functies in PHP, en array_map (ook veelgebruikt). Als je dat niet beheerst kun je gewoon niet in PHP programmeren. Simpel.Paul schreef op dinsdag 02 augustus 2011 @ 13:00:
Hoe specifieker de technologie die je gebruikt, hoe minder je er van op moet kijken dat niet iedereen het snapt, en hoe vaker je tegen gaat komen dat mensen het op de minder 'complexe' manier doen. Hier op het werk moeten we nieuwe collega's ook eerst leren hoe het framework dat wij gebruiken werkt voordat ze goed mee kunnen draaien in het team, terwijl het verder wel gewoon goede programmeurs zijn.
[ Voor 5% gewijzigd door PrisonerOfPain op 02-08-2011 13:09 ]
Een goede programmeur maakt de taal en omgeving waarin hij werkt zich eigen. Dat leren hoort dus gewoon bij het leven van een goede programmeur. Als we jouw redenatie doortrekken dan zouden we eigenlijk allemaal assembly moeten tikken - de rest zijn "specialistische technieken"Paul schreef op dinsdag 02 augustus 2011 @ 13:00:
Hier op het werk moeten we nieuwe collega's ook eerst leren hoe het framework dat wij gebruiken werkt voordat ze goed mee kunnen draaien in het team, terwijl het verder wel gewoon goede programmeurs zijn.

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.
...en daar trekken we het weer naar het extreme 
Natuurlijk is het je eigen maken van nieuwe technieken onderdeel van het zijn van een goede programmeur. Echter, hoewel ik niet alle sollicitanten zie, zie ik wel degenen die wel door de procedure komen, en daar zit nog altijd een hoop kaf tussen
De ene heeft er wat langer nodig zich in te werken in de materie dan de ander, en ondertussen wordt wel van ze verwacht dat ze hun werk doen. Tja, dan krijg je dus dat dingen gebeuren op de manier die ook goed werkt en die ze _wel_ kennen 
Het is alweer een paar jaar geleden dat ik gestudeerd heb, maar daar kregen we echt geen dingen als (de toenmalige) LinQ of zo, ik had er zelf nog nooit van gehoord totdat ik ging werken. Ik heb in mijn beginperiode echt wel gedrochten van functies geschreven, dingen waar ik me nog altijd voor schaam, maar daar valt zo'n (redelijk) nette for-loop echt niet onder
Waarschijnlijk is mijn achtergrond ook wat anders, mijn laatste echte programmeerwerk was nog in Delphi 5 (toen 7 of 8 of zo al uit was
, daarna heb ik nog wel wat C# gedaan maar niet voldoende om te vinden dat ik daar goed in ben), als je me daarin een explode-functie aan kunt wijzen ga ik me in een hoekje zitten schamen, maar ik zie dus echt niks vreemds aan een for-loop om de where op te bouwen

Natuurlijk is het je eigen maken van nieuwe technieken onderdeel van het zijn van een goede programmeur. Echter, hoewel ik niet alle sollicitanten zie, zie ik wel degenen die wel door de procedure komen, en daar zit nog altijd een hoop kaf tussen
Het is alweer een paar jaar geleden dat ik gestudeerd heb, maar daar kregen we echt geen dingen als (de toenmalige) LinQ of zo, ik had er zelf nog nooit van gehoord totdat ik ging werken. Ik heb in mijn beginperiode echt wel gedrochten van functies geschreven, dingen waar ik me nog altijd voor schaam, maar daar valt zo'n (redelijk) nette for-loop echt niet onder
Waarschijnlijk is mijn achtergrond ook wat anders, mijn laatste echte programmeerwerk was nog in Delphi 5 (toen 7 of 8 of zo al uit was

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
String.Split en String.Join.Paul schreef op dinsdag 02 augustus 2011 @ 13:50:
als je me daarin een explode-functie aan kunt wijzen ga ik me in een hoekje zitten schamen, maar ik zie dus echt niks vreemds aan een for-loop om de where op te bouwen
Verder vind ik het vreemd dat je mensen aanneemt die geen of amper kennis hebben van hetgeen ze mee moeten werken.
[ Voor 15% gewijzigd door PrisonerOfPain op 02-08-2011 13:57 ]
Alsof het de bedoeling van een opleiding is om jou een API aan te lerenPaul schreef op dinsdag 02 augustus 2011 @ 13:50:
Het is alweer een paar jaar geleden dat ik gestudeerd heb, maar daar kregen we echt geen dingen als (de toenmalige) LinQ of zo

[ Voor 25% gewijzigd door .oisyn op 02-08-2011 14:00 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Ik heb helaas geen Delphi 5 in de buurt om het zeker te weten, maar wat ik er van kan vinden lijkt me dat de .Net-variant? Ik zie daarentegen ruim voldoende code-voorbeelden die zo heten maar de (mij) bekende D5 code gebruiken om hetzelfde voor elkaar te krijgenPrisonerOfPain schreef op dinsdag 02 augustus 2011 @ 13:54:
String.Split en String.Join.
Zie maar eens iemand te vinden in het oosten van het land die Telerik, LinQ, Umbraco én Sitecore kennen (en dan vergeet ik vast nog een paar dingen)Verder vind ik het vreemd dat je mensen aanneemt die geen of amper kennis hebben van hetgeen ze mee moeten werken.
En _dat_ is dus precies mijn punt, dank je..oisyn schreef op dinsdag 02 augustus 2011 @ 13:57:
Alsof het de bedoeling van een opleiding is om jou een API aan te leren
Klopten je zegt daar vervolgens ook niets van tijdens een code review dan ben je als leidinggevende gewoon verkeerd bezig.
Er is een groot verschil tussen dingen die beter kunnen en dingen die slecht zijn. Een paar honderd regels nodig hebben om 3 dagen bij 27 februari op te tellen is echt slecht. Een array omzetten naar een string en dat met een simpele loop doen in plaats van een API-call, tja, tuurlijk kan dat (tegenwoordig) beter, maar het is ook niet overdadig complex. Ik zou het om willen draaien, als je het zonder API-call niet voor elkaar krijgt ben je ook niet goed bezig (maar goed, dat heeft dan ook niemand beweerd, zoals wel meer dingen die over en weer gaan
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Wát is je punt dan precies? Ze hebben het niet geleerd, dus ze hoeven het ook niet leren te gebruiken in productiecode?Paul schreef op dinsdag 02 augustus 2011 @ 14:21:
En _dat_ is dus precies mijn punt, dank je.
Ho ho, de hele discussie ging om het feit dat jij liet blijken dat je een for-loop *beter* vond (omdat een junior het zou kunnen onderhouden omdat iemand zonder API kennis het moeilijk kan lezen)KloptMaar dat maakt de code nog niet meteen slecht, of althans, dat is mijn mening.
Da's compleet irrelevant voor de discussie. Want of je het kan staat los van of het met de standaard API beter is of niet. En laten we wel wezen, met een zelfgebakken for-loop is de kans op een logica-fout bij een junior een stuk groter dan als hij gewoon van wat standaard bouwstenen gebruik maakt. Sterker nog, dat werd al bewezen in deze topic.Ik zou het om willen draaien, als je het zonder API-call niet voor elkaar krijgt ben je ook niet goed bezig
[ Voor 47% gewijzigd door .oisyn op 02-08-2011 14:37 ]
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.
Hmm, het lijkt er inderdaad op dat dat mijn punt was, mea culpa..oisyn schreef op dinsdag 02 augustus 2011 @ 14:32:
Ho ho, de hele discussie ging om het feit dat jij liet blijken dat je een for-loop *beter* vond (omdat een junior het zou kunnen onderhouden omdat iemand zonder API kennis het moeilijk kan lezen)
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
String is niet eens een class, dus knap dat je er methodes van kan aanroepen
Voor de eerste zou ik gaan voor splitString, de 2e heb ik zo snel niets op weten te vinden. Zelf gebruik ik hier meestal een TStringList voor.
*kuch*dcm360 schreef op dinsdag 02 augustus 2011 @ 17:42:
[...]
String is niet eens een class, dus knap dat je er methodes van kan aanroepen
Jij hebt het over Delphi. Waar Paul het specifiek over had is een beetje voor verschillende interpretaties vatbaar door z'n haakjesgebruik.
.edit @ hieronder: En als jij 2 seconden langer had nagedacht had je ook wel gesnapt dat PrisonerOfPain specifiek reageerde op C# en dus over de haakjes heen las, en dat het dus blijkbaar wél voor meerdere interpretaties vatbaar is, ookal is Delphi de enige echt juiste context.
[ Voor 26% gewijzigd door .oisyn op 02-08-2011 17:54 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Een stuk tussen haakjes is optioneel voor de zin (het geeft extra informatie die niet van belang is voor de rest van de zin), dus als je dat weglaat houdt je een zin over met alleen Delphi erin. Dat is hopelijk wel vrij duidelijk voor de meeste mensen...
[ Voor 17% gewijzigd door dcm360 op 02-08-2011 17:52 ]
Delphi for .Netdcm360 schreef op dinsdag 02 augustus 2011 @ 17:42:
[...]
String is niet eens een class, dus knap dat je er methodes van kan aanroepen
Voor de eerste zou ik gaan voor splitString, de 2e heb ik zo snel niets op weten te vinden. Zelf gebruik ik hier meestal een TStringList voor.

Ik bedoelde dus inderdaad "Het laatste waar ik echt in gewerkt heb was D5, als je daarin...", ik ga me niet in een hoekje zitten schamen als in niet weer wat er in C# allemaal te vinden is als ik een halve zin eerder heb aangegeven daar niet goed in te zijn 
Het leek me vrij duidelijk, maar blijkbaar is het maar goed dat ik niet (veel) meer programmeer, er blijven maar bugjes in sluipen
Het leek me vrij duidelijk, maar blijkbaar is het maar goed dat ik niet (veel) meer programmeer, er blijven maar bugjes in sluipen

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Desalnietemin blijkt dat de meeste talen dergelijke functionaliteit gewoon aanbieden en het dus niet vreemd is om dergelijke library functies te gebruiken.
[ Voor 38% gewijzigd door PrisonerOfPain op 02-08-2011 18:43 ]
Ik hou er qua razor syntax wel een beetje een PHP gevoel aan over.Avalaxy schreef op dinsdag 02 augustus 2011 @ 18:48:
ASP.NET MVC3![]()
![]()
Wat een extreem genot na jaren aanklooien met PHP
Jarenlang hoor je over PHP dat het ranzig is dat PHP en HTML door elkaar loopt, en nu met Razor is iedereen helemaal happy
(Al vind ik ASP.NET MVC 3 ook heerlijk werken hoor!)
🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
Heb er van de week even mee zitten spelen, maar deel je mening wel. Het word wel erg gemakkelijk gemaakt om logica in je views te verwerken, ook als dat juist heel goed weg te stoppen dmv het hele MVC principe.Rhapsody schreef op dinsdag 02 augustus 2011 @ 19:01:
[...]
Ik hou er qua razor syntax wel een beetje een PHP gevoel aan over.
Jarenlang hoor je over PHP dat het ranzig is dat PHP en HTML door elkaar loopt, en nu met Razor is iedereen helemaal happy
(Al vind ik ASP.NET MVC 3 ook heerlijk werken hoor!)
Liep alleen al wel weer snel tegen 1 groot probleem van webdevelopment op.... ik ken geen html, en ik vind dat ook helemaal niet leuk om te doen
Ik stond alweer bijna op het punt om tables te gaan gebruiken voor de layout

Binnenkort maar even verder, maar ga nu eerst denk ik de logica maken, en me daarna wel druk maken om het displayen. Vind ik ook vele malen leuker. GUI design is niet mijn sterkste punt, en zal het wel nooit worden ook, zowel voor Win/Web/Wpf.
Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three
Die discussie over loopjes en include, hadden we die ook niet compacter kunnen schrijven

Jarenlang niet goed opgelet dan. Het is ranzig je markup en je business logic te vermengen. Je view logica kan je prima vermengen met je html.Rhapsody schreef op dinsdag 02 augustus 2011 @ 19:01:
[...]
Jarenlang hoor je over PHP dat het ranzig is dat PHP en HTML door elkaar loopt, en nu met Razor is iedereen helemaal happy
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Niets mis met logica in je view, zolang het maar view-gerelateerde logica is 
.edit: euh ja anders lees ik ook even de allerlaatste reactie
.edit: euh ja anders lees ik ook even de allerlaatste reactie

[ Voor 30% gewijzigd door .oisyn op 02-08-2011 22:00 ]
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.
Dit is niet eens het ergste van de ramp van 130kloc waar ik nu mee bezig ben:
C#:
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
| public static string ConvertDayOfWeekToDutch(this DayOfWeek dayOfWeek) { if (dayOfWeek == DayOfWeek.Friday) { return "Vr"; } if (dayOfWeek == DayOfWeek.Saturday) { return "Za"; } if (dayOfWeek == DayOfWeek.Sunday) { return "Zo"; } if (dayOfWeek == DayOfWeek.Monday) { return "Ma"; } if (dayOfWeek == DayOfWeek.Tuesday) { return "Di"; } if (dayOfWeek == DayOfWeek.Wednesday) { return "Wo"; } if (dayOfWeek == DayOfWeek.Thursday) { return "Do"; } return ""; } |
[ Voor 17% gewijzigd door Grijze Vos op 03-08-2011 15:24 ]
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Oef, dit soort dingen zijn wel dubbel pijnlijk. Een dergelijke situatie kan je het beste oplossen met een switch/case constructie. Deze is echter extra pijnlijk omdat het uberhaupt overbodige code is.. Even in de web.config de ui/globalization culture op nl-NL zetten en klaar ben je ;p.Grijze Vos schreef op woensdag 03 augustus 2011 @ 15:23:
Dit is niet eens het ergste van de ramp van 130kloc waar ik nu mee bezig ben:
C#:
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 public static string ConvertDayOfWeekToDutch(this DayOfWeek dayOfWeek) { if (dayOfWeek == DayOfWeek.Friday) { return "Vr"; } if (dayOfWeek == DayOfWeek.Saturday) { return "Za"; } if (dayOfWeek == DayOfWeek.Sunday) { return "Zo"; } if (dayOfWeek == DayOfWeek.Monday) { return "Ma"; } if (dayOfWeek == DayOfWeek.Tuesday) { return "Di"; } if (dayOfWeek == DayOfWeek.Wednesday) { return "Wo"; } if (dayOfWeek == DayOfWeek.Thursday) { return "Do"; } return ""; }
Heb zo ook wel eens stukken code gezien van mensen die de maanden gingen vertalen en dat soort onzin...
[ Voor 8% gewijzigd door ReneDD op 03-08-2011 15:28 ]
PHP:
1
2
3
4
5
6
7
8
9
10
| if (/*zomaar iets*/) { $page['404'] = "yes"; } //aantal regels later if ($page['404'] == "yes") { } else { //doe iets } |
En dit letterlijk meer dan 200 keer verspreid over alle code, fijn als je baas een site overkoopt en vraagt om "ff wat wijzigingen" te maken..
Blijkbaar had de auteur nog nooit gehoord van booleans of !=
Of deze:
GetStringValue is een extensionmethod op Enum.
e.ShoppingBasketitem.ContentType is een string. En hij wordt uiteraard geset met dezelfde GetStringValue() functie. En dat dan 80 keer doorheen het project.
C#:
1
| if (e.ShoppingBasketitem.ContentType == ShoppingbasketItemContentType.Reservering.GetStringValue() && ...) |
GetStringValue is een extensionmethod op Enum.
e.ShoppingBasketitem.ContentType is een string. En hij wordt uiteraard geset met dezelfde GetStringValue() functie. En dat dan 80 keer doorheen het project.
[ Voor 7% gewijzigd door Grijze Vos op 03-08-2011 15:38 ]
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Geweldig! Waarschijnlijk voelde die programmeur zich helemaal het mannetje omdat hij dit "elegant" heeft opgelost via een extensionmethod maar slaat de plank volledig mis met de enums.Grijze Vos schreef op woensdag 03 augustus 2011 @ 15:37:
Of deze:
C#:
1 if (e.ShoppingBasketitem.ContentType == ShoppingbasketItemContentType.Reservering.GetStringValue() && ...)
GetStringValue is een extensionmethod op Enum.
e.ShoppingBasketitem.ContentType is een string. En hij wordt uiteraard geset met dezelfde GetStringValue() functie. En dat dan 80 keer doorheen het project.
Oplossing: ctrl + A, delete. Alle compile-fouten oplossen door een date format,Grijze Vos schreef op woensdag 03 augustus 2011 @ 15:23:
Dit is niet eens het ergste van de ramp van 130kloc waar ik nu mee bezig ben:
C#:
1 2 3 public static string ConvertDayOfWeekToDutch(this DayOfWeek dayOfWeek) { // snip }
* YopY spendeert iets van 1/4e van de tijd aan refactoren op huidige project. Of zo voelt het, in ieder geval.
Ik ben bezig om on the side alvast de basis op te zetten voor een rewrite van deze applicatie. Mooi toch, nog voordat ie in productie gaat mag ie de prullenbak in. Nu alleen nog de stakeholders hier overtuigen dat deze troep echt niet in produktie kan.YopY schreef op donderdag 04 augustus 2011 @ 09:08:
[...]
Oplossing: ctrl + A, delete. Alle compile-fouten oplossen door een date format,. Gewoon keihard overbodige code weggooien, is stiekem gewoon het leukste wat je kunt doen.
* YopY spendeert iets van 1/4e van de tijd aan refactoren op huidige project. Of zo voelt het, in ieder geval.
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
Volgens mij adviseert R# ook om bij date en string formats altijd een locale mee te geven.ReneDD schreef op woensdag 03 augustus 2011 @ 15:27:
Oef, dit soort dingen zijn wel dubbel pijnlijk. Een dergelijke situatie kan je het beste oplossen met een switch/case constructie. Deze is echter extra pijnlijk omdat het uberhaupt overbodige code is.. Even in de web.config de ui/globalization culture op nl-NL zetten en klaar ben je ;p.
Heb zo ook wel eens stukken code gezien van mensen die de maanden gingen vertalen en dat soort onzin...
If money talks then I'm a mime
If time is money then I'm out of time
Dat heb ik gisteren ook gedaan. Ik zag een functie van een regel of dertig lang om een string uit een textbox te splitten op komma's. Vervolgens werd de array (want ja, je zal het eens in een TStringList zetten) doorlopen en één voor één werden de gevonden strings met OR aan elkaar geplakt voor in een SQL-query. Want ja, je zal eens IN() gebruiken. Gelukkig bleek even lezen later dat de aanroep van de split-functie uitgecomment was en dat de textbox alleen nog maar de invoer van enkele items, zonder komma ondersteunde. Want ja, je zal de labels op je form eens aanpassen als je de functionaliteit wijzigt. Of ongebruikte code weggooien.YopY schreef op donderdag 04 augustus 2011 @ 09:08:
[...]
Gewoon keihard overbodige code weggooien, is stiekem gewoon het leukste wat je kunt doen.

[ Voor 3% gewijzigd door CodeCaster op 04-08-2011 09:39 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Nee, je snapt het niet. Het is doodzonde om code waar je uren op hebt zitten zwoegen om die SQL-query op te stellen - maar die je toch niet nodig hebt - weg te gooien.CodeCaster schreef op donderdag 04 augustus 2011 @ 09:38:
[...]
Want ja, je zal de labels op je form eens aanpassen als je de functionaliteit wijzigt. Of ongebruikte code weggooien.
Toch?
We are shaping the future
C#:
1
2
3
4
5
6
7
8
| List<SubItem> subitems = new List<SubItem>(); foreach( Item item in allitems ) { subitems.AddRange( item.GetSubItems() ); } SubItem[] retval = subitems.ToArray(); Array.Sort( retval, new SubItemComparer()); return retval.ToList() |
List omzetten naar array waarop je Array.Sort aanroept en het resultaat weer omzetten naar een list. Jaa ja.
Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community
Zucht, vandaag met een dinosaurus project bezig in VB6.
Paar uur bezig, crasht VB6 ineens (onder windows7, ook not supported door MS)
Open ik mijn project opnieuw, is de helft weg
Blijkbaar saved die je bestand niet als je het project compileert, dit in tegenstelling tot Visual Studio (2010). Dit doet dat wel. Ben dan dus niet gewend om de bestanden te saven tussendoor
Kan ik alles opnieuw doen..
Paar uur bezig, crasht VB6 ineens (onder windows7, ook not supported door MS)
Open ik mijn project opnieuw, is de helft weg
Blijkbaar saved die je bestand niet als je het project compileert, dit in tegenstelling tot Visual Studio (2010). Dit doet dat wel. Ben dan dus niet gewend om de bestanden te saven tussendoor
Kan ik alles opnieuw doen..
[ Voor 7% gewijzigd door TripleQ op 04-08-2011 12:57 ]
Lichtpuntje: de tweede keer gaat het snellerTripleQ schreef op donderdag 04 augustus 2011 @ 12:56:
Kan ik alles opnieuw doen..
Kater? Eerst water, de rest komt later
Tools -> Options -> Environment -> When a program startsTripleQ schreef op donderdag 04 augustus 2011 @ 12:56:
Zucht, vandaag met een dinosaurus project bezig in VB6.
Paar uur bezig, crasht VB6 ineens (onder windows7, ook not supported door MS)
Open ik mijn project opnieuw, is de helft weg
Blijkbaar saved die je bestand niet als je het project compileert, dit in tegenstelling tot Visual Studio (2010). Dit doet dat wel. Ben dan dus niet gewend om de bestanden te saven tussendoor
Kan ik alles opnieuw doen..
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Je kunt ASP.net MVC 3 toch niet vergelijken met PHP? Vergelijk het dan met CakePHP, Ruby-on-Rails, Django e.d.?
En inderdaad, je hebt tegenwoordig prachtige frameworks. Ik ben daar nog vrij nieuw mee, maar ben enorm onder de indruk. Ik heb een hele website gemaakt in tientallen kilobytes aan programmeercode. Je programmeert gewoon 10x sneller en beter.
En inderdaad, je hebt tegenwoordig prachtige frameworks. Ik ben daar nog vrij nieuw mee, maar ben enorm onder de indruk. Ik heb een hele website gemaakt in tientallen kilobytes aan programmeercode. Je programmeert gewoon 10x sneller en beter.
Een PoSh-oplossing die ik veel gebruik om internationalisatie te lijf te gaan:Grijze Vos schreef op woensdag 03 augustus 2011 @ 15:23:
Dit is niet eens het ergste van de ramp van 130kloc waar ik nu mee bezig ben:
C#:
1(...)
PowerShell:
1
2
3
4
5
6
7
8
9
10
11
| Function Using-Culture ([System.Globalization.CultureInfo]$Culture,[ScriptBlock]$Script) { $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture Trap { [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture } [System.Threading.Thread]::CurrentThread.CurrentCulture = $Culture Invoke-Command $Script [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture } |
Hiermee run je een scriptblock in een bepaalde culture.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| PS C:\> Using-Culture en-us {Get-Date} Thursday, August 04, 2011 13:26:45 PS C:\> Using-Culture nl-be {Get-Date} donderdag 4 augustus 2011 13:26:52 PS C:\> Using-Culture fr-be {Get-Date} jeudi 4 août 2011 13:26:57 PS C:\> Using-Culture de-de {Get-Date} Donnerstag, 4. August 2011 13:27:02 PS C:\> Using-Culture it-it {Get-Date} giovedì 4 agosto 2011 13.27.10 |
Was bij mij een noodzaak om te exporteren naar Excel - daar gaat een en ander mis als de culture niet en-us is.
[ Voor 56% gewijzigd door YellowOnline op 04-08-2011 13:41 ]
Gedaan nuPiepPiep schreef op donderdag 04 augustus 2011 @ 13:07:
[...]
Tools -> Options -> Environment -> When a program starts

En idd gaat het wel sneller de tweede keer...Hoef er bijna niet meer bij na te denken.
Maar leuk is anders
Ruby:
1
2
3
4
5
6
7
| def geef_voorstanders_van_een_sub_proposal_waar_invloed_groter_dan_twee_is_die_in_een_coalitie_van_actor_zit(actor, sub_proposal) voorstanders = Array.new actor.coalitions.each do |coalition| coalition.actors.select { |a| a.get_vote_for_sub_proposal(sub_proposal).voteEnum == Vote::PRO && a.calculated_proposal_influence > 2 && a != actor }.each { |a| voorstanders << a } end voorstanders.uniq end |
Vandaag bovenstaande pareltje weer eens tegengekomen in een project wat ik geërfd heb. Ok, niet iedereen is fan van het afkappen van regels op 80 tekens, dat kan ik mij nog voorstellen. Maar om nou volledige zinnen als functienaam te gebruiken en daarbij nog eens Nederlands en Engels door elkaar te gebruiken

En dan programmeren zonder code completion.
Woh, die is echt mooi.Leftblank schreef op donderdag 04 augustus 2011 @ 16:33:
Ruby:
1 2 3 4 5 6 7 def geef_voorstanders_van_een_sub_proposal_waar_invloed_groter_dan_twee_is_die_in_een_coalitie_van_actor_zit(actor, sub_proposal) voorstanders = Array.new actor.coalitions.each do |coalition| coalition.actors.select { |a| a.get_vote_for_sub_proposal(sub_proposal).voteEnum == Vote::PRO && a.calculated_proposal_influence > 2 && a != actor }.each { |a| voorstanders << a } end voorstanders.uniq end
Vandaag bovenstaande pareltje weer eens tegengekomen in een project wat ik geërfd heb. Ok, niet iedereen is fan van het afkappen van regels op 80 tekens, dat kan ik mij nog voorstellen. Maar om nou volledige zinnen als functienaam te gebruiken en daarbij nog eens Nederlands en Engels door elkaar te gebruiken.
zet_dit_object_om_naar_een_touwtje
Verwijderd
Niet echt programmeren, maarja...
De externe HDD van mijn vriendin valt steeds in slaap tijdens een film kijken. Is helaas hardcoded en erg vervelend, aangezien hij ieder half uur (3x per film dus) op standby gaat, moet opspinnen, en dan gaat de film verder. Dan ben je al gauw een halve minuut verder. Waarom de schijf dat doet... geen flauw idee, er wordt wel van gelezen dus het zou niet mogen...
Nouja, aanschouw mijn creatieve oplossing in de vorm van een batchfile als we een film gaan kijken
De externe HDD van mijn vriendin valt steeds in slaap tijdens een film kijken. Is helaas hardcoded en erg vervelend, aangezien hij ieder half uur (3x per film dus) op standby gaat, moet opspinnen, en dan gaat de film verder. Dan ben je al gauw een halve minuut verder. Waarom de schijf dat doet... geen flauw idee, er wordt wel van gelezen dus het zou niet mogen...
Nouja, aanschouw mijn creatieve oplossing in de vorm van een batchfile als we een film gaan kijken
code:
1
2
3
4
5
6
7
8
9
| :start H: echo kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. > keepalive.bullshit attrib +H keepalive.bullshit timeout /t 20 attrib -H keepalive.bullshit del H:\keepalive.bullshit timeout /t 20 GOTO start |
Buffert je mediaplayer dan te veel? Of is het de filesystem cache van het OS dat ineens gans de film cached? Wanneer ik met VLC muziek afspeel heb ik soms een gelijkaardig probleem, kan waarschijnlijk met een setting opgelost worden.Verwijderd schreef op donderdag 04 augustus 2011 @ 16:42:
Niet echt programmeren, maarja...
De externe HDD van mijn vriendin valt steeds in slaap tijdens een film kijken. Is helaas hardcoded en erg vervelend, aangezien hij ieder half uur (3x per film dus) op standby gaat, moet opspinnen, en dan gaat de film verder. Dan ben je al gauw een halve minuut verder. Waarom de schijf dat doet... geen flauw idee, er wordt wel van gelezen dus het zou niet mogen...
Nouja, aanschouw mijn creatieve oplossing in de vorm van een batchfile als we een film gaan kijken
code:
1 2 3 4 5 6 7 8 9 :start H: echo kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. kloteschijfmoetblijvenlevenennietslapen. > keepalive.bullshit attrib +H keepalive.bullshit timeout /t 20 attrib -H keepalive.bullshit del H:\keepalive.bullshit timeout /t 20 GOTO start
Daar heb je toch wel extremere oplossingen voor?
pleur er zoveel geheugen in dat de hele film in het geheugen past (is ook beter qua energieverbruik).
Of schrijf je eigen videospeler die constant van schijf leest,
.
of euh. Kan niks origineels bedenken, nevermind.
Of schrijf je eigen videospeler die constant van schijf leest,
of euh. Kan niks origineels bedenken, nevermind.
Áls het al een test is, is Verdachte dingen bij inloggen op mijn.ing.nl trouwens wel met stip kanshebber voor de slechtste-programmeervoorbeeld-van-het-jaar bokaal.
{signature}
Firmware patchenYopY schreef op donderdag 04 augustus 2011 @ 21:26:
Daar heb je toch wel extremere oplossingen voor?pleur er zoveel geheugen in dat de hele film in het geheugen past (is ook beter qua energieverbruik).
Of schrijf je eigen videospeler die constant van schijf leest,.
of euh. Kan niks origineels bedenken, nevermind.
Argh. Even twee text-parameters in T-SQL aan elkaar plakken, maar dat mag niet met text omdat, ja, euh. Gewoon.
Dus:
Hé, er verdwijnt tekst. Ah:
Dus:
SQL:
1
| set @Foo = CAST(ISNULL(@TextParam1, '') as varchar) + CAST(ISNULL(@TextParam2, '') as varchar) |
Hé, er verdwijnt tekst. Ah:
When n is not specified when using the CAST and CONVERT functions, the default length is 30.
[ Voor 6% gewijzigd door CodeCaster op 06-08-2011 10:28 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Dan is de buffering van VLC waarschijnlijk niet goed. De buffer zou altijd vol genoeg moeten zijn om zo'n spinup te overleven.Bob schreef op donderdag 04 augustus 2011 @ 17:03:
Buffert je mediaplayer dan te veel? Of is het de filesystem cache van het OS dat ineens gans de film cached? Wanneer ik met VLC muziek afspeel heb ik soms een gelijkaardig probleem, kan waarschijnlijk met een setting opgelost worden.
Nou ja, als hij het heeft over dertig seconden opspintijd heb je het al gauw over 1/200e film, met een béétje film heb je het dan over 5 gig, dus 25 MB aan buffer. Da's al relatief veel, hoewel dat tegenwoordig makkelijk kan, gezien de hoeveelheid geheugen die een courante pc aan boord heeft.
Als ik zo snel zoek op het www schijnt de standaardbuffergrootte van VLC ook maar 300 milliseconde (!) te zijn. Als je dat verhonderdvoudigt ben je er ook.
Als ik zo snel zoek op het www schijnt de standaardbuffergrootte van VLC ook maar 300 milliseconde (!) te zijn. Als je dat verhonderdvoudigt ben je er ook.
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Toevallig via eSata op een JMicron chipset aangesloten?Verwijderd schreef op donderdag 04 augustus 2011 @ 16:42:
De externe HDD van mijn vriendin valt steeds in slaap tijdens een film kijken
Deed mijn schijf ook, ook tijdens het schrijven van backups

Heb er een 'speciale' eSata driver voor gevonden waarna het niet meer is gebeurd; zou de link even voor je moeten opzoeken.
Ik weet niet of het een slecht programmeervoorbeeld is, of een programmeur die geilt op significantie, maar dit is toch wel heel erg nauwkeurig:

If money talks then I'm a mime
If time is money then I'm out of time
Nou, zo heel erg significant zullen de laatste cijfers wel niet zijn, of het wordt wel heel erg precies in de database opgeslagen
Waarschijnlijk is het met mktime of microtime gedaan.
Maar dan nog, rond het af op hele dagen (naar onder). Ach ja, hij heeft zijn lolletje. =]
Ik kwam wat oude code van mezelf tegen:
Ik hoop dat ik dat expres heb gedaan
PHP:
1
| if ($debug && !$debug) { /* doe iets debug-igs */ } |
Ik hoop dat ik dat expres heb gedaan

Jouw versie van php ondersteunde operator overloading, en je ! had je iets 'bijzonders' mee gedaan?
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Dat zou wel een mooie mindfuck zijn. Een ! die een variabele op false zet en true teruggeeft als dat lukt
nondeju, ik bekijk even de PasteBin van de nieuwe AntiSec hack.
Tel de wtf's:
Tel de wtf's:
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
| //////////////////////////////////////////////////////////////////////////////// For the Blackhat & DEFCON conferences, we figure yall should hear it straight from some real black hats. It's time to bust out the old school hacklog and mock how vulnerable and insecure our enemies in blue really are. //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // CONNECT.PHP // SAFE_QUERY()... WAY TO MAKE SQL INJECTIONS WORSE BY NOT VALIDATING INPUT ... // BUT INSTEAD PASSING RAW INPUT TO SHELL_EXEC() ALLOWING COMMAND EXECUTION !!! //////////////////////////////////////////////////////////////////////////////// <? $i = 0; $path = ''; while(!is_file($path."admin/config/classes/dymin_main.php")){ $path .= '../'; $i++; if($i>10){ $path = ''; break; } } include($path."admin/config/dymin_config.php"); function safe_query($query){ if(strpos(getcwd(),'admin')){ shell_exec("echo '".date("Y-m-d H:i:s")."|".$query."' >> /var/sql_logs/".str_replace("www.","",$_SERVER['HTTP_HOST']."")); } $database = DATABASE; $username = DATABASE_USER; $password = DATABASE_PASS; $destination = DATABASE_HOST; mysql_connect($destination, $username, $password) or die("<br>Unable to connect to database: <br>". mysql_error()); mysql_select_db($database) or die ("<br> Unable to select database[$database]: <br>" . mysql_error()); $result = mysql_query($query); return $result; } ?> //////////////////////////////////////////////////////////////////////////////// // VERIFY_LOGIN.PHP // ITS BEEN A HOT MINUTE SINCE I'VE SEEN ' OR 'a'='a SQL INJECTIONS WORK // BUT BJM NEVER FAILS TO DELIVER THE MOST OBVIOUS OF VULNERABILITIES //////////////////////////////////////////////////////////////////////////////// <?php session_start(); $username = $_GET['username']; $password = $_GET['password']; include "../config/connect.php"; sleep(2); $query = "select * from dymin_user where username = '$username' and password = '$password'"; $result = safe_query($query); $num = mysql_num_rows($result); if($num == ''){ echo "<img src=\"images/login_deny.gif\">"; }else{ $id = mysql_result($result,0,'id'); $level = mysql_result($result,0,'level'); $_SESSION['user_id'] = $id; $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['level'] = $level; } ?> //////////////////////////////////////////////////////////////////////////////// // RENAME_FILE.PHP // PASSING RAW USER-SUPPLIED INPUT TO RENAME AND INCLUDE FUNCTIONS ... // TWO VULNERABILITIES FOR THE PRICE OF ONE!! //////////////////////////////////////////////////////////////////////////////// <? error_reporting(E_ALL); ini_set('display_errors', '1'); include "../../admin/config/connect.php"; $filename = $_POST['name']; $type = $_POST['type']; $uploads_dir_path_with_date = '../../uploads/'.date("Ymd").'/'; $uploads_dir_path = '../../uploads/'.date("Ymd").'/'; $uploads_dir_path_no_date = '../../uploads/'; if(!is_file($uploads_dir_path_no_date.'log.txt')){ $fh = fopen("$uploads_dir_path_no_date"."log.txt",'w'); shell_exec("chmod 777 $uploads_dir_path_with_date"."log.txt"); fclose($fh); } if(!is_dir($uploads_dir_path_with_date)){ mkdir($uploads_dir_path_with_date,'0777'); shell_exec("chmod 777 $uploads_dir_path_with_date"); } $id = $_GET['id']; $new_name = md5(microtime().$filename.mt_rand(10000, 32000)); rename("$uploads_dir_path_no_date$filename","$uploads_dir_path_with_date$ new_name$type"); //write file upload log $fh = fopen("$uploads_dir_path_no_date"."log.txt",'a'); $log_info = 'DATE: '.date("m-d-Y His")."\t"; $log_info .= 'HTTP_HOST: '.$_SERVER['HTTP_HOST']."\t"; $log_info .= 'REMOTE_ADDR: '.$_SERVER['REMOTE_ADDR']."\t"; $log_info .= 'SCRIPT_FILENAME: '.$_SERVER['SCRIPT_FILENAME']."\t"; $log_info .= 'OLD_FILENAME: '.$filename."\t"; $log_info .= 'NEW_FILENAME: '.$new_name."\t\n"; fwrite($fh,$log_info); fclose($fh); unset($fh,$log_info); $file_to_include = $_GET['filename']; include "$file_to_include"; ?> //////////////////////////////////////////////////////////////////////////////// // UPLOADIFY.PHP // WAY TO GO, COMMENTING OUT THE FILE EXTENSION VALIDATING CODE //////////////////////////////////////////////////////////////////////////////// <?php if (!empty($_FILES)) { $tempFile = $_FILES['Filedata']['tmp_name']; $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/'; $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name']; // $fileTypes = str_replace('*.','',$_REQUEST['fileext']); // $fileTypes = str_replace(';','|',$fileTypes); // $typesArray = split('\|',$fileTypes); // $fileParts = pathinfo($_FILES['Filedata']['name']); // if (in_array($fileParts['extension'],$typesArray)) { // Uncomment the following line if you want to make the directory if it doesn't exist // mkdir(str_replace('//','/',$targetPath), 0755, true); move_uploaded_file($tempFile,$targetFile); echo "1"; // } else { // echo 'Invalid file type.'; // } } ?> //////////////////////////////////////////////////////////////////////////////// // SHOW_IMAGE_DOWNLOAD.PHP // HEY LETS TAKE RAW USER INPUT AND PASS IT TO READFILE() ... // AT LEAST THEY HAD THE COURTESY OF VERIFYING IS_FILE() FOR US!!! //////////////////////////////////////////////////////////////////////////////// <? include "config/header.php"; ?> <?php $filename = $_GET['filename']; if(is_file($filename)) { header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment; filename=".basename($filename).";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile("$filename"); exit(); } ?> //////////////////////////////////////////////////////////////////////////////// // UPLOAD_SCANNER.SH // UH OH... THEY ARE CLOSING IN ON OUR C99 SHELL!!! PLEASE... //////////////////////////////////////////////////////////////////////////////// #!/bin/bash # # Scan for PHP in upload folders # MAILTO="-c galexander@bjmweb.com -c markm@bjmweb.com -c bnewman@bjmweb.com root" EXCLUDES="-e watermark_wanted_photo.php -e checkimages.php -e watermark_recalled_photo.php" lineify (){ for i in $* do echo $i done } # testing #EXCLUDES="numnum" #MAILTO="jwiegand@bjmweb.com" # UHOH=$(/usr/bin/find /var/www/vhosts/*/httpdocs/uploads/*.php | \ grep -v $EXCLUDES) if [ "${UHOH}xx" != "xx" ] then lineify $UHOH | mail -s "Go Daddy - Upload Scanner" $MAILTO |
Misschien de boolean waarde FILE_NOT_FOUNDPatriot schreef op zaterdag 06 augustus 2011 @ 18:15:
Dat zou wel een mooie mindfuck zijn. Een ! die een variabele op false zet en true teruggeeft als dat lukt
Verwijderd
Ik wil niet meer leven.BarôZZa schreef op zondag 07 augustus 2011 @ 05:15:
nondeju, ik bekijk even de PasteBin van de nieuwe AntiSec hack.
Tel de wtf's:
[snip]
Die eerste while is al meteen leuk. Hoezo weet je niet wat het root pad van je applicatie is?
Certified smart block developer op de agile darkchain stack. PM voor info.
Dat is niet eens het enige wat mis is met die lus. Kijk maar wat er gebeurd als zelfs met 10x '../' niets gevonden wordt.Not Pingu schreef op zondag 07 augustus 2011 @ 14:00:
Die eerste while is al meteen leuk. Hoezo weet je niet wat het root pad van je applicatie is?
Volgens mij heeft die code meer fouten dan regels.
Bezoek eens een willekeurige pagina
EdwinG schreef op zondag 07 augustus 2011 @ 16:29:
[...]
Dat is niet eens het enige wat mis is met die lus. Kijk maar wat er gebeurd als zelfs met 10x '../' niets gevonden wordt.
Volgens mij heeft die code meer fouten dan regels.

Hehe. Ik gebruik zelf wel eens een constructie als deze:Patriot schreef op vrijdag 05 augustus 2011 @ 21:55:
Ik kwam wat oude code van mezelf tegen:
PHP:
1 if ($debug && !$debug) { /* doe iets debug-igs */ }
Ik hoop dat ik dat expres heb gedaan
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| static double f_cache[1000]; double f(int x) { if (x >= 0 && x < 1000 && cache[x] == cache[x]) return cache[x]; double y; /* ingewikkelde berekening hier */ if (x >= 0 && x < 1000) cache[x] = y; return y; } int main() { memset(f_cache, -1, sizeof(f_cache)); /* meer code hier */ } |
Levert leuke reacties op bij mensen die alleen regel 5 zien en/of niet snappen hoe floating point arithmetic werkt.
Hmm, interessant. Hoe kunnen deze twee waarden van elkaar afwijken in een single-threaded applicatie?
Bij float (die 0 is) == 0.0f kan er nog wel eens false uitrollen door gebrek aan precisie, maar anders weet ik het inderdaad ook niet.Feanathiel schreef op zondag 07 augustus 2011 @ 21:39:
Hmm, interessant. Hoe kunnen deze twee waarden van elkaar afwijken in een single-threaded applicatie?
Daar kan ik nog inkomen (0.1 + 0.2 - 0.3 != 0). Maar van een waarde die bit precies (?) uit het geheugen wordt geladen zou ik verwachten dat deze precies overeen zou moeten komen.Orwell schreef op zondag 07 augustus 2011 @ 21:43:
[...]
Bij float (die 0 is) == 0.0f kan er nog wel eens false uitrollen door gebrek aan precisie, maar anders weet ik het inderdaad ook niet.
Ja, dat dus.Feanathiel schreef op zondag 07 augustus 2011 @ 21:52:
Daar kan ik nog inkomen (0.1 + 0.2 - 0.3 != 0).
Dat geldt inderdaad ook voor de floats ja. Het zijn ook maar gewoon 2 stukjes uint en een sign bit.Maar van een waarde die bit precies (?) uit het geheugen wordt geladen zou ik verwachten dat deze precies overeen zou moeten komen.
Vaag.
Oh, wacht es, heeft dit niet iets met NaN te maken? #INF en dat soort enge IEEEEEEE-rommel enzo?
[ Voor 9% gewijzigd door Orwell op 07-08-2011 22:01 ]
OverflowExceptionBarôZZa schreef op zondag 07 augustus 2011 @ 05:15:
Tel de wtf's:
Is me niet helemaal duidelijk waar dit vandaan komt, als dat de site van de Amerikaanse politie is dan is het wel heel erg.
Mwa, ik geloof niet dat je de schuld moet geven aan de organisatie waar de hack op uitgevoerd is, maar op de ontwikkelaars die dat soort rommel uitbraken en ook nog geloven dat ze slim bezig zijn. De PHP dev community is ziek, wat mij betreft.hostname schreef op zondag 07 augustus 2011 @ 22:00:
[...]
OverflowException![]()
Is me niet helemaal duidelijk waar dit vandaan komt, als dat de site van de Amerikaanse politie is dan is het wel heel erg.
Verwijderd
Ja, want natuuurlijk is iedere PHP dev zo en kunnen ze alleen maar rommel uitbraken. Alsjeblieft.YopY schreef op maandag 08 augustus 2011 @ 09:56:
[...]
Mwa, ik geloof niet dat je de schuld moet geven aan de organisatie waar de hack op uitgevoerd is, maar op de ontwikkelaars die dat soort rommel uitbraken en ook nog geloven dat ze slim bezig zijn. De PHP dev community is ziek, wat mij betreft.
Aan de onderkant van de markt wel hoor, daar wemelt het van de stagiairs, niet-opgeleiden en jonge managers die van hun hobby hun werk hebben gemaakt. Elk punt an sich hoeft niet voor problemen te zorgen, maar zet een handvol van "zulke" mensen bij elkaar en je hebt een recept voor een ramp.
Maar ja, wat verwacht je dan als je voor bedragen vanaf een euro of tweehonderd een complete website met CMS en de hele rataplan ontworpen en geïmplementeerd wil hebben? Daarmee kun je drie, vier uur werk betalen voor iemand met een béétje ervaring...
Maar ja, wat verwacht je dan als je voor bedragen vanaf een euro of tweehonderd een complete website met CMS en de hele rataplan ontworpen en geïmplementeerd wil hebben? Daarmee kun je drie, vier uur werk betalen voor iemand met een béétje ervaring...
[ Voor 15% gewijzigd door CodeCaster op 08-08-2011 10:30 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Dat behoeft misschien wat meer uitleg?YopY schreef op maandag 08 augustus 2011 @ 09:56:
[...]
De PHP dev community is ziek, wat mij betreft.
i7 10700, 32GB RAM, RTX 3080
Nee, 0 is 0. De enige false die je krijgt is wanneer de float niet echt 0 is. Maar waar het hier om gaat is NaNs, NaN == NaN => false. Let ook op de memset in main(), die alle bits van de float op 1 zet (wat het een NaN maakt)Orwell schreef op zondag 07 augustus 2011 @ 21:43:
[...]
Bij float (die 0 is) == 0.0f kan er nog wel eens false uitrollen door gebrek aan precisie, maar anders weet ik het inderdaad ook niet.
[ Voor 10% gewijzigd door .oisyn op 08-08-2011 10:58 ]
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.
In C# is NaN != NaN (ik weet dat de discussie of C++ gaat.oisyn schreef op maandag 08 augustus 2011 @ 10:57:
[...]
Nee, 0 is 0. De enige false die je krijgt is wanneer de float niet echt 0 is. Maar waar het hier om gaat is NaNs, NaN == NaN => false. Let ook op de memset in main(), die alle bits van de float op 1 zet (wat het een NaN maakt)
Maar in C# doe je Double.IsNaN om te testen of iets NaN is:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| static void Main(string[] args) { Test(double.NaN); Console.ReadLine(); } private static void Test(double value) { Console.WriteLine(double.NaN == value); Console.WriteLine(double.IsNaN(value)); } |
Result:
False
True
Going for adventure, lots of sun and a convertible! | GMT-8
Dat stelt 'ie dan ookSnake schreef op maandag 08 augustus 2011 @ 11:30:
[...]
In C# is NaN != NaN (ik weet dat de discussie of C++ gaat)
[ Voor 5% gewijzigd door PrisonerOfPain op 08-08-2011 11:47 ]
Dat zeg ik niet.Verwijderd schreef op maandag 08 augustus 2011 @ 10:03:
[...]
Ja, want natuuurlijk is iedere PHP dev zo en kunnen ze alleen maar rommel uitbraken. Alsjeblieft.
En mbt de PHP community is ziek, d'r zijn teveel gevallen (zie ook dit onderwerp) over klok / klepel als het aankomt op SQL injectie en dergelijke, mensen die pertinent weigeren om 3rd party libraries te gebruiken met excuses als 'da ken ik nie', en een gigantische hoeveelheid aan slechte tutorials en voorbeelden op internet.
Niet alles, maar wel verdacht veel.
/rant
Het mooiste excuus om geen third party te gebruiken is: "er zitten zoveel dingen in die ik toch niet gebruik". Het argument om het wel te gebruiken "wat je wel gebruikt is al honderd keer getest en bewezen" is dan weer geen geldig argument

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Mijn ervaring met amateurs is dat ze libraries links laten liggen omdat ze t niet zelf geschreven hebben, een ander kan dat toch nooit beter gemaakt hebben dan jijzelf? Stom voorbeeld: er moest voor een site even full page cache ingebakken worden, dus ik had ff Zend_Cache doorgegeven (een stuk of 10 php-files max denk ik) en er 5 regels code bijgeplaatst, als ie even t mapje had neergezet in z'n docroot en die regels erin had gezet dan zou ie klaar zijn. Toen ik een weekje later vroeg of t gelukt was zei ie dat ie uren bezig was geweest om zijn eigen versie te schrijven en dat dit uiteindelijk wel werkte. Tja, zonde van je tijd dus...
Jaahaa, we hebben comments!
C#:
1
2
3
4
5
| //Configure log4net log4net.Config.XmlConfigurator.Configure(/* een of ander pad */); //Instantiate relations class relations = new Relations(); |

[ Voor 15% gewijzigd door Alex) op 08-08-2011 13:42 ]
We are shaping the future
Het kan ook andersom; mensen die wel libraries gebruiken, maar die vervolgens zelf gaan "verbeteren".
Zo moest ik een tijdje terug kijken naar de migratie van een php-applicatie die gebruik maakte van Zend. Zou een eitje horen te zijn, ware het niet dat men voor zo'n beetje elke standaard database-functie van Zend een eigen versie had geschreven die het vervolgens enkel geschikt maakte voor MySQL. Dan gebrúik je een database-wrapper, en dan ga je handmatig de compatibiliteit alsnog verknallen... En helaas voegden de eigen toevoegingen ook echt niets nuttigs toe
Zo moest ik een tijdje terug kijken naar de migratie van een php-applicatie die gebruik maakte van Zend. Zou een eitje horen te zijn, ware het niet dat men voor zo'n beetje elke standaard database-functie van Zend een eigen versie had geschreven die het vervolgens enkel geschikt maakte voor MySQL. Dan gebrúik je een database-wrapper, en dan ga je handmatig de compatibiliteit alsnog verknallen... En helaas voegden de eigen toevoegingen ook echt niets nuttigs toe

Eigenaar/brouwer Milky Road Brewery
Rustig maar, niet direct in de verdediging schietenVerwijderd schreef op maandag 08 augustus 2011 @ 10:03:
[...]
Ja, want natuuurlijk is iedere PHP dev zo en kunnen ze alleen maar rommel uitbraken. Alsjeblieft.
Als ik zelf aan de slag ga, dan is dat meestal als oefening voor mezelf.kenneth schreef op maandag 08 augustus 2011 @ 13:35:
Het mooiste excuus om geen third party te gebruiken is: "er zitten zoveel dingen in die ik toch niet gebruik". Het argument om het wel te gebruiken "wat je wel gebruikt is al honderd keer getest en bewezen" is dan weer geen geldig argument
Ik ben een keer aan een DB-Wrapper begonnen op basis van het Strategy design pattern.
Zo leerde ik in één keer:
- OO in PHP (inclusief interfaces!)
- Toepassen van een design pattern in de praktijk
- DB methods uit de PHP API voor verschillende DB-types
Als ik echter iets op moet leveren, pak ik toch ADODb.
Ja, vooruit, ik zei het een beetje krom. Je hebt bijvoorbeeld bij het berekenen van bitangents in 3D wel is dat die bitangentvector volgens denklogica bijvoorbeeld (0,0,1) wordt, waar je voor doeleind X dan if(bitangent.x == 0.0f) zou doen..oisyn schreef op maandag 08 augustus 2011 @ 10:57:
Nee, 0 is 0. De enige false die je krijgt is wanneer de float niet echt 0 is. Maar waar het hier om gaat is NaNs, NaN == NaN => false. Let ook op de memset in main(), die alle bits van de float op 1 zet (wat het een NaN maakt)
Werkt dus niet, omdat dan toch toevallig er (0.0000013534534,0.000000012123,1) uit het cross product van de tangent en normal zou komen. Dan kan je dus gaan controleren op if(bitangent.x < 1e-6) en dat soort spul.
En uh, wat is er zo NaN aan een double waar (-1,-1,-1,-1,-1,-1,-1,-1) in binary in staat? Da's gewoon 8(10000001). Zal vast een vage waarde zijn, maar NaN niet lijkt me.
Edit.
-1.#QNAN0.
Epic.
Een char met de waarde -1 in two's complement is 11111111. Ergo, alle bits in de double staan op 1. De IEE-754 regels zeggen dat als de exponent uit allemaal enen bestaat, en de bits in de mantissa zijn niet allemaal 0, dan is dat een NaN. Vervolgens bepaalt de most significant bit in de mantissa of het een quiet of een signaling NaN is (ergo, het verschil tussen gewoon doorrekenen en het gooien van een exception)Orwell schreef op maandag 08 augustus 2011 @ 16:47:
En uh, wat is er zo NaN aan een double waar (-1,-1,-1,-1,-1,-1,-1,-1) in binary in staat? Da's gewoon 8(10000001). Zal vast een vage waarde zijn, maar NaN niet lijkt me.
[ Voor 6% gewijzigd door .oisyn op 08-08-2011 17:10 ]
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.
Oeps, moest in de pleurhoek!
[ Voor 86% gewijzigd door Matis op 08-08-2011 17:24 ]
If money talks then I'm a mime
If time is money then I'm out of time
Als ik het goed vat is dat two's complement voor +1 -> -1 alle bits flippen en optellen, decimaal beter bekend als signed max min waarde en flip sign bit. Weer wat geleerd. Dan is het dus inderdaad 1..oisyn schreef op maandag 08 augustus 2011 @ 17:07:
Een char met de waarde -1 in two's complement is 11111111. Ergo, alle bits in de double staan op 1. De IEE-754 regels zeggen dat als de exponent uit allemaal enen bestaat, en de bits in de mantissa zijn niet allemaal 0, dan is dat een NaN. Vervolgens bepaalt de most significant bit in de mantissa of het een quiet of een signaling NaN is (ergo, het verschil tussen gewoon doorrekenen en het gooien van een exception)
Uhm dus het maximum wat de float/double aan kan geven (>0^(2^n)) is dus NaN? Aha.
Nee dat is +Inf. Het grootste geldige normale nummer is (2-2-23) × 2127 (ongeveer 3.4×1038). NaN betekend Not A Number ergo, het kan onmogelijk het grootste nummer zijn.Orwell schreef op maandag 08 augustus 2011 @ 17:29:
Uhm dus het maximum wat de float/double aan kan geven (>0^(2^n)) is dus NaN? Aha.
[ Voor 10% gewijzigd door PrisonerOfPain op 08-08-2011 18:15 ]
Bah... Moest vandaag gebruik maken van een oud project dat nog een oude manier om naar de database te connecten gebruikt (een framework er omheen gebouwd zeg maar). Heeft me 4 uur gekost om erachter te komen waarom mijn redelijk simpele query een lege tabel terug gaf, terwjil hij in SQL Studio gewoon wel data gaf. Bleek uiteindelijk dat dit framework onder bepaalde omstandigheden automatisch een 'where deleted_cd = 0' in the where clause zet (elk record heeft in principe een deleted_cd). Toevallig moest ik juist de verwijderde records hebben, dus ik zocht op deleted_cd = 1, waardoor de query uiteindelijk uitkwam op "select ... from ... where deleted_cd = 0 and deleted_cd = 1". Niks dat erop wijst dat de query vanzelf gewijzigd wordt, nergens een debug statement met de echte query die uitgevoerd wordt, etc. De programmeur die dit framework geschreven had werkt hier al jaren niet meer, ik had zelfs geen source van het framework meer, moest de DLL uiteindelijk gaan decompileren om erachter te komen wat er nou precies uitgevoerd werd...
Dit topic is gesloten.
Let op:
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.