[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 ... 55 ... 103 Laatste
Acties:
  • 993.653 views

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
RayNbow schreef op woensdag 13 april 2011 @ 07:23:
[...]

Nou, schrijf deze maar eens om naar iets leesbaars:
Python:
1
2
import re
m = re.compile('^((00|11)*(01|10)(11|00)*(10|01))*(00|11)*(01|10)(11|00)*$')

:+
Dit ìs leesbaar.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 09:28

RayNbow

Kirika <3

Durf jij dan met droge ogen te beweren dat je in 1 oogopslag kan zien wat de regexp voorstelt? ;)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
RayNbow schreef op woensdag 13 april 2011 @ 10:50:
[...]

Durf jij dan met droge ogen te beweren dat je in 1 oogopslag kan zien wat de regexp voorstelt? ;)
Eerste oogopslag; het parsed binary string literals.

code:
1
2
3
4
5
6
7
8
9
10
11
^
 (
    (00|11)*
    (01|10)
    (11|00)*
    (10|01)
 )*
 (00|11)*
 (01|10)
 (11|00)*
$


Dat zal 't wel niet zijn; anders had je wel ^(0|1)+$ opgeschreven maar 't is een mooie hypothese om mee te beginnen.

Het is als vragen of jij in een oogopslag ziet wat dit is;

code:
1
2
3
4
5
6
7
8
9
10
Derivative a = evaluate(state, t, 0.0f, Derivative());
Derivative b = evaluate(state, t+dt*0.5f, dt*0.5f, a);
Derivative c = evaluate(state, t+dt*0.5f, dt*0.5f, b);
Derivative d = evaluate(state, t+dt, dt, c);

const float dxdt = 1.0f/6.0f * (a.dx + 2.0f*(b.dx + c.dx) + d.dx);
const float dvdt = 1.0f/6.0f * (a.dv + 2.0f*(b.dv + c.dv) + d.dv)

state.x = state.x + dxdt * dt;
state.v = state.v + dvdt * dt;

[ Voor 6% gewijzigd door PrisonerOfPain op 13-04-2011 11:14 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

Het grote probleem met regexpen is dat je niet kunt zien of het klopt. Je kunt immers niet de intentie zien. Nu kun je er wel commentaar bij zetten, maar wanneer er een verschil is tussen commentaar en regexp is vervolgens de vraag wie gelijk heeft. Is er bug? Is er wat gefixed maar is het commentaar niet aangepast?

Regexpen zijn vaak nodig omdat je bijvoorbeeld een beperkt validatie framework hebt. Regexpen zijn leuk als programmeer piemels om te kijken wie de grootste heeft, maar wanneer je serieus werk wilt maken van de onderhoudbaarheid van je code dan kun je de inzet toch het beste tot een minimum beperken.

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!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Janoz schreef op woensdag 13 april 2011 @ 11:38:
Het grote probleem met regexpen is dat je niet kunt zien of het klopt. Je kunt immers niet de intentie zien. Nu kun je er wel commentaar bij zetten, maar wanneer er een verschil is tussen commentaar en regexp is vervolgens de vraag wie gelijk heeft. Is er bug? Is er wat gefixed maar is het commentaar niet aangepast?
Hetzelfde kun je zeggen over wiskundig of logica gerelateerde problemen. Stel je nu voor dat we die probleem groepen ook maar moeten vermijden?
Regexpen zijn vaak nodig omdat je bijvoorbeeld een beperkt validatie framework hebt. Regexpen zijn leuk als programmeer piemels om te kijken wie de grootste heeft, maar wanneer je serieus werk wilt maken van de onderhoudbaarheid van je code dan kun je de inzet toch het beste tot een minimum beperken.
Om vervolgens zelf een statemachine met substrs, string compares en arbitraire offsets in elkaar te draaien. Nee, bedankt.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

En daarom is het ook jammer dat mijn reactie over EBNF notatie verder niet wordt opgepikt. Het probleem met regexen ligt 'm voornamelijk in de representatie ervan. Strings met gigantisch veel geneste haakjes en escape sequences. Je edit 'm tot je denkt dat ie goed is, maar daarna is ie niet meer leesbaar.

[ Voor 54% gewijzigd door .oisyn op 13-04-2011 12:02 ]

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!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
EBNF notatie zou inderdaad een goed leesbaar alternatief zijn. Zeker omdat je het in kleinere delen opdeelt, is het een stuk overzichtelijker.

“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!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
RayNbow schreef op woensdag 13 april 2011 @ 10:50:
[...]

Durf jij dan met droge ogen te beweren dat je in 1 oogopslag kan zien wat de regexp voorstelt? ;)
Parsed binary string literals, met wat restricties op welke bits elkaar mogen opvolgen. Daarnaast heb je heel erg irritant gedaan door (00|11) en (11|00) door elkaar te gebruiken, zelfde voor (01|10).
code:
1
2
3
4
5
6
7
8
9
10
11
^
 (
    (00|11)*
    (01|10)
    (00|11)*
    (01|10)
 )*
 (00|11)*
 (01|10)
 (00|11)*
$

Dit maakt het al iets leesbaarder. Groepen van gelijke bits van oneven lengte, en daar een even aantal groepen van (2 of meer). Bijvoorbeeld 01, 0111, 010101, 0000010101, of 10001110.

Obfuscation is mogelijk in alle talen :P Als we zouden beginnen met regexes uit te schrijven over meerdere regels met commentaar erin, zou dat de zaak al wel wat verbeteren. En regexen moeten we maar niet afschaffen: in VIM is het af en toe ontzettend handig :Y)
point taken: dat kostte wel een paar minuten om uit te zoeken :X

[ Voor 11% gewijzigd door MBV op 13-04-2011 13:30 ]


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 09:28

RayNbow

Kirika <3

Janoz schreef op woensdag 13 april 2011 @ 11:38:
Het grote probleem met regexpen is dat je niet kunt zien of het klopt. Je kunt immers niet de intentie zien. Nu kun je er wel commentaar bij zetten, maar wanneer er een verschil is tussen commentaar en regexp is vervolgens de vraag wie gelijk heeft. Is er bug? Is er wat gefixed maar is het commentaar niet aangepast?
Mijn regexp heb ik gelukkig niet zelf getikt, maar gegenereerd aan de hand van het volgende:
Afbeeldingslocatie: http://tweakers.net/ext/f/sFY5GzbhiZjQo1kelysT8aqx/full.png
Deze NFA is stukken duidelijker dan de equivalente regexp.

Misschien nog duidelijker is een mogelijke vertaling naar Haskell:
 
Haskell:
1
2
3
4
m :: String -> Bool
m s = and [odd numZeros, odd numOnes, numElse == 0]
  where
    [numZeros, numOnes, numElse] = count [(=='0'), (=='1'), (`notElem` "01")] s


Waarbij ik count als volgt gedefinieerd heb:
 
Haskell:
1
2
3
4
5
6
import Data.List (transpose)
import Control.Monad
import Control.Monad.Instances

count ps [] = map (const 0) ps
count ps s = map (length . filter id) . transpose . map (sequence ps) $ s
.oisyn schreef op woensdag 13 april 2011 @ 12:00:
En daarom is het ook jammer dat mijn reactie over EBNF notatie verder niet wordt opgepikt.
Doel je op iets als dit?
 
Haskell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
-- Based on: http://hpaste.org/25623/ 
--         + http://hpaste.org/25621/
--         + http://paste.lisp.org/display/24849


-- Simpele regexp lib:

import Prelude hiding (id)
import Control.Monad (forM_)
import Control.Category (id, (>>>))
import Control.Arrow (Kleisli(..), (<+>))

star e = id <+> plus e

plus e = e >>> star e

char c = Kleisli $ \s -> [tail s | (not . null) s && head s == c]

dot = Kleisli $ \s -> [tail s | (not . null) s]

string s = (foldr (>>>) id . map char) s

exactMatch e s = [] `elem` runKleisli e s



-- Voorbeeld uit 
-- http://gathering.tweakers.net/forum/list_message/35856033#35856033


postbus = string "postbus"
voorbeeld = star (postbus >>> dot)

