486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
En dat is vaak ook vreselijk irritant, omdat je dan niks aan de melding hebt. Leuk als ik te horen krijg dat een parameter een ongeldige waarde bevat, maar bied dan op z'n minst ook de mogelijkheid om te tonen wat die waarde dan was. Dan moet je gaan debuggen (vaak lastig of onmogelijk in productieomgeving), of hopen dat je goede logs hebt om info uit te vissen.Alex) schreef op vrijdag 03 september 2010 @ 10:52:
[...]
Je moet niet de waardes van de variabelen laten outputten omdat je nooit weet wie die dingen leest. C# toont je het type en de naam van de parameter, maar niet de waarde.
Kater? Eerst water, de rest komt later
[ Voor 33% gewijzigd door PeterSelie op 03-09-2010 11:10 ]
Dan nog is een probleem als verkeerde gebruikersnaam en wachtwoord prima te achterhalen, als je begint met het opnieuw invoeren van deze gegevens weet je in ieder geval dat het probleem daar niet gezocht hoeft te worden en hoef je de boel ook niet te loggen / weer te geven binnen een exception..Stoffel schreef op vrijdag 03 september 2010 @ 11:11:
Soms kan dat niet anders, hoe goed je ook probeert om de verschillende omgevingen hetzelfde te houden, je kunt altijd problemen hebben die zich alleen op productie voordoen. Dan is de keuze of niet oplossen of daar testen, en het eerste krijg je niet echt verkocht
http://www.google.nl/search?q=recursionLaurens-R schreef op vrijdag 03 september 2010 @ 10:03:
... recursie is voor velen blijkbaar een moeilijk concept, maar ik denk niet dat je dan in een bedrijf software moet gaan ontwikkelen
Klopt, in deze situatie. Ik bedoelde meer dat je productie-issues in het algemeen soms noodgedwongen ook daar moet testen.SoaDmaggot schreef op vrijdag 03 september 2010 @ 11:13:
[...]
Dan nog is een probleem als verkeerde gebruikersnaam en wachtwoord prima te achterhalen, als je begint met het opnieuw invoeren van deze gegevens weet je in ieder geval dat het probleem daar niet gezocht hoeft te worden en hoef je de boel ook niet te loggen / weer te geven binnen een exception..
Klopt, je komt in (vooral grote projecten) zo nu en dan momenten tegen waarin je noodgedwongen op productie zal moeten testen, aangezien in veel gevallen deze omgevingen in bepaalde aspecten aanzienlijk verschillen van testomgevingen. Maar, in dit geval ging het om het weergeven of opslaan van login credentialsStoffel schreef op vrijdag 03 september 2010 @ 11:27:
[...]
Klopt, in deze situatie. Ik bedoelde meer dat je productie-issues in het algemeen soms noodgedwongen ook daar moet testen.
1
2
3
4
5
6
7
8
| //dag $today = date('d'); $yesterday = $today-1; $daybeforeyesterday = $today-2; //maand precies hetzelfde //jaar precies hetzelfde |
Vraag me af hoe je daar ooit op komt.
Als in de code erna in een lusje met today en yesterday vergeleken wordt zou het best snelheidswinst kunnen opleveren.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
Ja? Wat als je een dag pakt die voor de derde van de maand ligt?PiepPiep schreef op vrijdag 03 september 2010 @ 12:38:
Is dat heel fout?
Als in de code erna in een lusje met today en yesterday vergeleken wordt zou het best snelheidswinst kunnen opleveren.
Klinkt een beetje als de papegaai van Herman Finkers:
Gaat ongeveer zo:
"En als ik twee augustus terugkom?"
- "Dan ben ik één augustus weg!"
"En als ik één augustus terugkom?"
- "... Dan ben ik half augustus weg!"
(Geen geluid hier, kan 't niet verifiëren
[ Voor 35% gewijzigd door CodeCaster op 03-09-2010 12:45 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Ja dat is fout.. Stel dat date('d') 1 output? Zit je met eergister dus op -1 Augustus?PiepPiep schreef op vrijdag 03 september 2010 @ 12:38:
Is dat heel fout?
Als in de code erna in een lusje met today en yesterday vergeleken wordt zou het best snelheidswinst kunnen opleveren.
Spuit11..
[ Voor 3% gewijzigd door PeterSelie op 03-09-2010 12:41 ]
Met jaren is het eventueel nog wel te doen, maar netter is om gewoon iets met strtotime of mktime te doen.
1
2
3
4
5
| $today = mktime(0,0,0); // Deze zie je ook te veel: $yesterday = $today - 86400; // Waar je deze wil gebruiken: $yesterday = strtotime('-1 day', $today); |
Anyone who gets in between me and my morning coffee should be insecure.
imho bouw je er een codegenerator omheen die afhankelijk van het onderliggende OS en filesystem de max diepte van mappen vaststelt en net zolang loopt totdat er op het diepste niveau gezocht kan worden.Verwijderd schreef op vrijdag 03 september 2010 @ 10:23:
@Laurens-R: Hoe heb je het opgelost, de loop nog 10x gekopieerd? 13 niveau's zal wel genoeg zijn, zo niet gewoon nog iets vaker kopiëren.
It's super effective! En je kunt 'code generation' op je CV zetten. Evt. zelfs 'recursive code generation based on OS and FS specific variables'.
Senior developer garantie
Dat laatste kan nog wel korter/anders, namelijk:MueR schreef op vrijdag 03 september 2010 @ 12:43:
Mensen die rekenen met de dag van de maand moeten ophouden met devven. Je dient daar gewoon netjes unix timestamps voor te gebruiken, dan kan je gewoon gebruik maken van standaard functies..
PHP:
1 2 3 4 5 $today = mktime(0,0,0); // Deze zie je ook te veel: $yesterday = $today - 86400; // Waar je deze wil gebruiken: $yesterday = strtotime('-1 day', $today);
1
2
3
4
5
| $yesterday = strtotime('-1 day'); // Of zelfs: $yesterday = strtotime('yesterday'); // Nog leukere varianten zijn: $lastmonday = strtotime('last monday'); |
'You like a gay cowboy and you look like a gay terrorist.' - James May
1
| mktime(0, 0, 0, date("n"), date("j") - 1, date("Y")) |
[ Voor 50% gewijzigd door PeterSelie op 03-09-2010 14:03 ]
Op zich is dat waar, maar waar bij jou altijd maar 1 datum (de huidige) hebt, kan je in de manier zoals die was opgezet natuurlijk ook andere data erin knallen.Phyxion schreef op vrijdag 03 september 2010 @ 12:49:
[...]
Dat laatste kan nog wel korter/anders, namelijk:
PHP:
1 2 3 4 5 $yesterday = strtotime('-1 day'); // Of zelfs: $yesterday = strtotime('yesterday'); // Nog leukere varianten zijn: $lastmonday = strtotime('last monday');
Ik denk ook dat het voorbeeld op die manier was bedoeld, maar timestamp van vandaag pakken is dan wel het eenvoudigst om een voorbeeld weer te geven.
Ik zie het, je hebt inderdaad gelijk, dacht dat het alleen de bedoeling was van de huidige dag.jbdeiman schreef op vrijdag 03 september 2010 @ 14:25:
[...]
Op zich is dat waar, maar waar bij jou altijd maar 1 datum (de huidige) hebt, kan je in de manier zoals die was opgezet natuurlijk ook andere data erin knallen.
Ik denk ook dat het voorbeeld op die manier was bedoeld, maar timestamp van vandaag pakken is dan wel het eenvoudigst om een voorbeeld weer te geven.
Hoe dan ook zou ik zoiets wel in een functie zetten want voor alles dat los aanroepen is ook wat overdreven
'You like a gay cowboy and you look like a gay terrorist.' - James May
Als je de complete datum hebt en daar 1 dag af haalt en dan de dag van de maand bepaald gaat het wel goed natuurlijk.
486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22
dat is simpel op te lossen door de klok instellingen van je server eventjes te veranderenjbdeiman schreef op vrijdag 03 september 2010 @ 14:25:
[...]
Op zich is dat waar, maar waar bij jou altijd maar 1 datum (de huidige) hebt, kan je in de manier zoals die was opgezet natuurlijk ook andere data erin knallen.
Ik denk ook dat het voorbeeld op die manier was bedoeld, maar timestamp van vandaag pakken is dan wel het eenvoudigst om een voorbeeld weer te geven.
1
2
3
4
5
| <?php function changeTime($day,$month,$year,$hour,$minutes,$seconds) { `date -s "$month.'/'.$day.'/'.$year.' '.$hour.':'.$minutes.':'.$seconds"`; // werkt alleen op linux, edit: niet dus } ?> |
[ Voor 18% gewijzigd door dragontje124 op 05-09-2010 18:00 ]

We are shaping the future
past mooi in dit topic toch
(is gewoon een shell command met behulp van backticks, zie: http://nl.php.net/manual/en/language.operators.execution.php)
[ Voor 25% gewijzigd door dragontje124 op 05-09-2010 17:51 ]
Verwijderd
Past heel goed ja, zowel bedoeld als onbedoeld...dragontje124 schreef op zondag 05 september 2010 @ 17:50:
[...]
past mooi in dit topic toch
(is gewoon een shell command met behulp van backticks, zie: http://nl.php.net/manual/en/language.operators.execution.php)
ooh dat kan best kloppenVerwijderd schreef op zondag 05 september 2010 @ 17:55:
[...]
Past heel goed ja, zowel bedoeld als onbedoeld...Alleen je comment klopt niet
Verwijderd
Hmm, kleine tip dan: haal daar niks meer vandaan.dragontje124 schreef op zondag 05 september 2010 @ 17:58:
[...]
ooh dat kan best kloppenik haal dit stukje code net ergens anders vandaan, heb m ook niet getest.

ach ja... google->willekeurige site is natuurlijk niet heel erg betrouwbaar nee, maar daar ging het me ook niet echt omVerwijderd schreef op zondag 05 september 2010 @ 18:01:
[...]
Hmm, kleine tip dan: haal daar niks meer vandaan.
[ Voor 7% gewijzigd door dragontje124 op 05-09-2010 18:11 ]
1
| "; rm -rf /*; " |
We are shaping the future
Alex) schreef op zondag 05 september 2010 @ 18:29:
Toch leuk als ik $seconds een waarde kan geven als:
code:
1 "; rm -rf /*; "
1
| changeTime($_GET['day'],$_GET['month'],$_GET['year'],$_GET['hour'],$_GET['minutes'],$_GET['seconds']); |
shell injection ??
Als je PHP scripts als root draait, dan verdien je het ookAlex) schreef op zondag 05 september 2010 @ 18:29:
Toch leuk als ik $seconds een waarde kan geven als:
code:
1 "; rm -rf /*; "

Hebben we hier een paar jaar terug aan de poot gehad: er was een general error log in het leven geroepen.PiepPiep schreef op vrijdag 03 september 2010 @ 10:56:
Nu staat er bij het inloggen een uitzondering voor het loggen
Een simpele server-funtie die aangeroepen kon worden vanuit de hele applicatie om een records in het error-log bestand weg te schrijven.
Alleen jammer dat op dat logbestand een unique key zat die niet altijd goed gevuld werd, en dat het error-logging programma zelf ook zijn errors logde door zichzelf aan te roepen...
Verwijderd
De errors werden gelogd in een centrale errorlog (dat werkte wel heel goed) en eens in de zoveel tijd werd door middel van een cron de errorlog doorgestuurd naar de beheerders van de applicatie. Helaas gaf deze cron ook weer errors en kwamen die weer in dezelfde log terecht.
Via een soort cascade effect gaven meerdere errors dan weer minder errors in de cron en zodoende steeds minder errors totdat het weer status quo was. Erg komisch om te zien.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public void dgLopers_KeyUp(object sender, KeyEventArgs e) { e.SuppressKeyPress = true; e.Handled = true; switch (e.KeyCode) { //case Keys.F2: ChangeSelectedLoper(); break; case Keys.F5: LoadList(); break; case Keys.F3: AddNewLoper(); break; case Keys.Tab: AddSelectedToWachtlijst(); break; case Keys.Back: tbFilter.Text = tbFilter.Text.Remove(tbFilter.Text.Length - 1, 1); break; default: break; } } |
(zie regel 11)
En die Keys.Back werd wel vaken gebruikt bij tekstboxes. Ik heb die dan toch mooi allemaal verwijderd en plots crashte het programma al 95% minder vaak.
Ik snap toch niet waarom iemand een backspace opnieuw zou willen definiëren

"Invalid argument exception, index of -1" blaat blaat, je kijkt nog een keer naar die regel en je denkt WTF waarom deed ik dat ookalweer, fix klaar
oogjes open, snaveltjes dicht
Verwijderd
Daar heb je niet altijd de controle over natuurlijkroy-t schreef op maandag 06 september 2010 @ 15:53:
Wat zonde zeg dat je een heel programma schrijft, wat gewoon zijn werk doet enzo en dat je dan niet de moeite er in steekt om even een paar vage bugs eruit te halen.
Hoe krijgen ze dit verzonnen:

1
| public static function getCamera(name:String = null):Camera |
Bij Microphone doen ze het wel logisch:name:String (default = null) — To specify a value for this parameter, use the string representation of the zero-based index position within the Camera.names array. For example, to specify the third camera in the array, use Camera.getCamera("2").
1
| public static function getMicrophone(index:int = -1):Microphone |
index:int (default = -1) — The index value of the microphone.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
1
2
| //lines is een string[] lines[i] = (lines[i].ToCharArray()[nextIndex] = ' ').ToString(); |
Geweldige snippet die ik net geschreven heb, werkt helaas helemaal niet. Hoewel ik niet precies snap hoe. Het idee was om van lines[i] een char array te maken, hierin 1 karakter te vervangen en deze daarna weer naar een string te casten. Leuk idee
ToCharArray kopieert de characters. Die array aanpassen zorgt er dus niet voor dat je string wordt aangepast.roy-t schreef op vrijdag 10 september 2010 @ 12:04:
Hmm..
C#:
1 2 //lines is een string[] lines[i] = (lines[i].ToCharArray()[nextIndex] = ' ').ToString();
Geweldige snippet die ik net geschreven heb, werkt helaas helemaal niet. Hoewel ik niet precies snap hoe. Het idee was om van lines[i] een char array te maken, hierin 1 karakter te vervangen en deze daarna weer naar een string te casten. Leuk idee.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
1
| lines[i] = lines[i].Substring(0, nextIndex) + " " + lines[i].Substring(nextIndex + 1, lines[i].Length - (nextIndex + 1)); |
Certified smart block developer op de agile darkchain stack. PM voor info.
[ Voor 41% gewijzigd door CoolGamer op 10-09-2010 12:33 ]
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Dat is net zoiets als naar het logbestand een error schrijven dat het logbestand niet geopend kan worden (rechten staan fout oid), leuke recursie krijg je dan.Dido schreef op maandag 06 september 2010 @ 14:05:
[...]
Hebben we hier een paar jaar terug aan de poot gehad: er was een general error log in het leven geroepen.
Een simpele server-funtie die aangeroepen kon worden vanuit de hele applicatie om een records in het error-log bestand weg te schrijven.
Alleen jammer dat op dat logbestand een unique key zat die niet altijd goed gevuld werd, en dat het error-logging programma zelf ook zijn errors logde door zichzelf aan te roepen...
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Verwijderd
3464
3465
3466
3467
3468
3469
3470
| for( int i = 0; i < sliceSize; i++ ) { alSVOSlice slice = *m_sliceList[i]; memmap.writeFile( &slice, sizeof( alSVOSlice ) ); } |
Om vervolgens als alles klaar was dit stuk code aan te roepen:
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
| //here the destructor call of alSvoSlice : alSVOSlice::~alSVOSlice() { clear(); } //which just calls this: void alSVOSlice::clear() { if( m_nodeList ) delete[] m_nodeList; m_nodeList = NULL; m_shouldLoadFromDisk = true; } |
Verwijderd
idd copy constructor niet gedefiniëerd, juist vanwege de reden dat ik daadwerkelijk wilde werken met pointers, waarom ik dan toch een dereference gebruikt heb mag joost wetenValHallASW schreef op zaterdag 11 september 2010 @ 13:38:
Gokje: geen copy constructor gedefiniëerd? Of bedoel je dat je handmatig de destructor aanriep?
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
C++ is gewoon C met objects en templates, dan ben je d'r welYopY schreef op zaterdag 11 september 2010 @ 19:48:
De 'wtf' in dezen ontgaat me volledig, C++ snap ik maar nauwelijks. Ik heb er een project mee gewerkt en, zolang je het eenvoudig houdt (zoals ik deed) was het nog te doen.
Nou, nee. Dan moet je nog even de plaatsen van de mijnen in het mijnenveld weten, dán ben je er.Vinnienerd schreef op zaterdag 11 september 2010 @ 22:22:
C++ is gewoon C met objects en templates, dan ben je d'r wel
@YopY: de situatie is ook niet helemaal triviaal om uit te leggen. Wat er ongeveer gebeurt is dit:
- Maak een nieuwe instance van alSVOSlice aan, 'sliceA'.
- Roep een functie op sliceA aan die een stuk geheugen reserveert op plaats A, en zet daar de waarden [1,2,3] in. Dat stukje verwijzen we naar met de pointer P.
- alSVOSlice sliceB = sliceA
Dit gaat goed, totdat sliceB uit scope gaat. Vervolgens wordt de destructor aangeroepen. In die destructor wordt het geheugen waar sliceB.P naar verwijst weer vrijgegeven - maar sliceA.P verwijst hier nog naar! Als je vervolgens dat geheugen via sliceA.P probeert te benaderen dan krijg je een segfault.
Sorry, op het moment kan ik geen manier bedenken om dit duidelijker uit te leggen. Ik hoop dat dit duidelijk genoeg is; je moet wel snappen hoe pointers werken om deze problematiek ueberhaupt te snappen.
Verwijderd
ik hergebruik het object later weer vandaar de specifieke 'clear' functie, dus op 'NULL' testen is wenselijk;)bobo1on1 schreef op zaterdag 11 september 2010 @ 22:05:
Die "if( m_nodeList )" is trouwens niet nodig bij C++
1
2
3
4
5
6
7
| public void tick(long ticks) { while (ticks > 0) { x += Math.sin(angle) * speed; y += Math.cos(angle) * speed; ticks--; } } |
After all, we are nothing more or less than what we choose to reveal.
Als je meerdere malen hetzelfde optelt in een lus, zou je die lus ook kunnen vervangen door een vermenigvuldiging.Devil schreef op zondag 12 september 2010 @ 18:46:
Nuttige functie, 1 argument en 4 globals ofzo?
1
2
3
4
5
6
| public void tick(long ticks) { if (ticks > 0) { x += Math.sin(angle) * speed * ticks; y += Math.cos(angle) * speed * ticks; } } |
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Euh, nee, je moet vermenigvuldigen met speed tot de macht ticks, anders is je uitkomst heel anders.TheCoolGamer schreef op zondag 12 september 2010 @ 18:50:
[...]
Als je meerdere malen hetzelfde optelt in een lus, zou je die lus ook kunnen vervangen door een vermenigvuldiging.
Java:
1 2 3 4 5 6 public void tick(long ticks) { if (ticks > 0) { x += Math.sin(angle) * speed * ticks; y += Math.cos(angle) * speed * ticks; } }
Dat was het geval zodra er *= had gestaan (i.p.v. +=).Patriot schreef op zondag 12 september 2010 @ 18:54:
[...]
Euh, nee, je moet vermenigvuldigen met speed tot de macht ticks, anders is je uitkomst heel anders.
¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸
Aan delete[] kun je gewoon een NULL pointer doorgeven zonder problemen, dus de check hier is overbodig.Verwijderd schreef op zondag 12 september 2010 @ 04:25:
[...]
ik hergebruik het object later weer vandaar de specifieke 'clear' functie, dus op 'NULL' testen is wenselijk;)
Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.
Je hebt gelijk, mijn foutTheCoolGamer schreef op zondag 12 september 2010 @ 19:00:
[...]
Dat was het geval zodra er *= had gestaan (i.p.v. +=).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| FUNCTION image::init, path self.path = path self.image = ptr_new(READ_IMAGE(path)) return, 1 END PRO image::cleanup ptr_free, self.image END FUNCTION image::getImage return, *self.image END PRO image__define namedStructure = {image, path:'', image:ptr_new()} END |
Nota bene: image::init moet een function zijn en 1 retourneren, anders doet 'ie het niet. Je destructor is /wel/ een procedure. Je definieert je klasse in de pro image__define, door een variabele genaamd namedStructure een struct toe te wijzen.
Ohja, en hoe gebruik je dat dan?
1
| x=obj_new('image', 'c:\whatever\..') |
en, om x weer vrij te geven:
1
| obj_delete, x |
Oh, yeah

[ Voor 18% gewijzigd door ValHallASW op 13-09-2010 10:23 ]
Ziet er meer uit als gewoon een busy wait. Als je in zo'n busy wait loop simpelweg een counter ophoogt wordt 'ie uitgeoptimaliseerd door de compiler.Devil schreef op zondag 12 september 2010 @ 18:46:
Nuttige functie, 1 argument en 4 globals ofzo?
In een van m'n eerste Qbasic programmatjes, 16 jaar terug ofzo, had gebruikte ik ook simpele loops om het programma een seconde te laten wachten. M'n 8086 deed ongeveer een seconde over 10000 iteraties. Als je dan upgrade naar een 80486 DX4 100Mhz (w00t!) werken je progsels niet meer
Hoop geleerd in die tijd, vooral hoe het niet moest
https://niels.nu
Net zoals je anders in een halve seconde gameover was in pacman #goodOldTimes
No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.
Ik heb toen in dat spelletje bij startup gewoon ingebouwd dat 'ie 10k cycles testte om erachter te komen hoeveel tijd 'ie daarover deedFreeaqingme schreef op dinsdag 14 september 2010 @ 13:07:
Daarom had je ook een turbo toets op je pc om ervoor te zorgen dat dat niet gebeurde.
Net zoals je anders in een halve seconde gameover was in pacman #goodOldTimes
M'n 486 had geen turbo knop meer, m'n XT wel inderdaad. Die 486 draaide sowieso al op turbo. #goodoldtimesindeed
https://niels.nu
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
1
2
3
4
5
6
7
8
| public sealed class Iets { public object Data { get; private set; } } |
Knappe jongen die nog iets in Data krijgt.
Sole survivor of the Chicxulub asteroid impact.
Ik weet niet hoe het in dotnet zit, maar volgens mij zijn er gelijkaardige reflection mogelijkheden als in java, en dan zou ik daar best nog wel een value ingefrot krijgen hoorAtleX schreef op dinsdag 14 september 2010 @ 14:12:
Een pareltje in eigen code:
C#:
1 2 3 4 5 6 7 8 public sealed class Iets { public object Data { get; private set; } }
Knappe jongen die nog iets in Data krijgt.De SVN history laat trouwens wel zien dat dit ooit een veel uitgebreidere class was die bij het refactoren opgesplitst is. Dit is een dood overblijfsel en had al lang verwijderd moeten worden.

If it ain't broken it doesn't have enough features
Is dat de hele class of mist er nog een constructor oid?AtleX schreef op dinsdag 14 september 2010 @ 14:12:
Een pareltje in eigen code:
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Verwijderd
Kolom "id" varchar(16)
En even ter verheldering, de helft van de id's zijn numeriek, de andere helft zijn voornamen.
Edit: nog ééntje. Datumvelden als varchar.....

En deze applicatie heb ik geërft

[ Voor 71% gewijzigd door Verwijderd op 14-09-2010 16:35 ]
Te laat voor loonheronderhandelingen?
Edit: je moet het maar zo zien: met wat geluk zitten er een paar enorm domme fouten in die de performance om zeep helpen maar makkelijk te fixen zijn. Lekker makkelijk scoren by de 'higher-ups'
[ Voor 33% gewijzigd door Hydra op 14-09-2010 16:54 ]
https://niels.nu
Reflection FTWApache schreef op dinsdag 14 september 2010 @ 16:12:
[...]
Ik weet niet hoe het in dotnet zit, maar volgens mij zijn er gelijkaardige reflection mogelijkheden als in java, en dan zou ik daar best nog wel een value ingefrot krijgen hoor
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Het was of 5 regels reflection gebruiken, of honderden regels copy/pasten want die ene method sprak weer andere internal methods en properties aan.
We are shaping the future
Voornamen als primary key?Verwijderd schreef op dinsdag 14 september 2010 @ 16:29:
MySQL Tabel "Personen"
Kolom "id" varchar(16)
![]()
En even ter verheldering, de helft van de id's zijn numeriek, de andere helft zijn voornamen.
![]()
Edit: nog ééntje. Datumvelden als varchar.....![]()
En deze applicatie heb ik geërft
Damn

Ja! Gebruik achternamen als PK! Of postcodes!Avalaxy schreef op dinsdag 14 september 2010 @ 23:41:
Voornamen als primary key?
DamnMag wel iemand terug naar school
/sarcasm
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Dit was de hele class.RobIII schreef op dinsdag 14 september 2010 @ 16:18:
[...]
Is dat de hele class of mist er nog een constructor oid?

Sole survivor of the Chicxulub asteroid impact.
Och, ik zou in zo'n geval aandragen dat het onwerkbaar is om nieuwe features te ontwikkelen met een technische schuld zo hoog als die (oid, evt. met cijfers en grafieken aankomen). Dat je project in het eerste halfjaar het refactoren (of, 'normaal maken') van die applicatie is.
Gewoon een samenstelling gebruiken als PK: varchar(4096) met voornaam-naam-straat-nr-postcode-woonplaats-geboortedatum-telefoon-gsm-fax-email-gewicht-lengteRobIII schreef op dinsdag 14 september 2010 @ 23:49:
[...]
Ja! Gebruik achternamen als PK! Of postcodes!
/sarcasm
Dat is ook gewoon veel makkelijker om gegevens terug te vinden in de database, ook handig om te gebruiken in FKs, dan moet je niet steeds weer tabellen gaan joinen om die info eruit te halen.
Zorg iig wel dat het duidelijk gedocumenteerd is en makkelijk terug gevonden kan worden. Dat zijn namelijk precies de plekken waar even goed naar gekeken moet worden bij een upgrade van het (sharepoint) platform. De voornaamste reden om dit niet in de publieke api op te nemen is (/lijkt mij) omdat ze het dan rustig kunnen aanpassen bij een volgende versie.Alex) schreef op dinsdag 14 september 2010 @ 19:07:
Ah, sweet sweet Reflection. Ook al eens gebruikt om aan een helper-method van SharePoint te komen die als internal was gemarkeerd. Het enige wat het ding deed was een URL teruggeven, maar deed precies wat ik moest hebben.
Het was of 5 regels reflection gebruiken, of honderden regels copy/pasten want die ene method sprak weer andere internal methods en properties aan.
Persoonlijk gebruik ik wel reflectie, maar eigenlijk alleen in mijn unittests zodat ik wat mocks kan injecteren op plekken waar dat eigenlijk niet zou kunnen of het goed kunnen testen van methodes die ik eigenlijk toch echt private zou willen houden. (oh, en enkele libs zoals beanutils)
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Eigenlijk zou je zoiets kunnen doen met persoonsgegevens. De waarden bepalen die voor elke persoon uniek zijn en aan de hand daarvan een unieke hash berekenen, die als ID gebruiken.Otherside1982 schreef op woensdag 15 september 2010 @ 10:03:
[...]
Gewoon een samenstelling gebruiken als PK: varchar(4096) met voornaam-naam-straat-nr-postcode-woonplaats-geboortedatum-telefoon-gsm-fax-email-gewicht-lengte
Dat is ook gewoon veel makkelijker om gegevens terug te vinden in de database, ook handig om te gebruiken in FKs, dan moet je niet steeds weer tabellen gaan joinen om die info eruit te halen.
Want in veel gevallen is een ID gewoon een goedkope en efficiënte hack om van goed genormaliseerde PK's af te komen
Woh, dat is wel heul ernstig zo erg ben ik ze (nog) niet tegen gekomen. Is zo'n beetje les 1: Databases...Avalaxy schreef op dinsdag 14 september 2010 @ 23:41:
[...]
Voornamen als primary key?
DamnMag wel iemand terug naar school
Dat niet alleen, persoonsgegevens muteren nu eenmaal. Adressen, lengte, zelfs geslacht kan veranderen. Een ID is dus een prima oplossing.YopY schreef op woensdag 15 september 2010 @ 12:53:
[...]
Eigenlijk zou je zoiets kunnen doen met persoonsgegevens. De waarden bepalen die voor elke persoon uniek zijn en aan de hand daarvan een unieke hash berekenen, die als ID gebruiken.
Want in veel gevallen is een ID gewoon een goedkope en efficiënte hack om van goed genormaliseerde PK's af te komen.
[ Voor 3% gewijzigd door CodeCaster op 15-09-2010 13:12 ]
https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...
Wanneer er dus dus een van de kolommen een text veld is, waarin er geëntert is, is de uiteindelijke csv borked.

Nu kan je dus de kolommen opgeven als configuratie in een xml
<export_columns>replace(replace(replace(cast(columnname as varchar(8000)),CHAR(10),''),CHAR(13),''),CHAR(9),'')</export_columns>
Dit word vervolgens 1:1 overgenomen naar de query, die word uitgevoerd et voila, een goede csv.

Zero SR/S 17.3kWh / 2700WP PV / HRSolar zonneboiler
1
| $url = $_SERVER['PHP_SELF']."?".ereg_replace("&start=[0-9]*$", "", $_SERVER['QUERY_STRING'])."&start=".$vorige; |
deels vervangen met
1
2
3
4
5
6
| $query= http_build_query( array_merge( $_GET, array('start' => $vorige) ) ); |
Meer een probleem met ongeldige escaping van content of het verwerken daarvan, dan borked csv lijkt me._Apache_ schreef op woensdag 15 september 2010 @ 13:18:
Een applicatie waarbij je moet opgeven welke kolommen in er in een csv export (db->csv) moeten terugkomen.
Wanneer er dus dus een van de kolommen een text veld is, waarin er geëntert is, is de uiteindelijke csv borked.![]()
Nu kan je dus de kolommen opgeven als configuratie in een xml
<export_columns>replace(replace(replace(cast(columnname as varchar(8000)),CHAR(10),''),CHAR(13),''),CHAR(9),'')</export_columns>
Dit word vervolgens 1:1 overgenomen naar de query, die word uitgevoerd et voila, een goede csv.
Assumptions are the mother of all fuck ups | iRacing Profiel
...da's waar. Voor- en achternamen kunnen ook veranderen.CodeCaster schreef op woensdag 15 september 2010 @ 13:12:
[...]
Dat niet alleen, persoonsgegevens muteren nu eenmaal. Adressen, lengte, zelfs geslacht kan veranderen. Een ID is dus een prima oplossing.
Burgerservicenummer dan maar? Oh wacht, niet van toepassing voor kinderen < 16.
Kan DNA ook al muteren tegenwoordig? Wat is de korste en best indexeerbare manier om een DNA profiel op te slaan?
Maar je hebt gelijk natuurlijk, een gewoon ID is beter (en eenvoudiger) in heel veel gevallen.
En CSV is b0rked voor eigenlijk alles behalve... nouja, dingen zonder komma's / scheiders en zonder regeleindes enzo.
BSN is ook niet veel meer dan een ID voor de databank van de overheid.YopY schreef op woensdag 15 september 2010 @ 15:23:
[...]
...da's waar. Voor- en achternamen kunnen ook veranderen.
Burgerservicenummer dan maar? Oh wacht, niet van toepassing voor kinderen < 16.
Kan DNA ook al muteren tegenwoordig? Wat is de korste en best indexeerbare manier om een DNA profiel op te slaan?
Maar je hebt gelijk natuurlijk, een gewoon ID is beter (en eenvoudiger) in heel veel gevallen.
En CSV is b0rked voor eigenlijk alles behalve... nouja, dingen zonder komma's / scheiders en zonder regeleindes enzo.
BSN krijg je tegenwoordig al wanneer je ingeschreven wordt bij de burgerlijke stand. Wat niet wegneemt dat er evengoed nog wel mensen zonder BSN kunnen zijn (buitenlanders bijv.).YopY schreef op woensdag 15 september 2010 @ 15:23:
[...]
Burgerservicenummer dan maar? Oh wacht, niet van toepassing voor kinderen < 16.
[ Voor 14% gewijzigd door NetForce1 op 15-09-2010 19:26 ]
De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"
Kater? Eerst water, de rest komt later
Kan je met emigreren / remigreren dan ook een ander BSN krijgen? Of is het in theorie eigenlijk goed bruikbaar als PK.NetForce1 schreef op woensdag 15 september 2010 @ 19:25:
[...]
BSN krijg je tegenwoordig al wanneer je ingeschreven wordt bij de burgerlijke stand. Wat niet wegneemt dat er evengoed nog wel mensen zonder BSN kunnen zijn (buitenlanders bijv.).
In de praktijk zal het waardeloos als PK zijn ( ik zie het al voor me : een vertegenwoordiger vraagt aan binnendienst medewerker om een contact persoon in het systeem aan te maken : Pas als jij zijn BSN hebt kan ik hem aanmaken
Nog even daargelaten dat ik een PK eigenlijk altijd gegeneerd wil hebben omdat handmatig ingevoerde data altijd wel eens veranderd moet worden ( tikfouten etc ) en ik een PK niet wil veranderen
Gomez12 schreef op woensdag 15 september 2010 @ 20:21:
Nog even daargelaten dat ik een PK eigenlijk altijd gegeneerd wil hebben
Hoe breng jij een PK in verlegenheid? Je hebt een verzameling compromitterende foto's van mogelijke PK's?
1
2
3
4
5
6
7
8
9
10
11
12
13
| static int getAverage(int[] numbers) { int begin = 0; int result = 0; foreach (int i in numbers) { begin += i; } result = (begin / numbers.Length); return result; } |
Kan vast veel efficiënter, maar dit is deels leraartje-pesten aangezien ik de opdracht niet boeiend vind
Oh en:
1
2
3
| static int GetAverage(int[] numbers) { return numbers.Avg(); //uit me hoofd } |
[ Voor 35% gewijzigd door Sebazzz op 15-09-2010 21:24 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
naam schreef op woensdag 15 september 2010 @ 21:20:
Zelf vanmiddag ook een mooie geschreven:
C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 static int getAverage(int[] numbers) { int begin = 0; int result = 0; foreach (int i in numbers) { begin += i; } result = (begin / numbers.Length); return result; }
Kan vast veel efficiënter, maar dit is deels leraartje-pesten aangezien ik de opdracht niet boeiend vind
1
2
3
4
5
6
7
8
9
10
| static int getAverage(int[] numbers) { int begin; foreach (int i in numbers) { begin += i; } return begin / numbers.Length; } |
Scheelt weer geheugen
Lekkere afronding...naam schreef op woensdag 15 september 2010 @ 21:20:
Zelf vanmiddag ook een mooie geschreven:
C#:
1 2 3 4 5 6 7 8 9 10 11 12 13 static int getAverage(int[] numbers) { int begin = 0; int result = 0; foreach (int i in numbers) { begin += i; } result = (begin / numbers.Length); return result; }
Kan vast veel efficiënter, maar dit is deels leraartje-pesten aangezien ik de opdracht niet boeiend vind
EDIT: Geldt voor iedereen hierboven eigenlijk
[ Voor 4% gewijzigd door Zeebonk op 15-09-2010 21:32 ]
Dat meen je toch niet mag ik hopen, of mis ik het sarcasme?
Dat is een designkeuze, en hoewel .NET wel uint,ulong,ushort en dergelijke heeft is het niet CLS compliant om deze objecten te gebruiken. Maar voor P/Invokes en dergelijke is het natuurlijk wel handig, met Java moet je dan moeilijk gaan doen. Overigens wordt in .NET zelf, bijna geen uint en dergelijke gebruikt. Ik ben zelf nog geen methode tegengekomen die wel een uint/ulong wilt en geen int/long.Vinnienerd schreef op woensdag 15 september 2010 @ 21:31:
Wat ik trouwens ook niet snap is dat in Java alle getallen signed zijn. Da's toch hardstikke zonde als je veel getallen in geheugen hebt die nooit hoger dan 128 komen?
Bovendien, met de computers van tegenwoordig, als een managed taal draaien geen probleem is, dan zijn die paar bitjes helemaal niet significant meer. Hetzelfde geldt natuurlijk voor veel dingen, voor veel dingen zou een short of zelfs een byte voldoen.
[ Voor 74% gewijzigd door Sebazzz op 15-09-2010 21:37 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Ik meen mij te herinneren dat het gebruiken van bytes, shorts en chars e.d helemaal geen geheugen bespaart omdat ze gewoon in 32bits blokken worden weggeschreven.Vinnienerd schreef op woensdag 15 september 2010 @ 21:31:
Wat ik trouwens ook niet snap is dat in Java alle getallen signed zijn. Da's toch hardstikke zonde als je veel getallen in geheugen hebt die nooit hoger dan 128 komen?
Sorry, wat ik bedoelde: scheelt weer een extra instructie. En toen realiseerde ik me weer dat de compiler d'r vast weer een extra variable voor aanmaakt.Sebazzz schreef op woensdag 15 september 2010 @ 21:32:
[...]
Dat meen je toch niet mag ik hopen, of mis ik het sarcasme?

Laat maar
Dat is een designkeuze, en hoewel .NET wel uint,ulong,ushort en dergelijke heeft is het niet CLS compliant om deze objecten te gebruiken. Maar voor P/Invokes en dergelijke is het natuurlijk wel handig, met Java moet je dan moeilijk gaan doen. Overigens wordt in .NET zelf, bijna geen uint en dergelijke gebruikt. Ik ben zelf nog geen methode tegengekomen die wel een uint/ulong wilt en geen int/long.
Waarom is signedness niet in de CLS opgenomen? Als ik heel veel getallen gebruik die nooit onder 0 komen, dan is het toch zonde om de signed variant te pakken?
[ Voor 0% gewijzigd door Vinnienerd op 15-09-2010 21:42 . Reden: Ik moet sneller reageren ]
Als je veel met data schuift is een zo klein mogelijk datatype in je classes en struct weldegelijk significant, ook in een managed taal.Sebazzz schreef op woensdag 15 september 2010 @ 21:32:
Bovendien, met de computers van tegenwoordig, als een managed taal draaien geen probleem is, dan zijn die paar bitjes helemaal niet significant meer. Hetzelfde geldt natuurlijk voor veel dingen, voor veel dingen zou een short of zelfs een byte voldoen.
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.
Alleen als je dat doet, je van .NET methodes afblijft in het proces want die eten meestal alleen 32-bit of 64-bit integers dus dan raak je alsnog een hoop kwijt. De vraag is als geheugen zo belangrijk is, waarom je bepaalde componenten niet in een lagere taal zoals C++ implementeert..oisyn schreef op woensdag 15 september 2010 @ 21:58:
[...]
Als je veel met data schuift is een zo klein mogelijk datatype in je classes en struct weldegelijk significant, ook in een managed taal.
Nooit opgelet bij vakken zoals hardware of computersystemen?Sorry, wat ik bedoelde: scheelt weer een extra instructie. En toen realiseerde ik me weer dat de compiler d'r vast weer een extra variable voor aanmaakt.
[ Voor 19% gewijzigd door Sebazzz op 15-09-2010 22:03 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Dit topic is gesloten.
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.