Bonjour Collègues,
Je peux savoir qu'une donnée est de type Array avec le code qui suit:
IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
Une fois que je sais que la donnée est de type Array, comment faire pour
savoir combien elle comporte de dimensions?
Merci pour votre aide!
Guy Lafrenière
Bonjour Collègues,
Je peux savoir qu'une donnée est de type Array avec le code qui suit:
IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
Une fois que je sais que la donnée est de type Array, comment faire pour
savoir combien elle comporte de dimensions?
Merci pour votre aide!
Guy Lafrenière
Bonjour Collègues,
Je peux savoir qu'une donnée est de type Array avec le code qui suit:
IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
Une fois que je sais que la donnée est de type Array, comment faire pour
savoir combien elle comporte de dimensions?
Merci pour votre aide!
Guy Lafrenière
Bonjour,
Pour le nombre de valeurs sur une dimension, on utilise LBound et UBound.
Par défaut LBound est 0 ou 1 selon la plate-forme.
On peut ainsi compléter l'exemple de la fonction TypeName fourni par MSDN
Dim ArrayVar(1 to 5) As Integer
MyType = TypeName(ArrayVar) ' Renvoie "Integer()"
ainsi :
NbVal = UBound(ArrayVar) - LBound(ArrayVar) ' renvoie 5
Quant au nombre de dimensions, c'est plus délicat.
Toutefois si l'observation de la syntaxe de déclaration a permis de
déduire de la présence de parenthèses qu'on avait affaire à un tableau,
alors je pense qu'il suffit de compter les virgules entre les
parenthèses, et le nombre de dimensions sera d'un de plus que le nombre
de virgules. Je crois qu'on ne fera pas le décompte au niveau de la
déclaration, mais de la première initialisation.
Mais là, je sens que je m'aventure ...
C'est pour un outil d'analyse de code, j'imagine ?
En effet, en général, quand on conçoit un programme, on doit connaître
le nombre de dimensions d'un tableau avant d'avoir allumé la machine de
développement.
Je ne me rappelle pas avoir eu d'occasion de considérer comme orthodoxe
de changer le nombre de dimensions d'un tableau en cours d'exécution,
est-ce que j'ai manqué ou oublié quelque chose ?
________________________
Guy Lafrenière a écrit :
> Bonjour Collègues,
>
> Je peux savoir qu'une donnée est de type Array avec le code qui suit:
> IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
>
> Une fois que je sais que la donnée est de type Array, comment faire pour
> savoir combien elle comporte de dimensions?
>
> Merci pour votre aide!
>
>
> Guy Lafrenière
>
>
Bonjour,
Pour le nombre de valeurs sur une dimension, on utilise LBound et UBound.
Par défaut LBound est 0 ou 1 selon la plate-forme.
On peut ainsi compléter l'exemple de la fonction TypeName fourni par MSDN
Dim ArrayVar(1 to 5) As Integer
MyType = TypeName(ArrayVar) ' Renvoie "Integer()"
ainsi :
NbVal = UBound(ArrayVar) - LBound(ArrayVar) ' renvoie 5
Quant au nombre de dimensions, c'est plus délicat.
Toutefois si l'observation de la syntaxe de déclaration a permis de
déduire de la présence de parenthèses qu'on avait affaire à un tableau,
alors je pense qu'il suffit de compter les virgules entre les
parenthèses, et le nombre de dimensions sera d'un de plus que le nombre
de virgules. Je crois qu'on ne fera pas le décompte au niveau de la
déclaration, mais de la première initialisation.
Mais là, je sens que je m'aventure ...
C'est pour un outil d'analyse de code, j'imagine ?
En effet, en général, quand on conçoit un programme, on doit connaître
le nombre de dimensions d'un tableau avant d'avoir allumé la machine de
développement.
Je ne me rappelle pas avoir eu d'occasion de considérer comme orthodoxe
de changer le nombre de dimensions d'un tableau en cours d'exécution,
est-ce que j'ai manqué ou oublié quelque chose ?
________________________
Guy Lafrenière a écrit :
> Bonjour Collègues,
>
> Je peux savoir qu'une donnée est de type Array avec le code qui suit:
> IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
>
> Une fois que je sais que la donnée est de type Array, comment faire pour
> savoir combien elle comporte de dimensions?
>
> Merci pour votre aide!
>
>
> Guy Lafrenière
>
>
Bonjour,
Pour le nombre de valeurs sur une dimension, on utilise LBound et UBound.
Par défaut LBound est 0 ou 1 selon la plate-forme.
On peut ainsi compléter l'exemple de la fonction TypeName fourni par MSDN
Dim ArrayVar(1 to 5) As Integer
MyType = TypeName(ArrayVar) ' Renvoie "Integer()"
ainsi :
NbVal = UBound(ArrayVar) - LBound(ArrayVar) ' renvoie 5
Quant au nombre de dimensions, c'est plus délicat.
Toutefois si l'observation de la syntaxe de déclaration a permis de
déduire de la présence de parenthèses qu'on avait affaire à un tableau,
alors je pense qu'il suffit de compter les virgules entre les
parenthèses, et le nombre de dimensions sera d'un de plus que le nombre
de virgules. Je crois qu'on ne fera pas le décompte au niveau de la
déclaration, mais de la première initialisation.
Mais là, je sens que je m'aventure ...
C'est pour un outil d'analyse de code, j'imagine ?
En effet, en général, quand on conçoit un programme, on doit connaître
le nombre de dimensions d'un tableau avant d'avoir allumé la machine de
développement.
Je ne me rappelle pas avoir eu d'occasion de considérer comme orthodoxe
de changer le nombre de dimensions d'un tableau en cours d'exécution,
est-ce que j'ai manqué ou oublié quelque chose ?
________________________
Guy Lafrenière a écrit :
> Bonjour Collègues,
>
> Je peux savoir qu'une donnée est de type Array avec le code qui suit:
> IsArray = ( Right( TypeName(Data), 2 ) = "( )" )
>
> Une fois que je sais que la donnée est de type Array, comment faire pour
> savoir combien elle comporte de dimensions?
>
> Merci pour votre aide!
>
>
> Guy Lafrenière
>
>
Quand on cherche des bugs, il peut être utile d'anlayser les valeurs
variables en traitement pour savoir si une mauvaise valeur serait à
l'origine du bug. Quand les données sont de type Array, Recordset,
Collection, Dictionary et qu'elles comportent de multiples valeurs
colonnes, enregistrements, items), l'outil Debug.Print ou les autres
de débogage de VB sont particulièrement fastidieux pour arriver à voir
toutes les valeurs.
Je suis à créer un serveur dll qui affichera dans un grid chacune des
valeurs d'une variable passée en paramètre. Pour analyser le contenu
cette variable, j'ai besoin de connaître le type de données, ce qui
facile. Dans le cas d'un array, j'ai aussi besoin de connaître le
dimensions. Mon serveur agira différemment selon que le array est à 1
dimensions. De plus, il ne traitera pas les arrays ayant plus de deux
dimensions, ce que je n'ai jamais utilisé de toute façon.
Voilà le but de ma question.
J'espère que ces précisions vous guideront.
Guy Lafrenière
Quand on cherche des bugs, il peut être utile d'anlayser les valeurs
variables en traitement pour savoir si une mauvaise valeur serait à
l'origine du bug. Quand les données sont de type Array, Recordset,
Collection, Dictionary et qu'elles comportent de multiples valeurs
colonnes, enregistrements, items), l'outil Debug.Print ou les autres
de débogage de VB sont particulièrement fastidieux pour arriver à voir
toutes les valeurs.
Je suis à créer un serveur dll qui affichera dans un grid chacune des
valeurs d'une variable passée en paramètre. Pour analyser le contenu
cette variable, j'ai besoin de connaître le type de données, ce qui
facile. Dans le cas d'un array, j'ai aussi besoin de connaître le
dimensions. Mon serveur agira différemment selon que le array est à 1
dimensions. De plus, il ne traitera pas les arrays ayant plus de deux
dimensions, ce que je n'ai jamais utilisé de toute façon.
Voilà le but de ma question.
J'espère que ces précisions vous guideront.
Guy Lafrenière
Quand on cherche des bugs, il peut être utile d'anlayser les valeurs
variables en traitement pour savoir si une mauvaise valeur serait à
l'origine du bug. Quand les données sont de type Array, Recordset,
Collection, Dictionary et qu'elles comportent de multiples valeurs
colonnes, enregistrements, items), l'outil Debug.Print ou les autres
de débogage de VB sont particulièrement fastidieux pour arriver à voir
toutes les valeurs.
Je suis à créer un serveur dll qui affichera dans un grid chacune des
valeurs d'une variable passée en paramètre. Pour analyser le contenu
cette variable, j'ai besoin de connaître le type de données, ce qui
facile. Dans le cas d'un array, j'ai aussi besoin de connaître le
dimensions. Mon serveur agira différemment selon que le array est à 1
dimensions. De plus, il ne traitera pas les arrays ayant plus de deux
dimensions, ce que je n'ai jamais utilisé de toute façon.
Voilà le but de ma question.
J'espère que ces précisions vous guideront.
Guy Lafrenière
Jean-Marc a écrit
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Jean-Marc a écrit
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Jean-Marc a écrit
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
Hello Guy,
une façon est de jouer avec Ubound qui admet comme 2eme
argument (optionel) la dimension dont on veut connaitre
la borne sup. Il sufffit d'appeler la fonction jusqu'à
déclencher une erreur, de la trapper et le tour est joué.
Voici une telle fonction:
Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
Variant, aDim As Integer) As Boolean
Dim level As Integer
Dim dummy As Long
On Error GoTo GetVariableTypeAndDim_ERR
aType = TypeName(aVariable)
If InStr(aType, "(") > 0 Then
level = 1
While level < 100 ' 100, valeur débilement grande
dummy = UBound(aVariable, level)
level = level + 1
Wend
End If
suite_et_fin:
Exit Function
GetVariableTypeAndDim_ERR:
If Err.Number = 9 Then ' subscript out of range
level = level - 1
aDim = level
GetVariableTypeAndDim = True
Resume suite_et_fin
Else
GetVariableTypeAndDim = False
Resume suite_et_fin
End If
End Function
et voici un exemple d'appel
Private Sub Command1_Click()
Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
Dim mytype As Variant
Dim mydim As Integer
Dim bRet As Boolean
bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
MsgBox "la variabme ArrayVar est de type : " & _
mytype & " avec " & mydim & " dimensions"
End Sub
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Resalue Jean-Marc,
Après avoir utilisé ton code avec une légère adaptation, c'est tout à fait
ce que je voulais.
Merci!
Guy Lafrenière
"Jean-Marc" a écrit
> Hello Guy,
>
> une façon est de jouer avec Ubound qui admet comme 2eme
> argument (optionel) la dimension dont on veut connaitre
> la borne sup. Il sufffit d'appeler la fonction jusqu'à
> déclencher une erreur, de la trapper et le tour est joué.
>
> Voici une telle fonction:
>
> Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
> Variant, aDim As Integer) As Boolean
> Dim level As Integer
> Dim dummy As Long
>
> On Error GoTo GetVariableTypeAndDim_ERR
>
> aType = TypeName(aVariable)
> If InStr(aType, "(") > 0 Then
> level = 1
> While level < 100 ' 100, valeur débilement grande
> dummy = UBound(aVariable, level)
> level = level + 1
> Wend
> End If
> suite_et_fin:
>
> Exit Function
>
> GetVariableTypeAndDim_ERR:
> If Err.Number = 9 Then ' subscript out of range
> level = level - 1
> aDim = level
> GetVariableTypeAndDim = True
> Resume suite_et_fin
> Else
> GetVariableTypeAndDim = False
> Resume suite_et_fin
> End If
> End Function
>
>
> et voici un exemple d'appel
>
> Private Sub Command1_Click()
> Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
> Dim mytype As Variant
> Dim mydim As Integer
> Dim bRet As Boolean
>
> bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
> MsgBox "la variabme ArrayVar est de type : " & _
> mytype & " avec " & mydim & " dimensions"
>
> End Sub
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>
Resalue Jean-Marc,
Après avoir utilisé ton code avec une légère adaptation, c'est tout à fait
ce que je voulais.
Merci!
Guy Lafrenière
"Jean-Marc" a écrit
> Hello Guy,
>
> une façon est de jouer avec Ubound qui admet comme 2eme
> argument (optionel) la dimension dont on veut connaitre
> la borne sup. Il sufffit d'appeler la fonction jusqu'à
> déclencher une erreur, de la trapper et le tour est joué.
>
> Voici une telle fonction:
>
> Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
> Variant, aDim As Integer) As Boolean
> Dim level As Integer
> Dim dummy As Long
>
> On Error GoTo GetVariableTypeAndDim_ERR
>
> aType = TypeName(aVariable)
> If InStr(aType, "(") > 0 Then
> level = 1
> While level < 100 ' 100, valeur débilement grande
> dummy = UBound(aVariable, level)
> level = level + 1
> Wend
> End If
> suite_et_fin:
>
> Exit Function
>
> GetVariableTypeAndDim_ERR:
> If Err.Number = 9 Then ' subscript out of range
> level = level - 1
> aDim = level
> GetVariableTypeAndDim = True
> Resume suite_et_fin
> Else
> GetVariableTypeAndDim = False
> Resume suite_et_fin
> End If
> End Function
>
>
> et voici un exemple d'appel
>
> Private Sub Command1_Click()
> Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
> Dim mytype As Variant
> Dim mydim As Integer
> Dim bRet As Boolean
>
> bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
> MsgBox "la variabme ArrayVar est de type : " & _
> mytype & " avec " & mydim & " dimensions"
>
> End Sub
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
>
Resalue Jean-Marc,
Après avoir utilisé ton code avec une légère adaptation, c'est tout à fait
ce que je voulais.
Merci!
Guy Lafrenière
"Jean-Marc" a écrit
> Hello Guy,
>
> une façon est de jouer avec Ubound qui admet comme 2eme
> argument (optionel) la dimension dont on veut connaitre
> la borne sup. Il sufffit d'appeler la fonction jusqu'à
> déclencher une erreur, de la trapper et le tour est joué.
>
> Voici une telle fonction:
>
> Private Function GetVariableTypeAndDim(aVariable As Variant, aType As
> Variant, aDim As Integer) As Boolean
> Dim level As Integer
> Dim dummy As Long
>
> On Error GoTo GetVariableTypeAndDim_ERR
>
> aType = TypeName(aVariable)
> If InStr(aType, "(") > 0 Then
> level = 1
> While level < 100 ' 100, valeur débilement grande
> dummy = UBound(aVariable, level)
> level = level + 1
> Wend
> End If
> suite_et_fin:
>
> Exit Function
>
> GetVariableTypeAndDim_ERR:
> If Err.Number = 9 Then ' subscript out of range
> level = level - 1
> aDim = level
> GetVariableTypeAndDim = True
> Resume suite_et_fin
> Else
> GetVariableTypeAndDim = False
> Resume suite_et_fin
> End If
> End Function
>
>
> et voici un exemple d'appel
>
> Private Sub Command1_Click()
> Dim ArrayVar(1 To 5, 2 To 10, 4 To 9) As Integer
> Dim mytype As Variant
> Dim mydim As Integer
> Dim bRet As Boolean
>
> bRet = GetVariableTypeAndDim(ArrayVar, mytype, mydim)
> MsgBox "la variabme ArrayVar est de type : " & _
> mytype & " avec " & mydim & " dimensions"
>
> End Sub
>
> --
> Jean-marc
> Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
> "There are only 10 kind of people
> those who understand binary and those who don't."
> mailto: remove '_no_spam_' ;
>