ghci> exactMatch voorbeeld ""
True
ghci> exactMatch voorbeeld "postbusA"
True
ghci> exactMatch voorbeeld "postbusApostbusB"
True
ghci> exactMatch voorbeeld "ApostbusB"
False
MBV schreef op woensdag 13 april 2011 @ 13:29:
Parsed binary string literals, met wat restricties op welke bits elkaar mogen opvolgen.
Er is een simpelere uitleg wat deze regexp doet, zie het eerste stukje Haskell code hierboven.
Daarnaast heb je heel erg irritant gedaan door (00|11) en (11|00) door elkaar te gebruiken, zelfde voor (01|10).
Alleen heb ik dat niet zelf gedaan, maar een tool. :)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
Jammer dat andersom vaak niet kan ;)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

PrisonerOfPain schreef op woensdag 13 april 2011 @ 11:57:
Hetzelfde kun je zeggen over wiskundig of logica gerelateerde problemen. Stel je nu voor dat we die probleem groepen ook maar moeten vermijden?
Zoals boven ook aangehaald gaat het niet om de problemen, maar de leesbaarheid. Wanneer je een algoritme implementeert kun je dat een stuk leesbaarder maken door duidelijke variabele namen te gebruiken en stukjes code in aparte methoden implementeren welke je weer een duidelijk beschrijvende naam geeft. Daarnaast kun je in commentaar verwijzen naar de naam van het algoritme of het pattern mocht je daar gebruik van maken. Dat is wezenlijk anders dan de werking van een stuk code 2x beschrijven (1x code en 1x commentaar)
Om vervolgens zelf een statemachine met substrs, string compares en arbitraire offsets in elkaar te draaien. Nee, bedankt.
Het is niet zo zwart wit. Niet elke regexp is enkel te vervangen door een statemachine. Neem het eerder aangehaalde voorbeeld. Wanneer daadwerkelijk de intentie was om te valideren of een string niet met "postbus" begint dan is het veel leesbaarder om gewoon de startsWith methode te gebruiken.

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!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op woensdag 13 april 2011 @ 14:40:
Niet elke regexp is enkel te vervangen door een statemachine.
Volgens mij is dat per definitie wél het geval, maar ik snap wat je bedoelt ;)

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
Janoz schreef op woensdag 13 april 2011 @ 14:40:
[...]

Zoals boven ook aangehaald gaat het niet om de problemen, maar de leesbaarheid. Wanneer je een algoritme implementeert kun je dat een stuk leesbaarder maken door duidelijke variabele namen te gebruiken en stukjes code in aparte methoden implementeren welke je weer een duidelijk beschrijvende naam geeft. Daarnaast kun je in commentaar verwijzen naar de naam van het algoritme of het pattern mocht je daar gebruik van maken. Dat is wezenlijk anders dan de werking van een stuk code 2x beschrijven (1x code en 1x commentaar)
Dit kan met regular expressions ook; je hebt daar comments, newlines en named capturing groups tot je beschikking om het een en ander duidelijker te maken.
Het is niet zo zwart wit. Niet elke regexp is enkel te vervangen door een statemachine. Neem het eerder aangehaalde voorbeeld. Wanneer daadwerkelijk de intentie was om te valideren of een string niet met "postbus" begint dan is het veel leesbaarder om gewoon de startsWith methode te gebruiken.
Complexe statemachines zijn hét veld waarin regular expressions uitblinken, dat ze ook ingezet kunnen worden voor triviale dingen staat buiten kijf. Daarnaast heb je zelf kunnen zien hoe veel pogingen het herschrijven van die code nodig had; enkel door een reactie in de trant van 'ieuw regexen zijn moeilijk'.
.oisyn schreef op woensdag 13 april 2011 @ 14:49:
[...]

Volgens mij is dat per definitie wél het geval, maar ik snap wat je bedoelt ;)
Let op het woord 'enkel' ;)

[ Voor 7% gewijzigd door PrisonerOfPain op 13-04-2011 14:50 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
PrisonerOfPain schreef op woensdag 13 april 2011 @ 14:50:
[...]
Daarnaast heb je zelf kunnen zien hoe veel pogingen het herschrijven van die code nodig had; enkel door een reactie in de trant van 'ieuw regexen zijn moeilijk'.
Mocht die regex precies doen waar hij voor bedoeld is, dan heb je gelijk. Maar het is waarschijnlijker dat deze regex precies het "probleem" aangeeft. En dat is dat regexen veel te vaak gebruikt worden door mensen die niet goed weten waar ze mee bezig zijn, voor zaken die ook op veel eenvoudigere manieren opgelost kunnen worden.

Dat wil niet zeggen dat Regexen altijd vermeden moeten worden, want het is wel degelijk een krachtige tool, maar IMHO laat de leesbaarheid wel degelijk wat te wensen over.

“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!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh stom, ik las 'elleboog' 8)7

:+

[ Voor 4% gewijzigd door .oisyn op 13-04-2011 15:00 ]

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


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Woy schreef op woensdag 13 april 2011 @ 14:55:
[...]

Mocht die regex precies doen waar hij voor bedoeld is, dan heb je gelijk.
Waarom zou dit niet het geval zijn? De code draait immers al een tijd in productie. Ik wil hier niet mee claimen dat er geen bugs in productie voorkomen, echter dat de verhouding tussen goede code en slechte code hopelijk richting goede code neigt ;)
En dat is dat regexen veel te vaak gebruikt worden door mensen die niet goed weten waar ze mee bezig zijn, voor zaken die ook op veel eenvoudigere manieren opgelost kunnen worden.
Lekker bagatelliserend.

[ Voor 5% gewijzigd door PrisonerOfPain op 13-04-2011 15:13 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik zou het liefste alle regexen wegstoppen in een library voor zover die er niet al is, zodat ik alleen die hoef aan te passen en elke keer kan hergebruiken.

Iets als een telefoonnummer is nog wel makkelijk te lezen als regex, maar een geldig e-mailadres is hopeloos:

Perl:
1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


Maar e-mailadressen zijn dan weer een apart geval, omdat blah@blah.bla niet echt bestaat, maar later wel kan bestaan. Dan zou je dus elk TLD moeten invullen, kortom: een enorm gedoe...

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

En dan heb je nog unicode domain names.

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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

.oisyn schreef op woensdag 13 april 2011 @ 14:49:
[...]

Volgens mij is dat per definitie wél het geval, maar ik snap wat je bedoelt ;)
ik snap wat je bedoeld, maar het is voornamelijk "niet enkel" als in "er zijn meer oplossingen dan zelf een statemachine implementeren". Uiteindelijk is een startswith natuurlijk intern ook geimplementeerd middels een state machine (uiteindelijk is de hele computer natuurlijk een Turing machine), maar ik heb meer vertrouwen in een publieke lib dan in een 'enkel voor deze toepassing geschreven' stukje.


Ik bedacht me nog iets anders. Vaak is de coverage van een regexp met standaard tooling nauwelijks te bepalen.

