[alg] Slechtste programmeervoorbeelden deel 4 Vorige deel Overzicht Laatste deel

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

Pagina: 1 ... 48 ... 103 Laatste
Acties:
  • 993.661 views

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Ik kwam net zoiets tegen:


Cascading Stylesheet:
1
2
3
ul li {
    list-style: none;
}
HTML:
1
2
3
4
<ul>
    <li>1: Koe</li>
    <li>2: Paard</li>
</ul>


8)7

[ Voor 18% gewijzigd door Gamebuster op 25-01-2011 23:56 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Jan_V
  • Registratie: Maart 2002
  • Laatst online: 23:24
Bv202 schreef op dinsdag 25 januari 2011 @ 23:07:
Ik vraag me nu wel af wat zo'n w3schools-examen inhoudt :p
Je kunt ze oefenen op de website, 20 vragen per onderdeel.
Wel grappig, maar niet echt bijster interessant.
Hoe maak je bijvoorbeeld iets dikgedrukt, met <b> of <bold> of nog een andere optie.
Hoe maak je een textbox, etc.
Niet echt hoog niveau vragen.

Battle.net - Jandev#2601 / XBOX: VriesDeJ


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Gamebuster schreef op dinsdag 25 januari 2011 @ 23:55:
Ik kwam net zoiets tegen:


Cascading Stylesheet:
1
2
3
ul li {
    list-style: none;
}
HTML:
1
2
3
4
<ul>
    <li>1: Koe</li>
    <li>2: Paard</li>
</ul>


8)7
Goed toch, anders komen er van die rare streepjes of bolletjes voor O-) ;)

Trouwens, als je hier de <ol> tag voor zou gebruiken zou er toch 1. Koe, 2. Paard uitkomen, of kun je ook aangeven dat je een : wilt gebruiken... Dacht namelijk dat dat niet kon in HTML, of je krijgt iets als:
HTML:
1
2
3
4
<ol>
    <li>: Koe</li>
    <li>: Paard</li>
</ol>

Dat lijkt me niet veel beter :P

[ Voor 30% gewijzigd door .Gertjan. op 26-01-2011 07:44 ]

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
ol {
  counter-reset: listitem;
}

ol>li {
  counter-increment: listitem;
  list-style: none inside;
}

ol>li:before {
  content: counters(listitem, ".") ": ";
}

[ Voor 10% gewijzigd door .oisyn op 26-01-2011 10:05 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Wijnbo
  • Registratie: December 2002
  • Laatst online: 22-09 14:46

Wijnbo

Electronica werkt op rook.

Is Blytes al genoemd hier :') ?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Niet hier nee, maar wel: Blytes: innovatie op hoog niveau?

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.


Acties:
  • 0 Henk 'm!

  • Naj_Geetsrev
  • Registratie: Oktober 2002
  • Laatst online: 21-07 13:18
Collega stelde gisteren met een stalen gezicht voor om in plaats van parameters te definiëren bij functies voortaan alleen een array mee te geven waarin de key's dan de parameters zijn. Op deze manier kon hij eenvoudig een extra parameter gebruiken in een functie zonder de functie definitie aan te passen.

Ik stond waarlijk met een bek vol tanden. Hij heeft wel vaker vage ideeën, terwijl hij denk een uitstekend programmeur is (hij wordt hier samen met mij senior developer genoemd). Ik hoop dat ik hem een beetje ervan heb weten te weerhouden. Maar ik vrees het ergste. 8)7.

Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Laatst online: 20:59

lier

MikroTik nerd

Even een C# voorbeeld hoe sterk het kan zijn:

code:
1
2
void DoIets(object o)
{// implementatie}


;)

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 22:18
Naj_Geetsrev schreef op woensdag 26 januari 2011 @ 15:49:
Collega stelde gisteren met een stalen gezicht voor om in plaats van parameters te definiëren bij functies voortaan alleen een array mee te geven waarin de key's dan de parameters zijn. Op deze manier kon hij eenvoudig een extra parameter gebruiken in een functie zonder de functie definitie aan te passen.

[...]
En hoe weet de functie (ik neem aan dat het PHP is) dan wat deze met die extra parameter moet doen? Zal hij nog steeds de (body van de) functie aan moeten passen... Overigens ken ik ook van zulke genieën. Die hebben ook vooral moeite met het onderscheiden van statische klassen of niet-statische objecten, en wat daarvan de impact is op de applicatie.

Acties:
  • 0 Henk 'm!

  • Naj_Geetsrev
  • Registratie: Oktober 2002
  • Laatst online: 21-07 13:18
alex3305 schreef op woensdag 26 januari 2011 @ 16:00:
[...]

En hoe weet de functie (ik neem aan dat het PHP is) dan wat deze met die extra parameter moet doen? Zal hij nog steeds de (body van de) functie aan moeten passen... Overigens ken ik ook van zulke genieën. Die hebben ook vooral moeite met het onderscheiden van statische klassen of niet-statische objecten, en wat daarvan de impact is op de applicatie.
Ik heb geprobeerd niet al te veel naar de technische uitvoering te vragen. Geheel uit zelfbescherming. Uiteraard gaat het om PHP (PHP vind ik een fantastische taal, maar in de handen van de verkeerde persoon kan het ook enorme poep opleveren).

Maar als ik mag filosoferen, ik denk een switch/case welke variabelen set.

Misschien wordt het toch echt een keer tijd dat ik overstap naar een organisatie waar wel echte programmeurs werken. Ik zeg niet dat ik perfect/best practice werk op lever, maar erger dan dit kan het niet. :P.

[ Voor 11% gewijzigd door Naj_Geetsrev op 26-01-2011 16:19 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik zeg: Extract de parameters naar een gezamenlijk object en geef die mee:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Foo
{
    public $prop1;
    public $prop2;
     // ...
}

function doSomething($foo)
{
    // Doe iets met $foo->prop1;
    // Doe iets met $foo->prop2;
    // ...
}

Acties:
  • 0 Henk 'm!

  • Bender
  • Registratie: Augustus 2000
  • Laatst online: 02-10 11:51
Naj_Geetsrev schreef op woensdag 26 januari 2011 @ 15:49:
Collega stelde gisteren met een stalen gezicht voor om in plaats van parameters te definiëren bij functies voortaan alleen een array mee te geven waarin de key's dan de parameters zijn. Op deze manier kon hij eenvoudig een extra parameter gebruiken in een functie zonder de functie definitie aan te passen.

Ik stond waarlijk met een bek vol tanden. Hij heeft wel vaker vage ideeën, terwijl hij denk een uitstekend programmeur is (hij wordt hier samen met mij senior developer genoemd). Ik hoop dat ik hem een beetje ervan heb weten te weerhouden. Maar ik vrees het ergste. 8)7.
Hoewel het niet mijn keuze zou zijn, ben ik eigenlijk wel benieuwd wat eigenlijk het bezwaar is in jouw ogen.
Ik gebruik het zelf weleens enkel indien er flags meegegeven worden (anders krijg je soms een lijst van 20 parameters met enkel true en false, dat helpt ook niet altijd met overzicht :p).

Acties:
  • 0 Henk 'm!

  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
Een stuk code dat ik tegenkwam in een oefening dat dit semester tijdens een les is besproken:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean verifieer(int reknr) {
    int d1 = reknr % 10;
    reknr /= 10;
    int d2 = reknr % 10;
    reknr /= 10;
    int d3 = reknr % 10;
    reknr /= 10;
    int d4 = reknr % 10;
    reknr /= 10;
    int d5 = reknr % 10;
    reknr /= 10;
    int d6 = reknr % 10;
    reknr /= 10;
    int d7 = reknr % 10;
    reknr /= 10;
    int d8 = reknr % 10;
    reknr /= 10;
    int d9 = reknr % 10;
    
    return (1 * d1 + 2 * d2 + 3 * d3 + 4 * d4 + 5 * d5 + 6 * d6 + 7 * d7 + 8 * d8 + 9 * d9) % 11 == 0;
}


"Schijf je code zo efficiënt en uitbreidbaar mogelijk" zeggen ze ons dan 8)7

Acties:
  • 0 Henk 'm!

  • Stoffel
  • Registratie: Mei 2001
  • Laatst online: 01-10 14:49

Stoffel

Engineering the impossible

Een elfproef uitbreidbaar maken lijkt me dan toch ook weer niet echt nodig, het is niet alsof die regelmatig wijzigt :+

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Kun je een rekeningnummer niet beter als string opslaan, omdat het niet de bedoeling is dat er mee gerekend wordt?

En omdat er bij bijvoorbeeld gironummers soms een "P" voor staat?

Dat iets in de praktijk vaak uit getallen bestaat, betekent niet automatisch dat je het geheel als een getal moet behandelen.

En dan had je het met een for-loopje en substr op kunnen lossen.

Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 22:18
Bv202 schreef op woensdag 26 januari 2011 @ 16:41:
Een stuk code dat ik tegenkwam in een oefening dat dit semester tijdens een les is besproken:

Java:
1
2
3
4
5
public boolean verifieer(int reknr) {
        ... lompe code ...
    
    return (1 * d1 + 2 * d2 + 3 * d3 + 4 * d4 + 5 * d5 + 6 * d6 + 7 * d7 + 8 * d8 + 9 * d9) % 11 == 0;
}