[ Voor 8% gewijzigd door Janoz op 13-04-2011 15:24 ]

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!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Janoz schreef op woensdag 13 april 2011 @ 15:22:
Ik bedacht me nog iets anders. Vaak is de coverage van een regexp met standaard tooling nauwelijks te bepalen.
http://www.regexbuddy.com/
Davio schreef op woensdag 13 april 2011 @ 15:18:
Perl:
1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
Overigens is zelfs dat ding redelijk duidelijk te krijgen als het geen one-line zou zijn.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
(?:
    # match username
    [a-z0-9!#$%&'*+/=?^_`{|}~-]+
    (?:
        \.
        [a-z0-9!#$%&'*+/=?^_`{|}~-]+
    )*
    |
    # match a username in quotes, character set is more permissive
    "
    (?:
        [\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
        |
        \[\x01-\x09\x0b\x0c\x0e-\x7f]
    )*
    "
)
@
(?:
    # match regular domain name
    (?:
        [a-z0-9]
        (?:
            [a-z0-9-]*
            [a-z0-9]
        )?
        \.
    )+
    [a-z0-9]
    (?:
        [a-z0-9-]*
        [a-z0-9]
    )?
    |
    # or match ip4 address
    \[
        (?:
            (?:
                25[0-5]
                | 2[0-4][0-9]
                | [01]?[0-9][0-9]?
            )
            \.
        ){3}
        (?:
            25[0-5]
            | 2[0-4][0-9]
            | [01]?
            | [0-9][0-9]?
            # match address literal
            [a-z0-9-]*
            [a-z0-9]:
            (?:
                [\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
                |
                \[\x01-\x09\x0b\x0c\x0e-\x7f]
            )+
        )
    \]
)

[ Voor 78% gewijzigd door PrisonerOfPain op 13-04-2011 16:04 ]


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ja, vooral de manier om aan te geven: Het moet in de range 0 - 255 liggen met eventuele padding is totaal niet verkracht...

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
PrisonerOfPain schreef op woensdag 13 april 2011 @ 15:12:
[...]
Waarom zou dit niet het geval zijn? De code draait immers al een tijd in productie. Ik wil hier niet mee claimen dat er geen bugs in productie voorkomen, echter dat de verhouding tussen goede code en slechte code hopelijk richting goede code neigt ;)
Als de bedoeling is wat soczol zegt, dan vind ik dat het niet doet waarvoor het bedoeld is.
soczol schreef op dinsdag 12 april 2011 @ 13:39:
[...]


Dat lijkt wel verdomd veel op een regex van SIDN. Die houden er niet van als je een postbus als bedrijfsadres invult. Wij hadden dit in eerste instantie wel.

Toen hebben ze bij de introductie van "DRS5" als oplossing de volgende regular expression toegepast:

code:
1
^((?![P|p]ostbus).)*$.


Ze waren dan ook not amused toen mijn collega daar leuk 'POSTBUS' invulde. Nu hebben ze dat 'opgelost', met jouw regexp tot gevolg ;)
Lekker bagatelliserend.
Dat mag jij vinden, maar ik zie keer op keer problemen met regular expressions langskomen, terwijl een regex in veel gevallen helemaal niet de meest logische oplossing is, en bij de gevallen waar het wel logisch is zie je ook vaak problemen door de leesbaarheid.

Ik heb ook nergens gezegd dat regexen niet handig zijn, of dat je ze ten alle tijden moet proberen te vermijden. Maar als iets ook met een simpele string operatie voor elkaar te krijgen is, heeft dat toch mijn voorkeur qua leesbaarheid.

“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!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

Ik kan er over heen lezen, maar ik lees daar niks over coverage. Ook lees ik niks over dit op kunnen nemen in je CI.

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!

  • Sand0rf
  • Registratie: Oktober 2005
  • Nu online
Vanmiddag een mooie gezien bij een collega projectlid

C#
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void doeIets(DataTable table)
{
     foreach(DataRow row in table.Rows)
    {
         int  i = 0;
         switch(i)
         {
              case 0:
                  doe iets;
                  i++;
                  break;
              ....
              default:
                  doe het standaard ding;
                  break;
         }
    }
}

En dan een uur zoeken waarom hij nooit verder komt dan case 0 _/-\o_

/post


Acties:
  • 0 Henk 'm!

Verwijderd

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void doeIets(DataTable table)
{
     int  i = 0;
     foreach(DataRow row in table.Rows)
    {
         switch(i)
         {
              case 0:
                  doe iets;
                  i++;
                  break;
              ....
              default:
                  doe het standaard ding;
                  break;
         }
    }
}

Problem "solved".

Je kan in dit geval het beste gewoon een for-lus gebruiken :+

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 03-10 16:23

Matis

Rubber Rocket

Verwijderd schreef op woensdag 13 april 2011 @ 19:07:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void doeIets(DataTable table)
{
     int  i = 0;
     foreach(DataRow row in table.Rows)
    {
         switch(i)
         {
              case 0:
                  doe iets;
                  i++;
                  break;
              ....
              default:
                  doe het standaard ding;
                  break;
         }
    }
}

Problem "solved".

Je kan in dit geval het beste gewoon een for-lus gebruiken :+
Ik probeer ook foreach te vermijden, zeker omdat ik 9 uit 10 ook nog een index nodig heb. Dat neemt overigens niet weg dat het een lelijk programmeervoorbeeld is :+

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


Acties:
  • 0 Henk 'm!

Verwijderd

Meestal gebruik ik LINQ, en als dat niet kan foreach en als ik daadwerkelijk een index nodig heb een for-lus.

C#:
1
2
3
4
foreach(var t in from i in items where i.getal > 10 select i)
{
//doe iets
}


Dit kan je in mijn geval wel eens tegenkomen.

[ Voor 40% gewijzigd door Verwijderd op 13-04-2011 19:21 ]


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
LINQ, heerlijk. Zoveel handigheidjes. :)

.Any() vind ik ook handig.

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 18-09 16:32
Davio schreef op woensdag 13 april 2011 @ 15:18:
Ik zou het liefste alle regexen wegstoppen in een library voor zover die er niet al is, zodat ik alleen die hoef aan te passen en elke keer kan hergebruiken.

Iets als een telefoonnummer is nog wel makkelijk te lezen als regex, maar een geldig e-mailadres is hopeloos:

Perl:
1
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


Maar e-mailadressen zijn dan weer een apart geval, omdat blah@blah.bla niet echt bestaat, maar later wel kan bestaan. Dan zou je dus elk TLD moeten invullen, kortom: een enorm gedoe...
Heb je deze variant nog nooit gezien? (uit de RFC meen ik)
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Je kunt natuurlijk ook even de pagina lezen waar je naar linkt. De RFC geeft natuurlijk geen regexps, en deze regexp matcht an sich niet alle legale mailadressen:
This regular expression will only validate addresses that have had any comments stripped and replaced with whitespace (this is done by the module).

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Janoz:
Ik kan er over heen lezen, maar ik lees daar niks over coverage. Ook lees ik niks over dit op kunnen nemen in je CI.
Is dat echt nodig? Is dat niet net zo iets als de coverage van een library opnemen in je CI, terwijl je weet dat de library stable is? Of ben je daar juist ook voor?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Alex) schreef op woensdag 13 april 2011 @ 20:10:
LINQ, heerlijk. Zoveel handigheidjes. :)

.Any() vind ik ook handig.
Ja, ik gebruik zelf vaker de "kleine" methodes in plaats van volledige expressies.

Voorbeeld:
C#:
1
2
3
4
5
6
7
8
9
// Dit doe ik dus niet
var foo = from i in items where i.getal > 10 select i;

// Dit dus wel
var foo = items.Where(i => i.getal > 10);

// Je kan ook aan elkaar knopen
var foo = items.Where(i => i.getal > 10).OrderBy(i => i.naam);
// Nadeel is dat je twee keer een soortgelijke lambda-expressie gebruikt

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Enfer schreef op woensdag 13 april 2011 @ 20:14:
[...]


Heb je deze variant nog nooit gezien? (uit de RFC meen ik)
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Die zocht ik in eerste instantie, maar kon hem zo snel niet vinden, wat een monster.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 03-10 12:49

Janoz

Moderator Devschuur®

!litemod

drm schreef op woensdag 13 april 2011 @ 21:55:
[...]
Is dat echt nodig? Is dat niet net zo iets als de coverage van een library opnemen in je CI, terwijl je weet dat de library stable is? Of ben je daar juist ook voor?
Nee, wanneer een regexp daadwerkelijk onderdeel uitmaakt van je code dan hoort hij imho ook goed getest te zijn. Als het je eigen regexp is dan weet je immers helemaal niet of hij wel stable is. Als ik zelf een email regexp in elkaar gefietst heb dan ben je er niet wanneer een unittest de regexp regel geraakt heeft. Je zou er pas moeten zijn wanneer een groot gedeelte van de randgevallen ook getest zijn. Het is dan ook wel interessant wanneer je daadwerkelijk een soort branche coverage van een regexp zou kunnen meenemen.

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!

Verwijderd

Davio schreef op woensdag 13 april 2011 @ 22:15:
[...]

Ja, ik gebruik zelf vaker de "kleine" methodes in plaats van volledige expressies.

Voorbeeld:
C#:
1
2
3
4
5
6
7
8
9
// Dit doe ik dus niet
var foo = from i in items where i.getal > 10 select i;