"Schijf je code zo efficiënt en uitbreidbaar mogelijk" zeggen ze ons dan 8)7
Daarnaast kan ik mijzelf voorstellen dat die formule niet op alle platformen even lekker zal lopen in verband met de verwerkingsvolgorde. Persoonlijk - mocht ik het zo hebben gedaan - zou ik er haakjes om hebben gezet.
Davio schreef op woensdag 26 januari 2011 @ 16:48:
Kun je een rekeningnummer niet beter als string opslaan, omdat het niet de bedoeling is dat er mee gerekend wordt?

[... onderbouwing ...]
Volgens mij is dat hetzelfde als telefoonnummers als een int opslaan. Iets met leading zero's ofzo. :9

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Bender schreef op woensdag 26 januari 2011 @ 16:34:
[...]


Hoewel het niet mijn keuze zou zijn, ben ik eigenlijk wel benieuwd wat eigenlijk het bezwaar is in jouw ogen.
Ik gebruik het zelf weleens enkel indien er flags meegegeven worden (anders krijg je soms een lijst van 20 parameters met enkel true en false, dat helpt ook niet altijd met overzicht :p).
Ik heb weinig verstand van dependency injection, maar had wel laatst gelezen over verschillende vormen. Een manier is direct:
PHP:
1
2
3
4
class Foo
{
  public function __construct (Bar $bar, Baz $baz, Bat $bat) {}
}


Een tweede methode was een fuzzy manier van DI:

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
class Foo
{
  public function __construct (array $options)
  {
    $this->setOptions($options);
  }

  public function setOptions (array $options)
  {
    $methods = get_class_methods($this);
    foreach ($options as $key => $value) {
        $method = 'set' . ucfirst($key);
        if (in_array($method, $methods)) {
            $this->$method($value);
        }
    }
    return $this;
  }

  public function setBar (Bar $bar)
  {
  }

  // etc
}
Zo kan je dus eenvoudig extra dependencies injecteren via een array. Iets wat ik niet als heel ongebruikelijk zie eigenlijk. Dus vraag ik me ook af wat hier het enorme bezwaar aan is, want het lijkt me meer case-gebonden dan in het algemeen geldend.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

alex3305 schreef op woensdag 26 januari 2011 @ 17:03:
[...]

Daarnaast kan ik mijzelf voorstellen dat die formule niet op alle platformen even lekker zal lopen in verband met de verwerkingsvolgorde.
Wat? Beweer je nou dat operator precedence afhangt van het platform?

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.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Davio schreef op woensdag 26 januari 2011 @ 16:48:
En dan had je het met een for-loopje en substr op kunnen lossen.
En dat kan niet als het een getal is?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Naj_Geetsrev schreef op woensdag 26 januari 2011 @ 15:49:
Collega stelde gisteren met een stalen gezicht voor om in plaats van parameters te definiëren bij functies voortaan alleen een array mee te geven waarin de key's dan de parameters zijn. Op deze manier kon hij eenvoudig een extra parameter gebruiken in een functie zonder de functie definitie aan te passen.

Ik stond waarlijk met een bek vol tanden. Hij heeft wel vaker vage ideeën, terwijl hij denk een uitstekend programmeur is (hij wordt hier samen met mij senior developer genoemd). Ik hoop dat ik hem een beetje ervan heb weten te weerhouden. Maar ik vrees het ergste. 8)7.
PHP zeker?

Wanneer komen ze nou eens met echte overloading in die taal? Men schreeuwt er al zo lang om...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

De tweede vind ik persoonlijk niet zo prettig vanwege al die eval achtige code. Er is echter wel een 'derde', en dat is de dependicies injecteren middels setters (of properties). Eigenlijk is dat wat er intern in je 2e optie gebeurt.

Het voordeel van de eerste methode is dat je altijd gegarandeerd alles vult aangezien dit bij het aanmaken al gebeurt, daarnaast kun je in je constructor acties uitvoeren die afhankelijk zijn van de dependecies. Het nadeel hiervan is wel dat alle dependecies al beschikbaar moeten zijn op het moment dat het object aangemaakt wordt. Bij de 'derde' mogelijkheid kun je eerst alle objecten aanmaken en dan later de properties vullen. Je zult dan echter wel een andere manier moeten gebruiken om de valideren dat alles gevuld is en een soort 'postInitialize' methode moeten gebruiken om initialisatie acties uit te voeren die afhankelijk zijn van de dependecies.

Persoonlijk vind ik de laatste methode wel een stuk leesbaarder. In de constructor zie je niet goed welke parameters op welke plek moet terwijl de naam van de setter een extra stukje self documenting code is.

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


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Nvm, zie hieronder.

[ Voor 78% gewijzigd door Davio op 27-01-2011 11:11 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Waarom was deze topic eigenlijk gelockt?

Ik dacht dat er misschien een deel 5 zou komen...
Grijze Vos schreef op donderdag 27 januari 2011 @ 08:59:
[...]

En dat kan niet als het een getal is?
Jawel, maar dan moet je eerst een .toString() doen op de integer en dan moet je opletten dat er een werkbare string uitkomt.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Misschien een modje dat een verkeerd vinkje aanzette? :+

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

Alex) schreef op donderdag 27 januari 2011 @ 11:12:
Misschien een modje dat een verkeerd vinkje aanzetteknopje indrukte?! :+

[ Voor 7% gewijzigd door Janoz op 27-01-2011 11:13 ]

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


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:17

Janoz

Moderator Devschuur®

!litemod

Davio schreef op donderdag 27 januari 2011 @ 11:10:

Jawel, maar dan moet je eerst een .toString() doen op de integer en dan moet je opletten dat er een werkbare string uitkomt.
Je kunt keurig op een wiskundige manier een digit uit een getal halen ((x % 10000)/1000), dus dat is geen reden. De andere reden die je aangeeft is echter de enige juiste en wordt helaas vaak met voeten getreden. Nog heel vaak kom ik de 'het veld is numeriek dus een long/int'-argumentatie tegen voor rekeningnummers, bsn nummers, correspondentie nummers, productnummers.

Eigenlijk is de stelregel voor ontwerp: Wanneer een numeriek veld een meetwaarde aangeeft (hoeveelheid, afstand) dan is het een long/int/float. In alle andere gevallen is het een string met een restrictie op de te gebruiken tekens.

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


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 05-10 11:49

Haan

dotnetter

Grappig, kwam deze week toevallig nog een database inrichting tegen waar het BSN als int werd opgeslagen. Dat bleek dus problemen te geven bij nummers die met een 0 beginnen :P

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Haan schreef op donderdag 27 januari 2011 @ 11:28:
Grappig, kwam deze week toevallig nog een database inrichting tegen waar het BSN als int werd opgeslagen. Dat bleek dus problemen te geven bij nummers die met een 0 beginnen :P
Heb ik dus gehad met ISBN nummers. Nooit bij stil gestaan dat

a) voorloopnullen ineens weg waren in de database :|
b) conflicten onstonden in de database omdat isbn 2147483647 al in gebruik was :X |:(

Gelukkig in een alpha-fase ontdekt en snel de applicatie aangepast. Hoefde maar iets van 20 boeken te wijzigen. Had anders een mega aantal boeken mogen checken op isbn :p

[ Voor 15% gewijzigd door mithras op 27-01-2011 11:32 ]


Acties:
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 22:18
.oisyn schreef op woensdag 26 januari 2011 @ 17:05:
[...]

Wat? Beweer je nou dat operator precedence afhangt van het platform?
Ik geloof dat ik weleens gelezen heb dat in verschillende programmeertalen de operator precedence anders kan zijn, ja.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Haan schreef op donderdag 27 januari 2011 @ 11:28:
Grappig, kwam deze week toevallig nog een database inrichting tegen waar het BSN als int werd opgeslagen. Dat bleek dus problemen te geven bij nummers die met een 0 beginnen :P
Ik zal het je sterker vertellen.

Ik ken een database waarbij het BSN als decimal wordt opgeslagen, omdat het niet (altijd) in een int32 past.
En als je er een string of whatever van maakt, krijg je er zonder formatting "000000000,00" uit.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

alex3305 schreef op donderdag 27 januari 2011 @ 11:39:
[...]

Ik geloof dat ik weleens gelezen heb dat in verschillende programmeertalen de operator precedence anders kan zijn, ja.
Binnen 1 bepaalde taal ligt de volgorde echter vast en is het niet platform afhankelijk.

De operator precedence tussen verschillende talen is wel een ander verhaal. Dat is een keuze van de language designer. Meeste designers kiezen er wel voor om een Meneer Van Dale Wacht Op Antwoord precedence aan te houden.

(Uitzonderingen zijn er altijd, zoals bijv. Smalltalk :p)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Smalltalk is een geval apart, maar daarin zitten de binary operators ook niet in de taal zelf verwerkt. Een taal waarin de normale wiskundige regels niet gelden zou ik niet in willen werken :)
alex3305 schreef op donderdag 27 januari 2011 @ 11:39:
[...]

Ik geloof dat ik weleens gelezen heb dat in verschillende programmeertalen de operator precedence anders kan zijn, ja.
Ik doelde op PHP op verschillende platforms. Waarom zou je een expressie zo opschrijven dat hij cross-language goed werkt :?

[ Voor 16% gewijzigd door .oisyn op 27-01-2011 12:15 ]

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.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 23:19
Janoz schreef op donderdag 27 januari 2011 @ 11:19:
[...]

Je kunt keurig op een wiskundige manier een digit uit een getal halen ((x % 10000)/1000), dus dat is geen reden. De andere reden die je aangeeft is echter de enige juiste en wordt helaas vaak met voeten getreden. Nog heel vaak kom ik de 'het veld is numeriek dus een long/int'-argumentatie tegen voor rekeningnummers, bsn nummers, correspondentie nummers, productnummers.

Eigenlijk is de stelregel voor ontwerp: Wanneer een numeriek veld een meetwaarde aangeeft (hoeveelheid, afstand) dan is het een long/int/float. In alle andere gevallen is het een string met een restrictie op de te gebruiken tekens.
En IP(v6)- adressen? Het is geen meetwaarde (en in zekere zin ook geen identifier), maar wordt in IP- headers altijd als 128- bits getal (struct in6_addr is een char[16]) verstuurd.

ISBN is rottig, want er bestaat een 10- cijferige variant voor boeken van voor 2007 en 13- cijferige variant voor boeken van na 1 januari 2007. Dan is het handiger om het op te slaan als string.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
mithras schreef op woensdag 26 januari 2011 @ 17:05:
[...]
Ik heb weinig verstand van dependency injection, maar had wel laatst gelezen over verschillende vormen. Een manier is direct:

[...]

Een tweede methode was een fuzzy manier van DI:

[...]

Zo kan je dus eenvoudig extra dependencies injecteren via een array. Iets wat ik niet als heel ongebruikelijk zie eigenlijk. Dus vraag ik me ook af wat hier het enorme bezwaar aan is, want het lijkt me meer case-gebonden dan in het algemeen geldend.
Het grootste verschil is dat je met de constructor-aanpak gegarandeerd geen parameters kunt vergeten (en dat wordt door je IDE gecontroleerd), bij de array-aanpak kun je die controle ook doen, maar dat gebeurt dan pas @ runtime. Vergelijk:

PHP:
1
2
3
4
5
6
7
8
9
10
11
// werkt:
$obj = new Dinges(new EenParamObject(), new NogEenParamObject());

// foutmelding: ctor Dinges verwacht twee parameters.
$obj2 = new Dinges(new EenParamObject());

// alternatief:
$obj3 = new Dinges(array('eenobject' => new EenParamObject(), 'nogeenobject' => new NogEenParamObject());

// werkt ook gewoon, totdat het daadwerkelijk uitgevoerd wordt.
$obj4 = new Dinges(array());


En met type hinting erbij kun je nog minder dingen stukmaken - je mag alles in een array pleuren wat je maar wilt, maar met type hinting kun je alleen aangeven dat er een array of objecttype in mag. Keuze / flexibiliteit is Het Kwaad en geeft mogelijkheden tot fouten. Typesafety ftw.

(Disclaimer: Bovenstaand kan volledig fout zijn, heb al tijden niks meer met PHP gedaan en pas nu gewoon Java logica toe op PHP)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jaap-Jan schreef op donderdag 27 januari 2011 @ 12:18:
[...]

En IP(v6)- adressen? Het is geen meetwaarde (en in zekere zin ook geen identifier), maar wordt in IP- headers altijd als 128- bits getal (struct in6_addr is een char\[16]) verstuurd.
Slecht voorbeeld, een IP adres is binary data. Net als bijvoorbeeld een MD5 hash. Binary data als binary data opslaan is natuurlijk een stuk efficienter dan die data opslaan in zijn textuele representatie.

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.


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
YopY schreef op donderdag 27 januari 2011 @ 12:19:
[...]


Het grootste verschil is dat je met de constructor-aanpak gegarandeerd geen parameters kunt vergeten (en dat wordt door je IDE gecontroleerd), bij de array-aanpak kun je die controle ook doen, maar dat gebeurt dan pas @ runtime. Vergelijk:

[...]

En met type hinting erbij kun je nog minder dingen stukmaken - je mag alles in een array pleuren wat je maar wilt, maar met type hinting kun je alleen aangeven dat er een array of objecttype in mag. Keuze / flexibiliteit is Het Kwaad en geeft mogelijkheden tot fouten. Typesafety ftw.

(Disclaimer: Bovenstaand kan volledig fout zijn, heb al tijden niks meer met PHP gedaan en pas nu gewoon Java logica toe op PHP)
Klopt, dat is ook zeker waar :)

Over het typehinting: dat is ook de rede dat de array eigenlijk via setOptions() gaat en dan naar verschillende setters to. Omdat php niet kan type hinten op properties (of hoe je dat precies moet noemen) maar alleen in de argumenten van methodes dat kan afdwingen, valt of staat de constructie dus bij de verschillende set*() methodes.

Aan de andere kant: als je meerdere dependencies wilt injecteren, vind ik het altijd lastig om alles direct in de constructor te proppen. Lange regels, de volgorde maakt uit etc, ik zie de array wel als een mooie oplossing. Daarnaast, als een object bijvoorbeeld caching of logging ondersteunt, kan je eenvoudig in de array een extra optionele "dependency" meegeven (hij is dan niet echt afhankelijk in de letterlijke zin, maar goed). Juist met de array is dat enorm makkelijk te doen en kan dus de caller bepalen of het object aan caching/logging/etc doet :)

Natuurljk, dat kan je ook anders implementeren, maar het ging mij om de allereerste post: argumenten als array meegeven is absoluut not-done. Ik denk daar wat anders over :)

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
RayNbow schreef op donderdag 27 januari 2011 @ 11:59:
[...]

De operator precedence tussen verschillende talen is wel een ander verhaal. Dat is een keuze van de language designer. Meeste designers kiezen er wel voor om een Meneer Van Dale Wacht Op Antwoord precedence aan te houden.
Dat doen ze niet, immers in de meeste talen zijn machtsverheffen en worteltrekken geimplementeerd als functies en niet als operators waardoor ze eigenlijk automatisch een hogere precedence hebben ten opzichte van vermenigvuldingen en optellen bijvoorbeeld. Verder is het nog een achterhaald ezelsbruggetje ook, Wikipedia: Bewerkingsvolgorde

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Jaap-Jan schreef op donderdag 27 januari 2011 @ 12:18:
[...]

En IP(v6)- adressen? Het is geen meetwaarde (en in zekere zin ook geen identifier), maar wordt in IP- headers altijd als 128- bits getal (struct in6_addr is een char\[16]) verstuurd.

ISBN is rottig, want er bestaat een 10- cijferige variant voor boeken van voor 2007 en 13- cijferige variant voor boeken van na 1 januari 2007. Dan is het handiger om het op te slaan als string.
Je kan van ISBN ook een aparte tabel maken.

Een ISBN bestaat namelijk uit groepen van digits en per groep zou je dan een kolom aan kunnen maken.
ISBN-13 = ISBN-10 + een industry code (978 / 979), zou je eventueel een nullable kolom van kunnen maken.

Met een aparte tabel met kolommen per groep is het ook makkelijker zoeken naar bijvoorbeeld alle boeken uit hetzelfde land of van een specifieke uitgeverij.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Davio schreef op donderdag 27 januari 2011 @ 13:17:
[...]

Je kan van ISBN ook een aparte tabel maken.

Een ISBN bestaat namelijk uit groepen van digits en per groep zou je dan een kolom aan kunnen maken.
ISBN-13 = ISBN-10 + een industry code (978 / 979), zou je eventueel een nullable kolom van kunnen maken.

Met een aparte tabel met kolommen per groep is het ook makkelijker zoeken naar bijvoorbeeld alle boeken uit hetzelfde land of van een specifieke uitgeverij.
Dan gebruik je toch
SQL:
1
select * from book where isbn like '%' + @lang + '%'

:Y)
et voila, geen lastige joins meer, alles lekker in 1 kolom en querien maar :')

In die aparte tabellen lekker auto increment gebruiken waardoor de id niet het deel van de ISBN is en je komt misschien nog wel terug in dit topic of op TDWTF

[ Voor 10% gewijzigd door .Gertjan. op 27-01-2011 13:58 ]

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ja, ware het niet dat niet elke ISBN op dezelfde manier is opgebouwd.

Sommige nummers hebben een langere groepscode waardoor het aantal beschikbare digits voor uitgeverijen / titels kleiner is. Jouw query levert dan onverwachte resultaten op.

Dus mijn idee is zo gek nog niet en jij hebt er te weinig / simpel over nagedacht.

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Davio schreef op donderdag 27 januari 2011 @ 14:10:
Ja, ware het niet dat niet elke ISBN op dezelfde manier is opgebouwd.

Sommige nummers hebben een langere groepscode waardoor het aantal beschikbare digits voor uitgeverijen / titels kleiner is. Jouw query levert dan onverwachte resultaten op.