// Dit dus wel
var foo = items.Where(i => i.getal > 10);

// Je kan ook aan elkaar knopen
var foo = items.Where(i => i.getal > 10).OrderBy(i => i.naam);
// Nadeel is dat je twee keer een soortgelijke lambda-expressie gebruikt
Ik had laatst een mooie.

C#:
1
2
3
4
5
var items = (from i in array1 
                  where i.getal > 10 
                  select new { Name = i.Name, BirthDate = i.BirthDate}).Union(from i in array2
                                                                                                          where i.getal > 10 
                                                                                                           select new { Name = i.Name, BirthDate = i.BirthDate }).Distinct();


Maar dan natuurlijk wel anders :p
Korte notatie gebruik ik alleen wanneer dat het beste uitkomt. Maar volledig uitschrijven is nuttig als je een écht lange LINQ-query hebt. (Met sub-querys en annonieme typen die je dan in een Union aan elkaar koppelt).

Maar weer ff ontopic, LINQ is geen slecht programmeervoorbeeld. Juist een heel goede.
C#:
1
2
3
4
5
6
7
8
9
10
11
            try
            {
                if (txtHex.Text.Length == 7)
                {
                    Color c = HexNaarKleur(txtHex.Text);
                    Color = c;
                }
            }
            catch
            {
            }

Van eigen hand XD. Het is niet zozeer een fout, maar het is wel slecht.

Beter
C#:
1
2
            if (txtHex.TextLength == 7)
                Color = HexNaarKleur(txtHex.Text);

[ Voor 38% gewijzigd door Verwijderd op 13-04-2011 23:02 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Janoz:
Nee, wanneer een regexp daadwerkelijk onderdeel uitmaakt van je code dan hoort hij imho ook goed getest te zijn. Als het je eigen regexp is dan weet je immers helemaal niet of hij wel stable is. Als ik zelf een email regexp in elkaar gefietst heb dan ben je er niet wanneer een unittest de regexp regel geraakt heeft. Je zou er pas moeten zijn wanneer een groot gedeelte van de randgevallen ook getest zijn. Het is dan ook wel interessant wanneer je daadwerkelijk een soort branche coverage van een regexp zou kunnen meenemen.
Ja daar zit wel wat in ja... Zou wel interessant zijn idd.

Ik weet er het fijne niet van maar volgens mij zijn regexen met de meeste engines te compilen. Waar dat dan precies naartoe compilet weet ik niet, maar het zal wel iets van een intermediate bytecode zijn die dan ook op coverage geanalyseerd moet kunnen worden. Wel interessant idee.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Laatst online: 07:16

BM

Moderator Spielerij
Verwijderd schreef op woensdag 13 april 2011 @ 22:51:
[...]

Ik had laatst een mooie.

[code=c#]
C#:
1
2
3
4
5
6
7
8
9
10
11
            try
            {
                if (txtHex.Text.Length == 7)
                {
                    Color c = HexNaarKleur(txtHex.Text);
                    Color = c;
                }
            }
            catch
            {
            }

Van eigen hand XD. Het is niet zozeer een fout, maar het is wel slecht.

Beter
C#:
1
2
            if (txtHex.TextLength == 7)
                Color = HexNaarKleur(txtHex.Text);
Vind ik nu niet zo spannend eigenlijk, die ene variabele die je weglaat had de compiler ook wel voor je verwijderd.

Vind het vreemder dat je een 7karakters lange string per definitie gebruikt als zijne een hex waarde. Tenzij HexNaarKleur dat nog checked, maar dan zie ik helemaal niet wat er nu zo vreemd is aan die code.

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

Verwijderd

De try..catch is geheel overbodig ;)

En ja die controle zit in HexNaarKleur.

Acties:
  • 0 Henk 'm!

  • Davio
  • Registratie: November 2007
  • Laatst online: 06-01 16:46
Ik vind dat niet echt een zaak van HexNaarKleur om te controleren.
Ik zou doen:

C#:
1
2
3
4
5
6
7
8
9
10
11
string possibleHex = txtHex.Text;
if(IsValidHex(possibleHex)) 
    Color = HexNaarKleur(possibleHex);

private bool IsValidHex(string possibleHex)
{
    // IsNullOrEmpty is met de regex overbodig, maar misschien sneller
    return !string.IsNullOrEmpty(possibleHex) && 
              Regex.IsMatch(possibleHex, @"^#[A-Fa-f0-9]{6}$");
    // Moet # escaped worden? Geen idee...
}


Dan vraag ik me af of je hier goed een MaskedTextBox voor kunt gebruiken...

[ Voor 4% gewijzigd door Davio op 14-04-2011 10:10 ]


Acties:
  • 0 Henk 'm!

  • DEiE
  • Registratie: November 2006
  • Laatst online: 29-09 16:32
Verwijderd schreef op woensdag 13 april 2011 @ 22:51:
[...]
Beter
C#:
1
2
            if (txtHex.TextLength == 7)
                Color = HexNaarKleur(txtHex.Text);
Bah, nederlands en engels door elkaar

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Davio:
Ik vind dat niet echt een zaak van HexNaarKleur om te controleren.
Dus elke aanroep moet zelf checken of hij wel goede parameters aan de call meegeeft? Dat lijkt me nou typisch een voorbeeld van iets wat de verantwoordelijkheid is van de method zelf. Je kunt er gewoon de standaard InvalidArgumentException voor throwen. Mooi gevalletje Law of Demeter.

Ik zou uberhaupt helemaal niet over HEX waardes spreken, misschien wil je later nog wel rgb(...) of rgba(...) notaties introduceren... 't Is gewoon een string die geïnterpreteerd moet worden als kleur. Wat er in die string zit en of die method er iets mee kan moet die method zelf maar zien.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Davio schreef op donderdag 14 april 2011 @ 10:09:
Ik vind dat niet echt een zaak van HexNaarKleur om te controleren.
Ik zou doen:

C#:
1
2
3
4
5
6
7
8
9
10
11
string possibleHex = txtHex.Text;
if(IsValidHex(possibleHex)) 
    Color = HexNaarKleur(possibleHex);

private bool IsValidHex(string possibleHex)
{
    // IsNullOrEmpty is met de regex overbodig, maar misschien sneller
    return !string.IsNullOrEmpty(possibleHex) && 
              Regex.IsMatch(possibleHex, @"^#[A-Fa-f0-9]{6}$");
    // Moet # escaped worden? Geen idee...
}


Dan vraag ik me af of je hier goed een MaskedTextBox voor kunt gebruiken...
Grappig, ik vroeg me gisteravond precies hetzelfde af :+ Het grappige is dat dit origineel uit .NET 1.1 komt. Toen was er nog geen MaskedTextBox ;)

De code gaat uiteindelijk naar:
ColorTranslator.FromHtml(hex);
drm schreef op donderdag 14 april 2011 @ 10:36:
[...]
Dus elke aanroep moet zelf checken of hij wel goede parameters aan de call meegeeft? Dat lijkt me nou typisch een voorbeeld van iets wat de verantwoordelijkheid is van de method zelf. Je kunt er gewoon de standaard InvalidArgumentException voor throwen. Mooi gevalletje Law of Demeter.

Ik zou uberhaupt helemaal niet over HEX waardes spreken, misschien wil je later nog wel rgb(...) of rgba(...) notaties introduceren... 't Is gewoon een string die geïnterpreteerd moet worden als kleur. Wat er in die string zit en of die method er iets mee kan moet die method zelf maar zien.
Het is voor een parser van HTML kleurcodes ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je zit dus al een niveau'tje lager, bedoel je? Dat vroeg ik me nog af nadat ik had gepost :P Ik had eigenlijk te weinig context om de opmerking te kunnen maken die maakte, besefte ik te laat :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Noem het dan HtmlNaarKleur oid.

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!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

.oisyn schreef op donderdag 14 april 2011 @ 10:57:
Noem het dan HtmlNaarKleur oid.
Als je dat doet moet je ook kleuren als "blue", "red", "green" etc accepteren en niet alleen de hex-notatie met 6 chars (want #FFF is natuurlijk ook correct)

Acties:
  • 0 Henk 'm!

Verwijderd

Erkens schreef op donderdag 14 april 2011 @ 11:00:

Als je dat doet moet je ook kleuren als "blue", "red", "green" etc accepteren en niet alleen de hex-notatie met 6 chars (want #FFF is natuurlijk ook correct)
Color.FromName B)

Acties:
  • 0 Henk 'm!

Verwijderd

Yep
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
        /// <summary>
        /// Conventeer een html waarde naar een .Net Color object.
        /// </summary>
        /// <param name="html">Hexwaarde (met of zonder #) van de Color</param>
        /// <returns>.NET Color object</returns>
        public Color HtmlToColor(string html)
        {
            if (!html.StartsWith("#")) html = "#" + html;
            if (Regex.IsMatch(html, @"^#[A-Fa-f0-9]{3,6}$"))
            {
                return ColorTranslator.FromHtml(html);
            }
            else
            {
                html = html.Substring(1);
                try
                {
                    return Color.FromName(html);
                }
                catch
                {
                    return Color.Empty;
                }
            }
        }


Overal aan gedacht :+

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Erkens schreef op donderdag 14 april 2011 @ 11:00:
[...]

Als je dat doet moet je ook kleuren als "blue", "red", "green" etc accepteren en niet alleen de hex-notatie met 6 chars (want #FFF is natuurlijk ook correct)
True. HtmlKleurcodeNaarKleur dan. "hex" slaat gewoon nergens op ("#" is geen geldig hexadecimaal karakter).

[ Voor 11% gewijzigd door .oisyn op 14-04-2011 11:37 ]

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


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

sanderev66:
C#:
1
2
3
4
5
6
7
public Color HtmlToColor(string html)
        {
            if (!html.StartsWith("#")) html = "#" + html;
            /* ..snip.. */
                html = html.Substring(1);
            /* ..snip.. */
        }
Waarom check je niet gewoon in je regexp of er wel of niet begonnen wordt met een hekje :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Zodat zowel FFFFFF als #FFFFFF correcte invoer is voor de ColorTranslator die dus wel de # nodig heeft.

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 03-10 09:39

Patriot

Fulltime #whatpulsert

Verwijderd schreef op donderdag 14 april 2011 @ 14:52:
Zodat zowel FFFFFF als #FFFFFF correcte invoer is voor de ColorTranslator die dus wel de # nodig heeft.
Dan kun je dat hekje toch gewoon optioneel maken in je regex :?

Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
code:
1
"^#?[A-Fa-f0-9]{3,6}$"


?

Acties:
  • 0 Henk 'm!

Verwijderd

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Color HtmlToColor(string html)
{
    if (Regex.IsMatch(html, @"^#?[A-Fa-f0-9]{3,6}$"))
    {
        return ColorTranslator.FromHtml(html);
    }
    else
    {
        try
        {
            return Color.FromName(html);
        }
        catch
        {
            return Color.Empty;
        }
    }
}


Dit gaat fout als html "FFFFFF" is, de regex gaat goed maar de ColorTranslator geeft een exception.

Dan kán ik natuurlijk nog dit doen, maar dan heb ik ong. hetzelfde als eerst:
C#:
1
return ColorTranslator.FromHtml(html.StartsWith("#") ? html : "#" + html);

[ Voor 15% gewijzigd door Verwijderd op 14-04-2011 15:10 ]


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
hm. wat gebeurt er eigenlijk met FFFF en FFFFF? worden die gewoon gepad? en zoja, waarom zou je dan het onderste limiet behouden..

edit:: omdat ik toch verwacht dat je alléén de cases met 3 of 6 symbolen wilt stel ik de volgende regex voor:

code:
1
"^#?[A-Fa-f0-9]{3}{1,2}$"

[ Voor 37% gewijzigd door kaesve op 14-04-2011 22:35 ]


Acties:
  • 0 Henk 'm!

  • Makkelijk
  • Registratie: November 2000
  • Laatst online: 09:17
Over magic numbers gesproken. I did this:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$iStrLen = strlen($iNumber);

switch($iSize) {
    case 1:
    $fFontSizeBase = 2.2;
    break;
    case 2:
    $fFontSizeBase = 2.7;
    break;
    case 3:
    $fFontSizeBase = 3.3;
    break;
    case 4:
    $fFontSizeBase = 3.9;
    break;
    case 5:
    $fFontSizeBase = 4.4;
    break;
    case 6:
    $fFontSizeBase = 5;
    break;
}

$fFontSizeBase -= ($iStrLen-1)/(3-0.5*($iSize-3));

//Breedte tekst schatten
$fTextWidth  = $fFontSizeBase * 3 * $iStrLen;
$fTextHeight = $fFontSizeBase * 4;

$oImage =   imagecreatefrompng($sIconDir."cluster-$iSize.png");
imagesavealpha($oImage, true);

$iX = floor(($iWidth / 2)  - ($fTextWidth  / 2)-(floor($fFontSizeBase/2)));
$iY = floor(($iHeight / 2) + ($fTextHeight / 2));


:F

Badieboediemxvahajwjjdkkskskskaa


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 03-10 10:15
Die 2'tjes had je makkelijk kunnen vervangen door "HALF" ja :+

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
kaesve schreef op donderdag 14 april 2011 @ 15:14:
hm. wat gebeurt er eigenlijk met FFFF en FFFFF? worden die gewoon gepad? en zoja, waarom zou je dan het onderste limiet behouden..

edit:: omdat ik toch verwacht dat je alléén de cases met 3 of 6 symbolen wilt stel ik de volgende regex voor:

code:
1
"^#?[A-Fa-f0-9]{3}{1,2}$"
Minder dan 3, 4, 5 of meer dan 6 letters in een kleurnotatie zijn geen geldige kleur. Ik gok dat de Color.FromName ook zal falen en dus wordt de Color.Empty terug gegeven.

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 08:48
HuHu schreef op dinsdag 19 april 2011 @ 18:04:
[...]

Minder dan 3, 4, 5 of meer dan 6 letters in een kleurnotatie zijn geen geldige kleur. Ik gok dat de Color.FromName ook zal falen en dus wordt de Color.Empty terug gegeven.
RGBA is toch ook geldig?

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 03-10 07:09
In CSS kun je kleurcodes met alpha- channel niet schrijven als hexadecimaal getal.

Alleen #[0-9A-Fa-f]{3,6} is geldig. Kleurcodes met alpha moet je specificeren met rgba().

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

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 03-10 14:13
Ik had hier zojuist ook een leuke

PHP:
1
$db = new Zend_Db::factory('pdo_mysql', array( /* DB gegevens */ ) );


En ik een half uur zitten zoeken naar die ene syntax error. >_>

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Jaap-Jan schreef op dinsdag 19 april 2011 @ 18:20:
[...]

In CSS kun je kleurcodes met alpha- channel niet schrijven als hexadecimaal getal.
Wat overigens weinig moeite zou zijn, lijkt me althans, om ook als geldig te accepteren.
#RGBA of #RRGGBBAA is makkelijk te onderscheiden van #RGB en #RRGGBB

Nu is alpha een 0..1 value, maar een 0..255 is natuurlijk prima te interpoleren naar 0..1

Er is overigens wel over nagedacht maar besloten 't niet (meer) mee te nemen in de spec.

[ Voor 15% gewijzigd door RobIII op 19-04-2011 18:34 ]

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


Acties:
  • 0 Henk 'm!

Verwijderd

X_lawl_X schreef op dinsdag 19 april 2011 @ 18:25:
Ik had hier zojuist ook een leuke

PHP:
1
$db = new Zend_Db::factory('pdo_mysql', array( /* DB gegevens */ ) );


En ik een half uur zitten zoeken naar die ene syntax error. >_>
Die is toch wel heel erg... Ken je design patterns (en syntax). :+

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 03-10 14:13
Verwijderd schreef op dinsdag 19 april 2011 @ 18:37:
[...]

Die is toch wel heel erg... Ken je design patterns (en syntax). :+
mwah, was gewoon toe aan koffie. :+

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

RobIII schreef op dinsdag 19 april 2011 @ 18:32:
Nu is alpha een 0..1 value, maar een 0..255 is natuurlijk prima te interpoleren naar 0..1
R, G en B zijn ook 0..1 values.

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
RobIII schreef op dinsdag 19 april 2011 @ 18:32:
Er is overigens wel over nagedacht maar besloten 't niet (meer) mee te nemen in de spec.
Wat een groep zachte eitjes zeg.
The working group discussed the addition of new features to
css3-color and decided that no new features should be added at this
time; rather, the draft should be advanced with its current feature
set, which is at this point widely implemented. New features will
be considered for the next level of the CSS color module.
Het is toch een draft met een reden?

En verderop
I really don't see how you can say it's not a feature. A new syntax
for the same thing is a feature. It would still delay the spec
advancing to recommendation, since there are not two interoperable
implementations of the feature.
En
It's not trivial to ship that in already-released browsers.
:X Blij dat 't niet m'n baan is.

[ Voor 21% gewijzigd door PrisonerOfPain op 19-04-2011 20:56 ]


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Maar zo heel vreemd is het niet. Het lijkt triviaal, maar voor een goede spec hebben dat soort dingen gewoon even tijd nodig. Hoe gaan huidige browsers bijvoorbeeld #rgba interpreteren als ze alleen #rgb en #rrggbb ondersteunen? Als je je richt op een final draft dan zijn dat soort nieuwe features niet handig.

Maar wat ik persoonlijk nogal raar vind is dat niemand hier eerder over na heeft gedacht.

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!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Kom ik nu net tegen in een database... niet door ons gemaakt overgens.

code:
1
2
3
4
5
id          int(11)
...
code        varchar(255)
percentage  varchar(255)
parent_id   varchar(255)

Waarbij "code" nooit meer dan 4 tekens bevat, en "percentage" alleen 1 tot 100%... De "parent_id" bevat ook spaties, punten, comma's en alle andere willekeurige tekens; die zorgt voor de JOIN met een andere tabel. :')


Ook leuk, de "Products" tabel (van de webshop) bevat een nieuw record voor elke kleur/maat combinatie...

Shirt_1 / Maat L / Rood
Shirt_1 / Maat XL / Rood
Shirt_1 / Maat XXL / Rood
Shirt_1 / Maat L / Blauw
Shirt_1 / Maat XL / Blauw
Shirt_1 / Maat XXL / Blauw

[ Voor 25% gewijzigd door OkkE op 20-04-2011 09:35 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op dinsdag 19 april 2011 @ 21:16:
Maar zo heel vreemd is het niet. Het lijkt triviaal, maar voor een goede spec hebben dat soort dingen gewoon even tijd nodig. Hoe gaan huidige browsers bijvoorbeeld #rgba interpreteren als ze alleen #rgb en #rrggbb ondersteunen? Als je je richt op een final draft dan zijn dat soort nieuwe features niet handig.
Prima, maar de argumenten die aangehaald werden leken er op te duiden dat het te veel werk was (prima, er moet een paragraaf geschreven worden over hoe het werkt, er moet een syntax definitie voor komen, en er moet waarschijnlijk weken over gepraat worden of het rgba of argb moet zijn). Verder word er gezegt dat, ondanks dat het geen final document is, er niets meer aan toe kan worden gevoegt omdat huidige browsers de boel al geimplementeerd hebben. Waarom zou je dan uberhaupt nog een TR of final draft op willen stellen? Ik snap dat ze niet alle 'triviale' features kunnen toevoegen aan de spec; immers iedere feature kost x uur en als er genoeg features zijn komen ze nooit aan een final document. Maar een feature als deze, die er eigenlijk al in had moeten zitten sinds het toevoegen van alpha channel support aan CSS, zou er wmb tòch wat anders naar gekeken moeten worden.

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

OkkE schreef op woensdag 20 april 2011 @ 09:32:
Kom ik nu net tegen in een database... niet door ons gemaakt overgens.

code:
1
2
3
4
5
id          int(11)
...
code        varchar(255)
percentage  varchar(255)
parent_id   varchar(255)

Waarbij "code" nooit meer dan 4 tekens bevat, en "percentage" alleen 1 tot 100%... De "parent_id" bevat ook spaties, punten, comma's en alle andere willekeurige tekens; die zorgt voor de JOIN met een andere tabel. :')


Ook leuk, de "Products" tabel (van de webshop) bevat een nieuw record voor elke kleur/maat combinatie...

Shirt_1 / Maat L / Rood
Shirt_1 / Maat XL / Rood
Shirt_1 / Maat XXL / Rood
Shirt_1 / Maat L / Blauw
Shirt_1 / Maat XL / Blauw
Shirt_1 / Maat XXL / Blauw
Dat hoeft niet per definitie fout te zijn... Vaak hebben die ook eigen product codes dus is het vrij logisch om ze als losstaande entiteiten te zien. Het is nu wel lastiger ze te groeperen, maar echt heel erg fout vind ik het niet.

Binnen ERP pakketen als Axapta werkt het ook zo en kun je op dimensie niveau dingen als maat en kleur inregelen, maar iedere productcombinatie heeft een eigen record in de database.

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!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Van:
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
procedure TF_Frm_FooForm.medatum1Exit(Sender: TObject);
begin
   if (Pos('/', Trim(MeDatum1.text)) <> 1) then
   begin
      try
         strtodate(MeDatum1.text);
      except
         showmessage('Invalid date!');
         MeDatum1.SetFocus;
      end;
   end;
end;

/* knip 250 regels */

procedure TF_Frm_FooForm.metm8Exit(Sender: TObject);
begin
   if (Pos(':', Trim(MeTm8.text)) <> 1) then
   begin
      try
         strtotime(MeTm8.text);
      except
         showmessage('Invalid time!');
         MeTm8.SetFocus;
      end;
   end;
end;


Naar:
Delphi:
1
2
3
4
5
6
7
8
9
procedure TF_Frm_FooForm.TimeMaskEditExit(Sender: TObject);
begin
  TFooClass.ControleerTijd(Sender as TMaskEdit);
end;

procedure TF_Frm_FooForm.DateMaskEditExit(Sender: TObject);
begin
  TFooClass.ControleerDatum(Sender as TMaskEdit);
end;


<rage.jpg>

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


Acties:
  • 0 Henk 'm!

  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

OkkE schreef op woensdag 20 april 2011 @ 09:32:
Ook leuk, de "Products" tabel (van de webshop) bevat een nieuw record voor elke kleur/maat combinatie...

Shirt_1 / Maat L / Rood
Shirt_1 / Maat XL / Rood
Shirt_1 / Maat XXL / Rood
Shirt_1 / Maat L / Blauw
Shirt_1 / Maat XL / Blauw
Shirt_1 / Maat XXL / Blauw
Niet "vreemd", maar eigenlijk vrij normaal. Dit kan gezien worden als een (soort van) SKU:
Warehousing item that is unique because of some characteristic (such as brand, size, color, model) and must be stored and accounted for separate from other items. Every SKU is assigned a unique identification number (inventory or stock number) which is often the same as (or is tied to) the item's EAN or UPC.
Alhoewel als je het echt "goed" wilt doen in geval van bovenstaande kleding shop je bijvoorbeeld zoiets krijgt als:

Products

product_id
ean
brand
description

SKUs

product_id
sku_id
color
size

[ Voor 11% gewijzigd door mindcrash op 20-04-2011 11:16 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

.Gertjan. schreef op woensdag 20 april 2011 @ 10:38:
Dat hoeft niet per definitie fout te zijn... Vaak hebben die ook eigen product codes dus is het vrij logisch om ze als losstaande entiteiten te zien. Het is nu wel lastiger ze te groeperen, maar echt heel erg fout vind ik het niet.
mindcrash schreef op woensdag 20 april 2011 @ 11:12:
Niet "vreemd", maar eigenlijk vrij normaal. Dit kan gezien worden als een (soort van) SKU:
Oke, voor elk product een nieuw record heeft dan nog wel een aantal voordelen.

Maar de hele website/webshop is verder echt één drama, o.a. dus een VARCHAR (de merknaam (incl. spaties, punten, comma's, etc)) als Primary Key, waar JOINs mee gedaan worden.

Verder staan alle Categorieën niet in de database, maar als Array in PHP (op vier verschillende plekken). Staan de database gegevens in een "config.xml" in de webroot, staan alle HTML URLs hard-coded in een XML file...

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

OkkE schreef op woensdag 20 april 2011 @ 11:34:

Maar de hele website/webshop is verder echt één drama een uitdaging waarin ik me helemaal kan geven , o.a. dus een VARCHAR (de merknaam (incl. spaties, punten, comma's, etc)) als Primary Key, waar JOINs mee gedaan worden.
There, I fixed it for you :Y)
Bugs en issues bestaan toch niet in de ICT wereld, we kennen alleen kansen en uitdagingen toch :)

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!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Jij bent een échte manager, Gertjan. :P

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 woensdag 20 april 2011 @ 12:02:
Jij bent een échte manager, Gertjan. :P
Ik zal hem meenemen bij mijn volgende functioneringsgesprek. "Zelfs op het internet vind men dat ik een manager ben, wordt het niet eens tijd voor een promotie" :9

En tja "het internet" heeft altijd gelijk :D

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!

  • omgwtfbbq
  • Registratie: Juli 2007
  • Laatst online: 03-10 18:35
en een pareltje van eigen hand...

C#:
1
2
3
4
5
6
7
8
if (geselecteerdeVraag.statusAsString.Equals("Ingediend"))
                    {
                        m_view.geefMenuModuleContext().enableCommandWithName("cmdToewijzen");
                    }
                    else
                    {
                        m_view.geefMenuModuleContext().enableCommandWithName("cmdToewijzen");
                    }


Kwam 'm toevallig tegen, snel maar even weggehaald :$

Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 01-10 11:28

mOrPhie

❤️❤️❤️❤️🤍

Hehe, netjes. :P

Overigens zou ik ook kijken naar constanten, enums en het goed gebruik om niet nederlands en engels door elkaar te programmeren. ;)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 08:48
mOrPhie schreef op woensdag 20 april 2011 @ 15:06:
Hehe, netjes. :P

Overigens zou ik ook kijken naar constanten, enums en het goed gebruik om niet nederlands en engels door elkaar te programmeren. ;)
Ik zie een nieuwe domein wel of niet Engels discussie aankomen ^^ :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op dinsdag 19 april 2011 @ 20:00:
[...]

R, G en B zijn ook 0..1 values.
Uh, d'uh. Ja. My bad. Ik doelde op rgba(255, 255, 255, 1) maar het is natuurlijk allemaal uiteindelijk een representatie van 0..1, 0..255, 0..ff, net wat je leuk vindt.

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


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat, wil je zeggen dat in de rgba(r,g,b,a) syntax de r,g en b wel gewoon van 0 tot 255 lopen maar a niet :? 8)7

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!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 18-09 16:32
ValHallASW schreef op woensdag 13 april 2011 @ 21:50:
[...]

Je kunt natuurlijk ook even de pagina lezen waar je naar linkt. De RFC geeft natuurlijk geen regexps, en deze regexp matcht an sich niet alle legale mailadressen:

[...]
Ik gaf ook niet aan dat het een perfecte regexp is, ik gaf alleen een leuke grote regex aan ;) Er bestaan amper perfecte regexes voor e-mailadressen.. ;)