Dus mijn idee is zo gek nog niet en jij hebt er te weinig / simpel over nagedacht.
:+ echt waar joh?
:Y)

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat doen ze wel. Dat ze sommige operaties niet als operators modelleren doet niets af aan de volgorde van de operaties die wél in operator-vorm beschikbaar 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.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Aah, mijn sarcasm-spotter stond uit.

Afbeeldingslocatie: http://media.80stees.com/images/products/Immune-To-Your-Sarcasm-Big-Bang-Theory-Shirt.jpg

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik heb een mooie reeks getallen berekend. B) Wie weet wat het is mag het zeggen.
2.50, 3.50, 4.50, 5.50, 6.50, 7.50, 8.50, 9.50, 10.50, 11.50, 12.50, 13.50, 14.50, 15.50, 16.50, 17.50, 43.50, 44.50, 45.50, 46.50, 47.50, 48.50, 49.50, 50.50, 51.50, 52.50, 53.50, 54.50, 55.50, 56.50, 57.50, 58.50, 59.50, 60.50, 61.50, 62.50, 63.50, 64.50, 65.50, 66.50, 67.50, 68.50, 69.50, 70.50, 71.50

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Je gaat van 17.50 naar 43.50 maar verder zie ik alleen een +1 in die reeks?

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Klopt. :P

Het zijn de bedragen tussen € 0.01 en € 100.00 die na het vermenigvuldigen met 0.19 en afronden op twee decimalen afwijken van het daadwerkelijke bedrag wanneer alle bedragen van die berekening in een float worden opgeslagen.

:X