offtopic:
Aannames maken als Software Engineer is bijna per definitie fout :9

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op woensdag 20 april 2011 @ 19:25:
Wat, wil je zeggen dat in de rgba(r,g,b,a) syntax de r,g en b wel gewoon van 0 tot 255 lopen maar a niet :? 8)7
Blijkbaar is het toch een goed idee om ze daar wat langer over de #AARRGGBB notatie na te laten denken :X

Acties:
  • 0 Henk 'm!

  • HeSitated
  • Registratie: April 2009
  • Laatst online: 03-12-2024
Verwijderd schreef op donderdag 14 april 2011 @ 10:38:
De code gaat uiteindelijk naar:
ColorTranslator.FromHtml(hex);
Wat ik vreemd vind, is dat hier geen TryParse c.q. TryParseExact methods voorhanden zijn... :?

Acties:
  • 0 Henk 'm!

Verwijderd

PrisonerOfPain schreef op woensdag 20 april 2011 @ 19:49:
[...]


Blijkbaar is het toch een goed idee om ze daar wat langer over de #AARRGGBB notatie na te laten denken :X
Alpha gaat wel gewoon van 0 tot 255 ;)

MSDN: Color.A Property (System.Drawing)

Want mocht je het nog niet weten 0...255 is precies 1 byte.

[ Voor 25% gewijzigd door Verwijderd op 20-04-2011 21:04 ]


Acties:
  • 0 Henk 'm!

  • Light
  • Registratie: Augustus 2000
  • Niet online
.oisyn schreef op woensdag 20 april 2011 @ 19:25:
Wat, wil je zeggen dat in de rgba(r,g,b,a) syntax de r,g en b wel gewoon van 0 tot 255 lopen maar a niet :? 8)7
In de css-specs loopt de a van 0..1. Voor r, g en b kun je 0..255 en 0%..100% gebruiken, dat komt netjes overeen met de gewone rgb() kleuren.
Maar je kunt ook hsl (en hsla)-kleuren gebruiken.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Light schreef op woensdag 20 april 2011 @ 22:27:
[...]

In de css-specs loopt de a van 0..1. Voor r, g en b kun je 0..255 en 0%..100% gebruiken, dat komt netjes overeen met de gewone rgb() kleuren.
Dat slaat dan dus ook weer echt nergens op. Waarom is alpha een waarde tussen 0 en 1 maar zijn de kleurwaarden tussen 0 en 255?
Verwijderd schreef op woensdag 20 april 2011 @ 20:57:
[...]

Alpha gaat wel gewoon van 0 tot 255 ;)
Dus omdat je 1 specifieke API quote is het zo? Kleurcomponenten (inclusief alpha) interpoleren gewoon tussen helemaal uit en helemaal aan, ongeacht de gebruikte granulariteit. Tussen 0 en 1 dus. Door elk component met een byte te representeren krijg je dus 0 tot 255, maar dat hoeft helemaal niet. 16 bits per component kleurformaten schalen van 0 tot 65535, maar ook andere formaten zijn mogelijk (zoals het veelgebruikte 5-6-5 in het 16 bits kleur tijdperk, met r en b tussen 0 en 31 en g tussen 0 en 63).

Daarom slaat het ook nergens op om de RGB wel van 0 tot 255 te laten schalen, maar de A niet. Doe gewoon álles tussen 0 en 1, zoals het hoort. Die 255 klopt alleen bij 8 bits per component kleurformaten, en het is niet aan CSS om een dergelijke limitatie op te leggen.

[ Voor 11% gewijzigd door .oisyn op 20-04-2011 22:55 ]

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!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
.oisyn schreef op woensdag 20 april 2011 @ 19:25:
Wat, wil je zeggen dat in de rgba(r,g,b,a) syntax de r,g en b wel gewoon van 0 tot 255 lopen maar a niet :? 8)7
.oisyn schreef op woensdag 20 april 2011 @ 22:50:
Daarom slaat het ook nergens op om de RGB wel van 0 tot 255 te laten schalen, maar de A niet. Doe gewoon álles tussen 0 en 1, zoals het hoort. Die 255 klopt alleen bij 8 bits per component kleurformaten, en het is niet aan CSS om een dergelijke limitatie op te leggen.
Ja, sorry, ik heb 't ook niet verzonnen :+
Sterker nog: een percentage mag ook: rgba(50%, 75%, 80%, 0.5) :X Waarom de a component dan geen percentage mag zijn mag Joost weten. Maar die is er effe niet :P
Verwijderd schreef op woensdag 20 april 2011 @ 20:57:
Want mocht je het nog niet weten 0...255 is precies 1 byte.
:D No shit sherlock! Dus zo komen ze aan de benaming 24 bits kleur 8)7 En daarom heet een 24 bits kleur met alpha channel een 32 bits kleur! WOAH! _O_