[ Voor 13% gewijzigd door CodeCaster op 27-01-2011 14:52 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

CodeCaster schreef op donderdag 27 januari 2011 @ 14:44:
Klopt. :P

Het zijn de bedragen tussen € 0.01 en € 100.00 die na het vermenigvuldigen met 0.19 en afronden op twee decimalen afwijken van het daadwerkelijke bedrag wanneer alle bedragen van die berekening in een float worden opgeslagen.

:X
Is dit gedrag consistent? Komt het altijd op die manier voor op iedere machine? Weet dat er in floats vervelende afrondings issues zitten, maar weet eigenlijk niet of die constant zijn...

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja, die zijn constant, gedocumenteerd, en volledig voorspelbaar. Voor IEEE-754 compatible systemen uiteraard. Voor de x87 betekent dat dus dat je het aantal bits waarmee gerekend wordt even terug moet brengen naar 64 bits, ipv 80 bits. Wat PHP dus bijvoorbeeld niet doet (en wat de oorzaak was van die DoS exploit bij de invoer van een bepaalde float)

.edit: CodeCaster, wat voor rounding mode gebruik jij? Round to even, zoals het hoort?

Ik kom met doubles (53 bits mantissa) op dit lijstje: 1.50, 42.50, 53.50, 86.50, 91.50
En met floats (24 bits mantissa) op dit lijstje: 24.50, 43.50, 52.50, 92.50, 96.50, 99.50

[ Voor 51% gewijzigd door .oisyn op 27-01-2011 15:52 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op donderdag 27 januari 2011 @ 14:15:
[...]

Dat doen ze wel. Dat ze sommige operaties niet als operators modelleren doet niets af aan de volgorde van de operaties die wél in operator-vorm beschikbaar zijn.
Je gaat mij niet vertellen dat pow() en sqrt() allebij verschillende precedence hebben (overeenkomstig aan Meneer Van Dale Wacht Op Antwoord). Dat de rest van de operatoren toevallig in dat lijstje zou passen, prima, maar in de meeste talen is dat ook niet zo. Daar hebben mul en div dezelfde precedence en worden ze van links naar rechts geëvalueerd. Ergo, daar word de moderne variant van de rekenregels gebruikt en niet het reeds genoemde ezelsbruggetje.
.oisyn schreef op donderdag 27 januari 2011 @ 14:59:
Ja, die zijn constant, gedocumenteerd, en volledig voorspelbaar. Voor IEEE-754 compatible systemen uiteraard.
In theorie is dat prima, in de praktijk echter blijkt dat dergelijke afrondingsfouten niet deterministisch te reproduceren zijn op verschillende machines. (Sterker nog, er zijn wat dat betreft zelfs verschillen tussen de PPU en SPUs bijvoorbeeld). Zie ook,

http://gafferongames.com/...oating-point-determinism/

[ Voor 27% gewijzigd door PrisonerOfPain op 27-01-2011 15:47 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

PrisonerOfPain schreef op donderdag 27 januari 2011 @ 15:44:
Je gaat mij niet vertellen dat pow() en sqrt() allebij verschillende precedence hebben (overeenkomstig aan Meneer Van Dale Wacht Op Antwoord).
Misschien moet je mijn reactie nog een keer doorlezen. Dat zijn toch geen operatoren, of wel?
maar in de meeste talen is dat ook niet zo. Daar hebben mul en div dezelfde precedence en worden ze van links naar rechts geëvalueerd. Ergo, daar word de moderne variant van de rekenregels gebruikt en niet het reeds genoemde ezelsbruggetje.
Ik heb met datzelfde ezelsbruggetje altijd geleerd dat vermenigvuldigen en delen, alsmede optellen en aftrekken, gelijkwaardig waren. De enige fout die er wat mij betreft dus instaat is worteltrekken. Bovendien ben je enorm aan het nitpicken, de kern van het verhaal waren de algemeen geldende wiskundige rekenregels, niet specifiek dat idd foute ezelsbruggetje. Dat ezelsbruggetje staat gewoon voor de meeste mensen synoniem met de officiele wiskundige regels.
PrisonerOfPain schreef op donderdag 27 januari 2011 @ 15:44:
In theorie is dat prima, in de praktijk echter blijkt dat dergelijke afrondingsfouten niet deterministisch te reproduceren zijn op verschillende machines. (Sterker nog, er zijn wat dat betreft zelfs verschillen tussen de PPU en SPUs bijvoorbeeld).
Dan zijn ze óf niet IEEE-754 compliant, óf je compilers genereren voor dezelfde code niet altijd dezelfde operaties. C en C++ compilers passen nogal wat optimalisaties toe die ervoor zorgen dat de code die gegenereerd wordt niet exact overeenkomt met wat jij specificeert. Wiskundig is (a * b) / c hetzelfde als a * (b / c), maar binnen IEEE-754 is dat niet het geval. De compiler kan optimalisaties toepassen waardoor een andere variant eruitkomt dan dat je hebt opgeschreven. Nee, dan is je resultaat op het ene platform wellicht anders dan het resultaat op het andere platform. Maar dat wil niet zeggen dat IEEE-754 operaties ineens afhankelijk zijn van de stand van de maan ofzo.

Het artikel dat je aanhaalt gaat over physics engines in games. Hier hebben we het over banksoftware. Nou zal je voor banksoftware geen floating point getallen gebruiken, maar doe je dat wel dan heb je het wel over software die gecompiled wordt volgens de stricte FP regels, en niet eentje die enorm gaat optimaliseren omdat iets dat ongeveer klopt ook wel goed is, zoals in games.

[ Voor 65% gewijzigd door .oisyn op 27-01-2011 16:08 ]

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.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

.edit: dubbel.

[ Voor 95% gewijzigd door .oisyn op 27-01-2011 15:56 ]

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.


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Ah, floats, geweldige dingen als je niet door hebt dat er kleine afronding foutjes in kunnen zitten.

Als je in excel of calc van open office en waarschijnlijk ook vele andere programma's het volgende doet :
cel a1 de waarde 1
cel a2 de waarde =a1/3
cel a3 de waarde =a2*4-1
cel a3 kopieer je naar beneden zodat hij telkens hetzelfde uitrekend.
Bij mijn default calc instellingen staat op a26 nog netjes 0,33 maar de cel eronder 0,31 en daarna nog grotere afwijkingen.

Of dit onder de naam bug valt weet ik niet, ik denk het eigenlijk niet omdat er altijd wel afrondingen gedaan moeten worden, maar het is wel erg onverwachts als je het niet weet.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op donderdag 27 januari 2011 @ 15:55:
[...]

Misschien moet je mijn reactie nog een keer doorlezen. Dat zijn toch geen operatoren, of wel?
Nee. En dat claim ik dan ook niet ;-) wellicht zitten we zelfs op een lijn.
Dan zijn ze óf niet IEEE-754 compliant, óf je compilers genereren voor dezelfde code niet altijd dezelfde operaties. C en C++ compilers passen nogal wat optimalisaties toe die ervoor zorgen dat de code die gegenereerd wordt niet exact overeenkomt met wat jij specificeert. Wiskundig is (a * b) / c hetzelfde als a * (b / c), maar binnen IEEE-754 is dat niet het geval. De compiler kan optimalisaties toepassen waardoor een andere variant eruitkomt dan dat je hebt opgeschreven. Nee, dan is je resultaat op het ene platform wellicht anders dan het resultaat op het andere platform. Maar dat wil niet zeggen dat IEEE-754 operaties ineens afhankelijk zijn van de stand van de maan ofzo.
Errr IEEE-754 geeft redelijk wat vrijheid met betrekking tot de implementaties van operators. Zo is het toegestaan dat een platform een hogere precisie gebruikt voor intermediate results (eg. fused multiply-add en anderen). Daarnaast heeft IEEE een aantal optionele operaties die je hardware kan implementeren (sin, sqrt et cetera). Kortom, deterministische resultaten gaan veel verder dan simpelweg /fp:strict gebruiken en de goede control registers instellen.

Zie onder andere Wikipedia: IEEE 754 revision

[ Voor 13% gewijzigd door PrisonerOfPain op 27-01-2011 16:30 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 21:38

Reptile209

- gers -

PiepPiep schreef op donderdag 27 januari 2011 @ 16:04:
Ah, floats, geweldige dingen als je niet door hebt dat er kleine afronding foutjes in kunnen zitten.

Als je in excel of calc van open office en waarschijnlijk ook vele andere programma's het volgende doet :
cel a1 de waarde 1
cel a2 de waarde =a1/3
cel a3 de waarde =a2*4-1
cel a3 kopieer je naar beneden zodat hij telkens hetzelfde uitrekend.
Bij mijn default calc instellingen staat op a26 nog netjes 0,33 maar de cel eronder 0,31 en daarna nog grotere afwijkingen.

Of dit onder de naam bug valt weet ik niet, ik denk het eigenlijk niet omdat er altijd wel afrondingen gedaan moeten worden, maar het is wel erg onverwachts als je het niet weet.
Bij mij in Excel 2003 zit in A20 al een afwijking in de 6e decimaal (0,333332), en dan gaat het rap de mist in (-1.4e+09 in A45). Je doet er weinig aan, behalve altijd met gezond verstand naar je uitkomsten blijven kijken.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

Maar nog steeds bruikbaar:
Het oude ezelsbruggetje werd afgezworen, hoewel het nog enigszins bruikbaar zou blijven: de veranderde plaats van worteltrekken maakte in de praktijk weinig uit omdat de wortels in bijna alle boeken voorzien werden van een bovenstreep of haakjes.
;)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

.oisyn schreef op donderdag 27 januari 2011 @ 14:59:
.edit: CodeCaster, wat voor rounding mode gebruik jij? Round to even, zoals het hoort?

Ik kom met doubles (53 bits mantissa) op dit lijstje: 1.50, 42.50, 53.50, 86.50, 91.50
En met floats (24 bits mantissa) op dit lijstje: 24.50, 43.50, 52.50, 92.50, 96.50, 99.50
Ik had een fout gemaakt in m'n code, zag dat ik in plaats van een currency als teller een double gebruikte. Drie keer raden wat daarmee gebeurt als je er tienduizend keer 0.01 bij optelt. :X :P

Heb nu deze reeks uit weten te voeren:
1.50, 2.50, 4.50, 5.50, 8.50, 9.50, 13.50, 14.50, 15.50, 16.50, 21.50, 23.50, 25.50, 27.50, 30.50, 32.50, 34.50, 36.50, 39.50, 41.50, 42.50, 45.50, 48.50, 49.50, 52.50, 53.50, 55.50, 56.50, 59.50, 60.50, 63.50, 66.50, 67.50, 70.50, 73.50, 74.50, 77.50, 78.50, 80.50, 81.50, 84.50, 86.50, 89.50, 92.50, 94.50, 95.50, 97.50, 98.50
Met de volgende code, feel free to comment:
Delphi:
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
var
  floatBedrag: double;
  currencyBedrag: currency;
  floatBTW: double;
  floatBTWBedrag: double;
  currencyBTWBedrag: currency;
begin

  DecimalSeparator := '.';

  ProbleemGetallenMemo.Text := '';
  floatBTW := 19.00;
  currencyBedrag := 0.00;

  repeat

    floatBedrag := currencyBedrag;

    floatBTWBedrag := floatBedrag * (floatBTW / 100);
    currencyBTWBedrag := floatBedrag * (floatBTW / 100);

    if (FormatFloat('#0.00', floatBTWBedrag) <> FormatFloat('#0.00', currencyBTWBedrag)) then
    begin
      ProbleemGetallenMemo.Text := ProbleemGetallenMemo.Text + FormatFloat('#0.00', currencyBedrag) + ', ';
    end;

    currencyBedrag := currencyBedrag + 0.01;

  until (currencyBedrag > 100);

end;


Het zou ook best aan de FormatFloat-functie kunnen liggen in dit geval (en dan is de oorzaak van het probleem van m'n oorspronkelijke post, hoewel ik het probleem niet bij name noem, niet direct te wijten aan het gebruik van floats maar meer aan de methode van afronding, maar in de oorspronkelijke code wordt die op exact deze wijze gebruikt), maar hoe die precies werkt volg ik niet, want die roept uiteindelijk zo'n 300 regels assembly aan in FloatToTextFmt. :P


In C# krijg ik inderdaad dezelfde getallen als jij bij een double. 1,50, 42,50, 53,50, 86,50, 91,50:
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
double floatBedrag;
decimal decimalBedrag;
double floatBTW;
double floatBTWBedrag;
decimal decimalBTWBedrag;


floatBTW = 19.00f;
decimalBedrag = 0.00m;

do
{
    floatBedrag = (double)decimalBedrag;

    floatBTWBedrag = floatBedrag * (floatBTW / 100);
    decimalBTWBedrag = (decimal)(floatBedrag * (floatBTW / 100));

    if ((decimal)Math.Round(floatBTWBedrag, 2) != (Math.Round(decimalBTWBedrag, 2)))
    {
        Console.Write(decimalBedrag + ", ");
    }

    decimalBedrag = decimalBedrag + 0.01m;

} while (decimalBedrag <= 100);


Bij gebruik van een float wel weer een aanzienlijk langere reeks, maar anders dan in Delphi. Waar zijn die zwevendekommagetallen nou eigenlijk goed voor, behalve 3D-berekeningen? :P

[ Voor 15% gewijzigd door CodeCaster op 27-01-2011 23:26 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
.oisyn schreef op donderdag 27 januari 2011 @ 12:13:
Waarom zou je een expressie zo opschrijven dat hij cross-language goed werkt :?
Betere vraag vind ik eigenlijk : Waarom niet? ( behalve als het grote performance voordelen biedt)
Ik probeer ook gewoon 1 coding standard cross-language te hanteren. Ik wil een functie in een andere taal op mijn manier kunnen lezen, niet op 30 verschillende manieren omdat dezelfde elf-proef in 30 talen gemaakt is. ( behalve dus als het een grote performance boost inhoudt )

Maarja, bij ons zijn dan ook de algemene haakjes noteringen onderdeel van de coding standaard...

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
Bij ons ook. Was het vandaag vergeten, wie weet de waarde van c?

C++:
1
2
char countryCode[2] = {'N', 'L'};
int c = countryCode[0] << 8 + countryCode[1];

spoiler:
<< heeft een lagere operator precedence dan +, daar had ik dus even niet aan gedacht :(. Pas toen ik het aan een collega liet zien, zag ik het zelf...

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gomez12 schreef op donderdag 27 januari 2011 @ 23:25:
[...]

Betere vraag vind ik eigenlijk : Waarom niet? ( behalve als het grote performance voordelen biedt)
Ik probeer ook gewoon 1 coding standard cross-language te hanteren. Ik wil een functie in een andere taal op mijn manier kunnen lezen, niet op 30 verschillende manieren omdat dezelfde elf-proef in 30 talen gemaakt is. ( behalve dus als het een grote performance boost inhoudt )

Maarja, bij ons zijn dan ook de algemene haakjes noteringen onderdeel van de coding standaard...
Tja, het zal wel gewoon de wiskundige in mij zijn dat ik het onzin vind dat je a + b * c op een andere manier kan lezen dan a + (b * c). Ik heb het niet over operators als &, he. Al kan ik die ook wel lezen (bitwize operators hebben doorgaans een vrij lage precedence)

[ Voor 5% gewijzigd door .oisyn op 28-01-2011 00:05 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

CodeCaster schreef op donderdag 27 januari 2011 @ 22:55:
[...]

Ik had een fout gemaakt in m'n code, zag dat ik in plaats van een currency als teller een double gebruikte. Drie keer raden wat daarmee gebeurt als je er tienduizend keer 0.01 bij optelt. :X :P

Heb nu deze reeks uit weten te voeren:
Dat lijkt me nog steeds fout. Jij convert het btw bedrag na decimal nádat je het als double hebt uitgerekend. Waarom er toevallig exact dezelfde uitkomst uit komt is me nog niet helemaal duidelijk. Maar in ieder geval, je moet beide apart uitrekenen, en dan het verschil bekijken.

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
#include <stdio.h>
#include <float.h>

template<class T>
int roundeven(T value)
{
    int i = (int)value;
    T f = value - i;
    if ((i & 1) && f >= (T)0.5 || !(i & 1) && f > (T)0.5)
        i++;
    return i;
}

int main()
{
    _controlfp(_PC_53, _MCW_PC);

    for (int i = 0; i < 10000; i++)
    {
        int ivalue = (i * 19 + ((i*19/100&1) ? 50 : 49)) / 100;
        int dvalue = roundeven((i / 100.0 * 0.19) * 100.0);

        if (ivalue != dvalue)
            printf("%.2f: %d / %d / %g\n", i / 100.0f, ivalue, dvalue, ((i / 100.0 * 0.19 * 100.0 * 100.0)) - (i * 19));
    }
}

(wel compilen zonder optimalisaties).

Output:
1.50: 28 / 29 / 4.54747e-013
42.50: 808 / 807 / -1.45519e-011
53.50: 1016 / 1017 / 1.45519e-011
86.50: 1644 / 1643 / -2.91038e-011
91.50: 1738 / 1739 / 2.91038e-011


Je ziet hier: "geldbedrag: juiste BTW in centen / BTW in centen uitgerekend met een double / de afrondingsfout van de double in kwestie"

Het probleem ligt puur bij het feit dat bedragen niet exact op een halve cent uitkomen, wat in sommige gevallen betekent dat er de verkeerde kant op afgerond wordt. Zoals bijvoorbeeld bij 1.50 kom je op een btw in centen van ~28.500000000000454747, afgerond dus 29 cent, ipv exact op 28.5 ofwel afgerond 28 cent. Bij 42.50 is dat ~807.4999999999854481 afgerond 807 in plaats van 807.5 afgerond 808.

[ Voor 26% gewijzigd door .oisyn op 28-01-2011 03: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.


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:24

RayNbow

Kirika <3

Bv202 schreef op woensdag 26 januari 2011 @ 16:41:
Een stuk code dat ik tegenkwam in een oefening dat dit semester tijdens een les is besproken:

Java:
1
2
3
4
public boolean verifieer(int reknr) {
    / *snip */
    return (1 * d1 + 2 * d2 + 3 * d3 + 4 * d4 + 5 * d5 + 6 * d6 + 7 * d7 + 8 * d8 + 9 * d9) % 11 == 0;
}


"Schijf je code zo efficiënt en uitbreidbaar mogelijk" zeggen ze ons dan 8)7
De elfproef is trouwens nog fout ook. Het accepteert 0000.00.000 als een geldig bankrekeningnummer. :p


* RayNbow kon het trouwens niet laten om een Haskell versie te produceren... :p
ghci> elfproef (account "736160221")
True
ghci> elfproef (account "000000000")
False

Haskell:
1
2
3
4
5
6
7
8
9
10
11
12
{-# LANGUAGE ParallelListComp #-}
import Data.Char

type Digit = Int
newtype Account = Account [Digit]

account :: String -> Account
account = Account . reverse . map digitToInt

elfproef :: Account -> Bool
elfproef (Account ns) = q > 0 && r == 0 where
  (q,r) = sum [i*a | a <- ns | i <- [1..]] `quotRem` 11


(Code is niet robuust... de functie account blaast zichzelf op met non-numerieke strings :p)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

.oisyn schreef op vrijdag 28 januari 2011 @ 00:28:
[...]

Dat lijkt me nog steeds fout. Jij convert het btw bedrag na decimal nádat je het als double hebt uitgerekend. Waarom er toevallig exact dezelfde uitkomst uit komt is me nog niet helemaal duidelijk. Maar in ieder geval, je moet beide apart uitrekenen, en dan het verschil bekijken.
Dat heb ik gedaan:
Delphi:
1
2
3
4
    floatBTWBedrag := floatBedrag * (floatBTW / 100);
    currencyBTWBedrag := currencyBedrag * (currencyBTW / 100);

    if (FormatFloat('#0.00', floatBTWBedrag) <> FormatFloat('#0.00', currencyBTWBedrag)) then

En dan krijg ik nog steeds dezelfde rij getallen. Vandaag als ik tijd heb maar eens meer lezen over floats (en afronden in Delphi), heb er zelf zelden mee gewerkt.

Dat het bedrag niet correct is op te slaan in een float en daardoor "verkeerd" wordt afgerond wordt snap ik, dat is inherent aan bepaalde (de meeste?) breuken in floats.

Gelukkig heeft, volledig volgens de stijl van dit topic, een slimme php'er al een oplossing voor mij bedacht:
PHP:
1
2
3
4
5
6
7
8
9
$numberToRound = 1.5;

//Convert to string.
$numberToRound = "$numberToRound";

//iff number ends in a "5", add fuzz
if (eregi("$5", $pages)) $pages += .000001;   

$round = round($pages, 0);

:P

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Ik heb toch de mensen van die site hier even over gemailed. De fout zit in het platform wat ze gebruiken (*slik*). Maar het wordt naar boven toe ge-escaleerd. Wel positief dat ze hier heel goed op in gingen en niet meteen "WTF HEB JE GEDAAN MET ONZE SITE" :P.

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 29-09 14:10
roy-t schreef op vrijdag 28 januari 2011 @ 12:35:
[...]


Ik heb toch de mensen van die site hier even over gemailed. De fout zit in het platform wat ze gebruiken (*slik*). Maar het wordt naar boven toe ge-escaleerd. Wel positief dat ze hier heel goed op in gingen en niet meteen "WTF HEB JE GEDAAN MET ONZE SITE" :P.
(in reactie op de hack)
Wtf.. dat is toch wel heel slecht. Welke brakke frot platform is het eigenlijk?

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 23:19
ASP.NET. ;)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 29-09 14:10
Neej :P het is classic asp. dat had ik al wel gezien. Maar in classic asp is niet verantwoordelijk voor deze exploit de clueless kabouter die die site gemaakt heeft wel. :)

Uit de opmerking van roy-t maakte ik op dat er een of ander cms(?) gebruikt werd, vandaar de vraag :)

Acties:
  • 0 Henk 'm!

  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Eerder klassieke asp, aan gegenereerde code te zien. meh

[ Voor 9% gewijzigd door boe2 op 28-01-2011 13:32 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dan zou het .aspx geweest zijn. Het lijkt dus meer op classic asp

edit:
mmm, misschien toch maar refreshen voordat ik post ;)

[ Voor 14% gewijzigd door Woy op 28-01-2011 13:34 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
CodeCaster schreef op vrijdag 28 januari 2011 @ 08:26:
[...]
PHP:
1
2
3
4
5
6
7
8
9
$numberToRound = 1.5;

//Convert to string.
$numberToRound = "$numberToRound";

//iff number ends in a "5", add fuzz
if (eregi("$5", $pages)) $pages += .000001;   

$round = round($pages, 0);
Ik snap niet dat-ie eerst omzet naar een String.

Bovenstaande is toch exact hetzelfde als:

$x = round($x+0.000001);

[ Voor 47% gewijzigd door Gamebuster op 28-01-2011 17:31 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Gamebuster schreef op vrijdag 28 januari 2011 @ 17:31:
[...]

Ik snap niet dat-ie eerst omzet naar een String.

Bovenstaande is toch exact hetzelfde als:

$x = round($x+0.000001);
Nee want als het input getal c.499999 krijg je round(c.5) = c ipv het hier blijkbaar gewenste (c+1).

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
D-Raven schreef op vrijdag 28 januari 2011 @ 13:31:
[...]


Neej :P het is classic asp. dat had ik al wel gezien. Maar in classic asp is niet verantwoordelijk voor deze exploit de clueless kabouter die die site gemaakt heeft wel. :)

Uit de opmerking van roy-t maakte ik op dat er een of ander cms(?) gebruikt werd, vandaar de vraag :)
Het valt me eigenlijk op dat er bedrijven zijn die honderden euro's voor een website vragen terwijl die code vol lekken en onlogische dingen staat. Overal de mogelijkheid tot SQL injecties (een excuus was "magic quotes staan aan"), op elke plaats mogelijkheden tot XSS attacks en het absolute dieptepunt: het wachtwoord van het cms stond ergens als plain-text opgesagen in een bestandje waar iedereen bij kon.

Deze laatste was eenmalig, maar dit soort dingen heb ik wel al vaker tegengekomen. Ok, PHP staat misschien wel bekend als de taal met veel amateurs die slechte code schrijven, maar als je jezelf PHP-developer noemt en honderden euro's voor je werk vraagt, zou je toch wel een basiskennis mogen hebben.

Nu ben ik zelf ook maar een beginner en zeker geen ervaren programmeur/webdeveloper, maar aan dit soort dingen stoor ik me wel :|

Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Bv202 schreef op vrijdag 28 januari 2011 @ 20:28:
[...]


Het valt me eigenlijk op dat er bedrijven zijn die honderden euro's voor een website vragen terwijl die code vol lekken en onlogische dingen staat.
Honderden? Als het een overheidsproject betreft heb je het snel over tienduizenden euro's tot tonnen/miljoenen. Maar helaas zegt dat totaal niets over de opgeleverde kwaliteit.

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 18:55
roy-t schreef op vrijdag 28 januari 2011 @ 12:35:
[...]


Ik heb toch de mensen van die site hier even over gemailed. De fout zit in het platform wat ze gebruiken (*slik*). Maar het wordt naar boven toe ge-escaleerd. Wel positief dat ze hier heel goed op in gingen en niet meteen "WTF HEB JE GEDAAN MET ONZE SITE" :P.
En dat allemaal nav een lam tellertje wat er nog steeds op staat. Het is zowat februari 8)7

Acties:
  • 0 Henk 'm!

Verwijderd

Bv202 schreef op vrijdag 28 januari 2011 @ 20:28:
[...]

Het valt me eigenlijk op dat er bedrijven zijn die honderden euro's voor een website vragen terwijl die code vol lekken en onlogische dingen staat. Overal de mogelijkheid tot SQL injecties (een excuus was "magic quotes staan aan"), op elke plaats mogelijkheden tot XSS attacks en het absolute dieptepunt: het wachtwoord van het cms stond ergens als plain-text opgesagen in een bestandje waar iedereen bij kon.

Deze laatste was eenmalig, maar dit soort dingen heb ik wel al vaker tegengekomen. Ok, PHP staat misschien wel bekend als de taal met veel amateurs die slechte code schrijven, maar als je jezelf PHP-developer noemt en honderden euro's voor je werk vraagt, zou je toch wel een basiskennis mogen hebben.
Onder PHP-basiskennis verstaan veel mensen 3 tutorials gelezen...

Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 04-10 21:59
"Het werkt toch?" O-)

[ Voor 12% gewijzigd door Freeaqingme op 29-01-2011 01:13 ]

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Bv202 schreef op vrijdag 28 januari 2011 @ 20:28:
[...]

... maar als je jezelf PHP-developer noemt en honderden euro's voor je werk vraagt, zou je toch wel een basiskennis mogen hebben.
In toevoeging op Gertjan, honderden euro's is niks. Eenvoudige websites bij een fatsoenlijk bedrijf beginnen zo ongeveer vanaf 3000 euro.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
Niet zo gek ook. Wat wil je doen voor honderden euro's? Zelfs als student rekende ik als vriendenprijs voor 2 weken ontwikkeltijd nog meer dan 1000 euro... niet-vriendenprijs was toen 10 euro/uur, en een paar dagen ben je toch echt wel bezig voor het maken van welke website dan ook.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

MBV schreef op zaterdag 29 januari 2011 @ 12:25:
Niet zo gek ook. Wat wil je doen voor honderden euro's? Zelfs als student rekende ik als vriendenprijs voor 2 weken ontwikkeltijd nog meer dan 1000 euro... niet-vriendenprijs was toen 10 euro/uur, en een paar dagen ben je toch echt wel bezig voor het maken van welke website dan ook.
Een tientje per uur vind ik nog vrij weining. Zeker als het een niet-vriendenprijs is. Veelal heeft zo'n bedrijf financieel belang bij een goede website. Dat is het eerste waarover je moet beginnen bij de onderhandelingen over de prijs.
Ik heb in mijn studententijd ook veel sites opgeleverd gebaseerd op Joomla. Het enige dat ik hoefde te doen was een geschikt template te verzorgen en de kant-en-klare content te embedden. Vaak waren die templates gebaseerd op rechtenvrije-templates die all-over-the-web te vinden zijn.

Al me al kostte me dat een uurtje of 40. En ik rekende daar al snel 1500 euro excl. voor. Het onderhouden van hun website kon op twee manieren gekocht worden. 100 euro per maand, of 1000 euro voor een jaar.
Het onderhouden kostte me ongeveer twee uur per maand.

En dan nog nagaande dat een website voor 1000 euro vrij weinig kost. Gerenommeerde bedrijven vragen gerust twee tot vijf keer zoveel.

Er waren jaren bij dat ik zo twee of drie klanten had, die ieder ook elke maand 100 euro extra inbrachten naast de 1500 euro ontwikkelingskosten.
5400 euro in een jaar bijverdienen is niet slecht voor een student :P

Edit; ik moet hier wel aan toevoegen dat het grote bedrijven waren die ik bediende. Twee dierenklinieken, restaurants en een camping bij ons in de buurt.

[ Voor 5% gewijzigd door Matis op 29-01-2011 12:37 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • BarôZZa
  • Registratie: Januari 2003
  • Laatst online: 21:23
10 euro per uur is niks, maar twee weken lang 10 uur per dag werken, dan heb je wel wat meer gebouwd dan een simpele website. 3000 euro voor een simpele site vind ik trouwens vrij veel, zeker voor midden/kleinbedrijf waar denk ik veel ZZP'ers mee te maken hebben. Wanneer de layout wordt aangeleverd kan ik prima een website bouwen op basis van bijvoorbeeld Wordpress voor een paar honderd euro.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Bv202 schreef op vrijdag 28 januari 2011 @ 20:28:
Het valt me eigenlijk op dat er bedrijven zijn die honderden euro's voor een website vragen terwijl die code vol lekken en onlogische dingen staat.
Het antwoord staat al in je zin, :+. Een website dat nog in de categorië 'honderden euro's' valt is óf een kant-en-klaar in elkaar geklikt en licht gestylede off-the-shelf CMS, óf door een student of scholier in elkaar geprogrammeerd adhv 'My First PHP Book', waarvan de eerste de voorkeur heeft. Maar zelfs dan, als er geen constant onderhoud op uitgevoerd wordt (in de vorm van regelmatig een update van het gebruikte off-the-shelf product, ivm bugfixes maar ook de ontwikkeling van nieuwe exploits).

Nee, voor honderden euro's moet je ook niet veel verwachten. Het kan wel, maar minimaal.

Een opdrachtgever moet ook geen PHP-er zoeken, maar een webontwikkelaar die weet wat er nodig is om een site op te zetten. Wil niet generaliseren, maar veel mensen die zichzelf websitebouwers noemen zijn gefrustreerde PHP-ontwikkelaars die liever hun eigen CMS in elkaar prutsen (nadat ze een paar sites met 'losse' scripts gemaakt hebben) dan dat ze eens logisch kijken - wat wil de klant, welk product waar jaren ontwikkeling en bugfixes in zitten voldoet daaraan, en pas als dat laatste niet van toepassing is, dán pas kunnen ze zelf gaan programmeren. Is niet zo leuk als je eigen ding in elkaar prutsen, maar voor de opdrachtgever is het uiteindelijk veel beter.
quote: .Gertjan
Honderden? Als het een overheidsproject betreft heb je het snel over tienduizenden euro's tot tonnen/miljoenen. Maar helaas zegt dat totaal niets over de opgeleverde kwaliteit.
http://www.telegraaf.nl/b...e_Breda_kost_4_ton__.html
Volgens de stad is de site zo duur geworden vanwege "hoge eisen van veiligheid en privacy", zo meldt het blad Binnenlands Bestuur.
Veel props voor mensen die op die site (van Breda) nu beveiligingslekken kunnen ontdekken, gewoon om ze dwars te zitten en aan te wijzen dat veel geld inversteren != een veilige site. Is trouwens ook gewoon een Drupal site, lijkt het (zit iets over Drupal in een stukje inline JS.)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 17:35
Het was tevens de eerste keer dat ik joomla aanraakte ;) En het was inderdaad meer dan een simpele website: ook interfacen met een externe gegevensbron, maar dat was nou niet zo spannend. Ach, het bedrijf ging bijna over de kop, werd overgenomen, en toen heb ik nog eens 1000 euro kunnen vragen voor het omzetten naar een andere gegevensbron (2 dagen werk) :P

@hierboven: Het lijkt mij ook het verstandigste om een bestaand, veilig CMS te gebruiken dan zelf iets in elkaar zetten. En privacy != veiligheid: facebook is 99% veilig, maar heeft geen privacy. Als je er maatwerk modules in moet zetten omdat de linkerhand van de rechterhand niet mag weten wat hij doet (i.v.m. privacy), dan kost dat erg veel ontwikkeltijd. En vergeet niet dat testen op veiligheid erg kostbaar kan worden.

[edit]
JavaScript:
1
2
3
4
5
6
7
jQuery.extend(Drupal.settings, {
  "basePath":"\/",
   "googleanalytics":"trackOutgoing":1,
   "trackMailto":1,
  "trackDownload":1,
  "trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls|xml|z|zip"},
//snip

privacy? 8)7

[ Voor 62% gewijzigd door MBV op 29-01-2011 14:22 ]


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 05-10 08:57

Matis

Rubber Rocket

Uit datzelfde artikel
Volgens de stad is de site zo duur geworden vanwege "hoge eisen van veiligheid en privacy", zo meldt het blad Binnenlands Bestuur.
Onder het kopje veiligheid kun je een zo groot bedrag zetten als je wilt. Sommige mensen zijn zo ontzettend panisch.

Daarnaast heb ik zelf ook nog wel een mooi voorbeeld in het weggooien van (publiekelijk) geld, een beetje in lijn met de OVCK: Wikipedia: Stichting Mechanische Registratie en Administratie

Mijn vader is zelf diaken van een PKN-kerk; Hij heeft zich sinds het begin van de fusie al en-public zorgen gemaakt over de kans van slagen van de SMRA.

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 23:19
Grote WTF op regiohoogeveen.nl: http://www.regiohoogeveen.nl/profiel/registratie/.

HTML:
1
2
3
4
5
<select name="register_geboortejaar">
  <option value="1940">1940</option>
  <option value="1941">1941</option>
(..)
</select>

Je mag blijkbaar niet ouder zijn dan 71 om te registreren daar.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Meh, ik vind dat niet echt schokkend. Je moet ergens grenzen stellen. Bij ieder veld gaat de programmeur bekijken (vaak in overleg met anderen betrokken bij het project) wat de eisen en grenzen zijn. Bij een dergelijk veld als geboortejaar gaat men kijken wat de maximale leeftijd zal zijn van iemand die zich gaat registreren. Dan pakt men een geboortejaar daar ergens in de buurt, zoals 1940.

Mocht het dan ooit voorkomen dat een ouder iemand zich wil registreren dan kan men altijd indien nodig het veld aanpassen, maar de kans dat dat gebeurd is natuurlijk zeer klein.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 23:19
De kans is klein, maar ik probeer mijn oma te registreren en maar dat wil dus niet correct. De moderne manier is een Javascript kalender, maar mensen op zo'n domme manier hun eigen geboortedatum niet meer kunnen laten invullen zou niet meer moeten kunnen in 2011, imho.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

De limiet is echter onnodig. Gebruik gewoon een tekstueel invoerveld, ipv een dropdown. En als je dan tóch een dropdown wilt, genereer dan jaartallen tot 120 jaar terug ofzo.

[ Voor 33% gewijzigd door .oisyn op 30-01-2011 13:35 ]

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.


Acties:
  • 0 Henk 'm!

  • Jegorex
  • Registratie: April 2004
  • Laatst online: 03-09 23:24
Als gemeente zou je toch wel moeten weten hoe oud de oudste inwoner is?

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 23:15
Matis schreef op zaterdag 29 januari 2011 @ 15:10:
Onder het kopje veiligheid kun je een zo groot bedrag zetten als je wilt. Sommige mensen zijn zo ontzettend panisch.
Bij een overheidswebsite komt daar ook wel iets meer bij kijken weet ik uit ervaring. Dat zijn (doorgaans) niet standaard drupal systemen maar uitgebreide CMS + CRM + externe datalinks, inclusief publicatie trajecten (persoon A schrijft content, persoon B controleert inhoud, persoon C publiceert op specifieke pagina's op een bepaald moment, etc), logging (wie heeft wat op welk moment aangepast?), opties voor verschillende content-types (publiceren van word en PDF documenten, content-extractie daarvan zodat ze ook in HTML versies beschikbaar zijn), uitgebreide search engines, controle van beveiliging door een extern bureau, voldoen aan de webrichtlijnen van de overheid, etc.

Plus, als we het over de overheid hebben praten we ook bijna automatisch over lange, tijdrovende aanbestedingsprocedures met meerdere rondes, verschillende offertes en demonstraties, etc. En als het eenmaal geimplementeerd is moet er ook haast altijd nog een tijd trainingen gegeven worden omdat de systemen best complex zijn voor de gemiddelde ambtenaar. Tel je dat allemaal bijelkaar op dan komt er een aardig bedrag uit rollen. Nu is 400k wel wat veel, maar dat een overheidswebsite een stuk duurder is dan een gemiddelde drupal installatie voor een klein bedrijfje is echt niet zo verwonderlijk.

En @ hierboven: typisch een fout die een gespecialiseerd bureau niet zo snel zal maken. Ik heb wel eens wat geanonimiseerde testdata gezien, je zou verbaasd staan over hoeveel mensen van rond de 100 er nog zijn :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02 21:20

.Gertjan.

Owl!

Jegorex schreef op zondag 30 januari 2011 @ 13:45:
Als gemeente zou je toch wel moeten weten hoe oud de oudste inwoner is?
Nice, een dropdown met jaren die je bestand van burgers (realtime) gaat nalopen om te bepalen welke geboortejaren toe zijn gestaan :9. Lijkt me een beetje overkill ;).

Ook is het bij sommige sites/applicaties zo dat je voor het jaartal slechts 2 getallen gebuikt ziet worden (soms alleen in de frontend/invul velden, maar soms zelfs in de database), dan moet een ontwikkelaar ergens het omslagpunt bepalen (bijv < 25 = toekomst > 25 = verleden) en moet je dus of ieder jaar je applicatie aanpassen (kan natuurlijk ook geautomatiseerd) of dus een vast punt nemen. En geloof me de "business" is soms zo koppig dat je ze niet van de 2 digit jaartallen af kunt krijgen...

Daarnaast zijn er toch nog wel wat bestandsspecificaties die bedrijven gebruiken waar ook slechts 2 digits gebruikt worden (vooral bij oude platte tekst specificaties, om ruimte te besparen dacht men slim te zijn door slechts 2 digits te gebruiken)... En die moet je dan maar op goed geluk vertalen naar een 4 cijferig jaartal, maar wanneer je datums in zowel verleden als toekomst hebt kan dat best vervelend zijn (want voor een product is het vanzelfsprekend at 03 voor 2003 staat maar voor een geboorte jaar kan 03 zowel 1903 als 2003 zijn). Daarnaast wil je niet iemand van 103 importeren als iemand van slechts 3 jaar.
Stel dat je overigens een "schuivende" grens gebruikt dan heb je kans dat het inlezen van historische files weer mis kan gaan...

Heb er soms nog nachtmerries van :'(

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
Jegorex schreef op zondag 30 januari 2011 @ 13:45:
Als gemeente zou je toch wel moeten weten hoe oud de oudste inwoner is?
De gemeente zelf waarschijnlijk wel, maar de software leverancier die de opdracht heeft gekregen misschien niet.

Zou ook leuk zijn als het direct uit de database komt.
Als er dan wel iemand in 1930 geboren is en nog leeft maar niet uit 1931 zie je een 'gat' tussen de jaartallen :P

[ Voor 22% gewijzigd door PiepPiep op 30-01-2011 16:20 ]

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Ja, zo zou je zomaar een hele dag bezig kunnen zijn met het optimaliseren van een dropdown. :P

{signature}


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
PiepPiep schreef op zondag 30 januari 2011 @ 16:19:
[...]

De gemeente zelf waarschijnlijk wel, maar de software leverancier die de opdracht heeft gekregen misschien niet.

Zou ook leuk zijn als het direct uit de database komt.
Als er dan wel iemand in 1930 geboren is en nog leeft maar niet uit 1931 zie je een 'gat' tussen de jaartallen :P
haha, inderdaad :P

of je kiest een jaar waarna via AJAX alle geboortedatums van de inwoners in dat jaar worden opgehaald en maand/dag selectievelden worden geupdate.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
"Sorry, maar uw geboortedatum van 12/11/1938 is niet geldig."

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-09 19:10

Macros

I'm watching...

De gemeente weet toch wat je geboortedatum is? Zou je nooit in hoeven vullen als je een inwoner van die gemeente bent of zelfs inwoner van Nederland.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Macros schreef op zondag 30 januari 2011 @ 18:30:
De gemeente weet toch wat je geboortedatum is? Zou je nooit in hoeven vullen als je een inwoner van die gemeente bent of zelfs inwoner van Nederland.
Niet als je nog niet in die gemeente ingeschreven bent en je dit via een formuliertje kunt doen :+. Maar nee, een BSN invullen zou afdoende moeten zijn, in theorie.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Volgens mij is registratie helemaal niet gelimiteerd aan inwoners van de gemeente.

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.


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
YopY schreef op zondag 30 januari 2011 @ 20:21:
[...]


Niet als je nog niet in die gemeente ingeschreven bent en je dit via een formuliertje kunt doen :+. Maar nee, een BSN invullen zou afdoende moeten zijn, in theorie.
Een BSN mag je niet zomaar vragen van gebruikers (staat volgens mij wel ergens in een privacywet), zeker niet voor een site die niet direct gekoppeld is aan de overheid.

We hebben daarvoor wel DigiD waar overheidsinstellingen gebruik van kunnen maken en wat ze ook steeds meer doen.

Acties:
  • 0 Henk 'm!

  • Aloys
  • Registratie: Juni 2005
  • Niet online
YopY schreef op zondag 30 januari 2011 @ 20:21:
[...]
Niet als je nog niet in die gemeente ingeschreven bent en je dit via een formuliertje kunt doen :+. Maar nee, een BSN invullen zou afdoende moeten zijn, in theorie.
Inderdaad, want voor zover ik weet schrijft de gemeente waar je je inschrijft je automatisch uit bij je oude gemeente, die zullen dan wel jouw gegevens kunnen verstrekken. Mogelijk mag dat niet om privacy redenen?

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-09 19:10

Macros

I'm watching...

Alle gemeentes kunnen de gegevens van inwoners van andere gegevens opvragen dmv. gba-v. Maar ja, niet overal is dat al goed geïmplementeerd. Dus in principe zou digid altijd genoeg moeten zijn, maar helaas is dat vaak niet het geval.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 18-01-2023
.oisyn schreef op zondag 30 januari 2011 @ 20:31:
Volgens mij is registratie helemaal niet gelimiteerd aan inwoners van de gemeente.
Ligt er natuurlijk aan wat voor registratie.
Als ik een nieuwe vuilniscontainer wil aanvragen moet ik dat bij mijn eigen gemeente doen.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22

Pagina: 1 ... 48 ... 103 Laatste

Dit topic is gesloten.

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