[ Voor 63% gewijzigd door RobIII op 20-04-2011 23:08 ]

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


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Hehe, het alpha kanaal. Toen ik net begon met kleuren in WPF vergat ik iedere keer dat stukje mee te nemen, voor kleuren gebruikte ik dus gewoon alleen Red Green en Blue. Dan zette hij automatisch de alpha op 0 waardoor de kleur niet te zien was. Heeft best wel lang geduurd voor ik door had wat er mis ging. Nadat ik wat met de WYSIWYG editor aan het spelen was gegaan zag ik dat er ook nog een alpha was... |:( Alpha setten in je kleur en hij was zichtbaar *O*

Als je met de alpha speelt wordt het dan ook transparant(er) of haal ik nu wat door elkaar?
Overigens was het vroegah in CSS een ramp om iets transparant te krijgen, er staat mij bij dat je voor iedere browser weer iets anders moest gebruiken... Komt nu in me op omdat ik CSS en alpha zie...

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!

  • BM
  • Registratie: September 2001
  • Laatst online: 07:16

BM

Moderator Spielerij
.Gertjan. schreef op donderdag 21 april 2011 @ 07:41:
Hehe, het alpha kanaal. Toen ik net begon met kleuren in WPF vergat ik iedere keer dat stukje mee te nemen, voor kleuren gebruikte ik dus gewoon alleen Red Green en Blue. Dan zette hij automatisch de alpha op 0 waardoor de kleur niet te zien was. Heeft best wel lang geduurd voor ik door had wat er mis ging. Nadat ik wat met de WYSIWYG editor aan het spelen was gegaan zag ik dat er ook nog een alpha was... |:( Alpha setten in je kleur en hij was zichtbaar *O*

Als je met de alpha speelt wordt het dan ook transparant(er) of haal ik nu wat door elkaar?
Overigens was het vroegah in CSS een ramp om iets transparant te krijgen, er staat mij bij dat je voor iedere browser weer iets anders moest gebruiken... Komt nu in me op omdat ik CSS en alpha zie...
Huh?
Als je in WPF #00FF00 opgeeft krijg je toch gewoon groen, ongeacht of je nu wel of geen alpha kanaal meegeeft? :? Volgens mij zet ie alpha juist standaard zo dat het wel zichtbaar is?

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

BM schreef op donderdag 21 april 2011 @ 07:43:
[...]


Huh?
Als je in WPF #00FF00 opgeeft krijg je toch gewoon groen, ongeacht of je nu wel of geen alpha kanaal meegeeft? :? Volgens mij zet ie alpha juist standaard zo dat het wel zichtbaar is?
Mmm, dat weet ik niet meer zeker, maar als je met brushes ging werken moest je dacht ik Alpha wel expliciet meegeven. Maar goed pin me er niet op vast, is weer een tijdje terug.

Kan ook goed zijn dat ik standaard 0 in heb gevuld omdat ik niet wist wat het was :P

edit: ik zit even te kijken in de code, maar de eerste 2 zijn het alpha kanaal, als je die niet set gaat hij, dacht ik, aan de hand van de 6 karakters een 8 karakter kleur code maken. Op de een of andere manier kwam er soms iets compleet mislukts uit. (maar kan ook zijn dat het probleem tussen het toetsenbord en stoel zat :D ).

[ Voor 22% gewijzigd door .Gertjan. op 21-04-2011 07:48 ]

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!

  • omgwtfbbq
  • Registratie: Juli 2007
  • Laatst online: 03-10 18:35
mOrPhie schreef op woensdag 20 april 2011 @ 15:06:
Hehe, netjes. :P

Overigens zou ik ook kijken naar constanten, enums en het goed gebruik om niet nederlands en engels door elkaar te programmeren. ;)
Ik ben halverwege het project erbij gekomen, dus de meeste benamingen zijn niet van eigen hand. Heb wel hier en daar wat dingen op moeten schonen wat dat betreft, want het is echt heel verwarrend om engels en nederlands door elkaar te doen..

Acties:
  • 0 Henk 'm!

  • Rutix
  • Registratie: Augustus 2009
  • Laatst online: 05-09-2024
omgwtfbbq schreef op donderdag 21 april 2011 @ 10:57:
[...]


Ik ben halverwege het project erbij gekomen, dus de meeste benamingen zijn niet van eigen hand. Heb wel hier en daar wat dingen op moeten schonen wat dat betreft, want het is echt heel verwarrend om engels en nederlands door elkaar te doen..
Ja idd. Want dan moet je de hele tijd kijken hoe een functie nou precies heet omdat je.

Nothing to see here!


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 03-10 09:39

Patriot

Fulltime #whatpulsert

Rutix schreef op donderdag 21 april 2011 @ 12:55:
[...]

Ja idd. Want dan moet je de hele tijd kijken hoe een functie nou precies heet omdat je.
Maak die zin eens af, ik viel bijna van m'n stoel zo abrupt als die eindigde.

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Patriot schreef op donderdag 21 april 2011 @ 12:59:
[...]


Maak die zin eens af, ik viel bijna van m'n stoel zo abrupt als die eindigde.
Inderdaad, behoorlijk irritant van die mensen die hun zin niet

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!

  • graceful
  • Registratie: Maart 2008
  • Niet online
.Gertjan. schreef op donderdag 21 april 2011 @ 13:30:
[...]

Inderdaad, behoorlijk irritant van die mensen die hun zin niet
In dit soort gevallen weet je het einde en ga je automatisch aanvullen. Zelfde als automatische foutcorrctie in je koppie. Echter, in het eerder geval zou ik bijvoorbeeld absoluut niet weten wat er achter moet en dan begint irritatie op te treden.

Edit; aan zijn profiel te zien zal het wel een firewall zijn geweest die het verder typen heeft geblokkeerd :+
Grappige 'managers', sorry.. niet gewend. O-)

[ Voor 26% gewijzigd door graceful op 21-04-2011 14:12 ]


Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

graceful schreef op donderdag 21 april 2011 @ 14:08:
[...]


In dit soort gevallen weet je het einde en ga je automatisch aanvullen. Zelfde als automatische foutcorrctie in je koppie. Echter, in het eerder geval zou ik bijvoorbeeld absoluut niet weten wat er achter moet en dan begint irritatie op te treden.
;) joh, dat is ook de grap :D

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!

Verwijderd

.Gertjan. schreef op donderdag 21 april 2011 @ 13:30:
[...]

Inderdaad, behoorlijk irritant van die mensen die hun zin niet
Nog niet half zo irritant als mensen die je zin mee gaan praten! Dat is echt te irritant voor woorden. Ik heb een klasgenoot die dat onbewust doet, ook al is een docent iets aan het uitleggen. Echt heel vervelend.

Acties:
  • 0 Henk 'm!

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

.Gertjan.

Owl!

Verwijderd schreef op donderdag 21 april 2011 @ 17:03:
[...]


Nog niet half zo irritant als mensen die je zin mee gaan praten! Dat is echt te irritant voor woorden. Ik heb een klasgenoot die dat onbewust doet, ook al is een docent iets aan het uitleggen. Echt heel vervelend.
Als het eendje was dan is het wel weer leuk :D

Afbeeldingslocatie: http://static.tmg.nl/wuz/c/9/7/1200075354797.jpg

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!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:41

Onbekend

...

BM schreef op donderdag 21 april 2011 @ 07:43:
[...]


Huh?
Als je in WPF #00FF00 opgeeft krijg je toch gewoon groen, ongeacht of je nu wel of geen alpha kanaal meegeeft? :? Volgens mij zet ie alpha juist standaard zo dat het wel zichtbaar is?
In de hexadecimale notatie hoeft dat niet. Maar als de functie rgbA is, ja, dan verwacht hij gewoon vier parameters. ;)

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 08:48
Onbekend schreef op donderdag 21 april 2011 @ 18:08:
[...]

In de hexadecimale notatie hoeft dat niet. Maar als de functie rgbA is, ja, dan verwacht hij gewoon vier parameters. ;)
FromArgb() :) (wie die trouwens heeft bedacht wil ik slaan :P)

[ Voor 8% gewijzigd door Caelorum op 21-04-2011 18:36 ]

Pagina: 1 ... 55 ... 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. :)