[Classic ASP] Improving split function

Coming from the JavaScript world, I’m used to split function working as follow :

"".split(",")
> Array [ "" ]

It’s basic JavaScript. Take an empty string, try to split it on a delimiter, it will return an array containing just one element : an empty string. It’s exactly what you expect from the function, always return an array. Like it should be in every programming language.

A few weeks ago, I had to deal with split function in ASP Classic. Calling the function is a bit different, but that’s not a big deal :

split("foo,bar", ",")

The function works fine in almost every cases. But it has an unexpected behaviour when you use it on an empty string. Let’s try it :

Dim array
array = split("", ",")
'-- Expect array to contain one element
UBound(array) '-- Returns -1. Wait! What?
array(0)      '-- Guess what: Internal server error

That’s a problem. The split function does not return an array containing an empty string when you try to split an empty string, it just returns an array with nothing in it – hence UBound returning -1.

When you are aware of this particularity, it’s easier to write your code. Since I personally prefer a JavaScript-like split function, I decided to write a betterSplit function doing the job as I wanted :

'-- Improve Split to work as expected
Function betterSplit(str, delimiter)
  Dim ar
  ar = Split(str, delimiter)

  '-- UBound
  '-- < 0 if empty string
  '-- = 0 if no delimiter in string
  If UBound(ar) <= 0 Then
    ReDim ar(0)
    ar(0) = str
  End If

  betterSplit = ar
End Function

As a matter of fact, I find this function much better than the original split function as it always returns an array even when using an empty string as a parameter.

Performance entre compute et move

 WORKING-STORAGE SECTION.
 01 WORKING-VAR.
    05 W-TAU-3-6         PIC S9(3)V9(6) COMP-3.
    05  W-TAU-2-5        PIC S9(2)V9(5).
    05 W-CPT             PIC 9(09).

 PROCEDURE DIVISION.
    move 123,123456       to W-TAU-3-6
    move 12,12345         to W-TAU-2-5

    perform until W-CPT = 999999999
*      compute W-TAU-3-6 = W-TAU-2-5
       move W-TAU-2-5     to W-TAU-3-6
       add 1              to W-CPT
    end-perform

Aujourd’hui, j’ai voulu savoir ce qui est le mieux à utiliser entre un compute et un move pour renseigner un champ. J’ai donc exécuter le petit bout de code si dessus.
Résultats :

Temps d’exécution Temps CPU
Move 45.49 1,814
35.9 1,81
1.05.83 1,818
Compute 49.44 2,429
38.66 2,421
1.16.26 2,441

Après 3 exécutions de chaque on distingue bien que le compute mange beaucoup plus de CPU que le move pour le même résultat (Ici environ 1/4 de plus). Conclusion, utiliser les compute seulement en cas de calcul et non pour renseigner une variable.

Mise à jour après un second test qui met sur un pied d’égalité le compute et le move (2.500 Temps CPU pour les deux) :

compute W-TAU-2-5 = W-TAU-3-6
move W-TAU-3-6 to W-TAU-2-5

Dans le cas où l’on met une zone plus grande dans une zone plus petite le compute et le move on les mêmes performances, avec une petite préférence personnelle pour le compute qui évite quelques Warning dans ce cas bien précis.

Manipulations de données simples

Des cas simples, toujours bon à avoir sous la main, ou ici plus particulièrement sous les yeux et à portée d’internet !
Dans cet article je vais parler de quelques bases de manipulations de données en Cobol:

 WORKING-STORAGE SECTION.
    01 WORKING-VAR.
       05 W-SOLDMOYEN-15-2 PIC S9(15)V9(2) COMP-3.
       05 W-SOLDMOYEN-17   PIC S9(17) COMP-3.

 PROCEDURE DIVISION.
    display 'Variables non renseignées :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

    move 12,34 to W-SOLDMOYEN-15-2
    move 1234 to W-SOLDMOYEN-17
    display 'Variables renseignées :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

    move W-SOLDMOYEN-15-2 to W-SOLDMOYEN-17
    display 'Variables après passage de 15-2 à 17 :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

    compute W-SOLDMOYEN-17 = W-SOLDMOYEN-15-2 * 100
    display 'Variables après multiplic. de 15-2 par 100 à 17 :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

    * Les deux techniques suivantes marchent :
    move  W-SOLDMOYEN-17  to W-SOLDMOYEN-15-2 
    * ... laquelle des deux est la meilleure ?
    compute W-SOLDMOYEN-15-2 = W-SOLDMOYEN-17
    display 'Variables après passage de 17 à 15-2 :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

    move 12345678901234567 to W-SOLDMOYEN-17
    compute W-SOLDMOYEN-15-2 = W-SOLDMOYEN-17
    display 'Variable 15-2 après compute de 12345678901234567 :'
    display '15-2 :' W-SOLDMOYEN-15-2
    display '17 :'   W-SOLDMOYEN-17

Ce qui nous donne en sortie :

Variables non renseignées :
15-2 :00000000000000000
17   :00000000000000000
Variables renseignées :
15-2 :00000000000001234
17   :00000000000001234
Variables après passage de 15-2 à 17 :
15-2 :00000000000001234
17   :00000000000000012
Variables après multiplic. de 15-2 par 100 à 17 :
15-2 :00000000000001234
17   :00000000000001234
Variables après passage de 17 à 15-2 :
15-2 :00000000000123400
17   :00000000000001234
Variable 15-2 après compute de 12345678901234567 :
15-2 :34567890123456700
17   :12345678901234567 

Voilà pour les manipulations du jour, le but étant de retrouver facilement quelles actions donne quels résultats en étant sûr des données et ne pas avoir à retaper un cas de test ou de faire des displays abusifs ;)

24H du Mans Roller 2015

Fin juin, je suis parti avec un petit groupe d’aventuriers vers l’ouest de la France, afin de relever un défi d’envergure. Chacun de nous avait prévu son matériel : roues, chaussons, platines, roulements, … Les esprits étaient plus ou moins reposés, les corps prêts à en découdre.

C’est donc bien chargé que nous sommes arrivés au camping du circuit des 24h du Mans, dans la ville du Mans comme vous l’aurez compris. Comme nous, de nombreuses équipes de niveaux variés ont fait le déplacement; une partie en bus, d’autres en camping car, certains en mini-bus, les derniers en voiture et les plus courageux en train. Une bonne ambiance règne dans le camping, occupé par une multitude de nationalités, français bien sûr, mais aussi : allemands, anglais, espagnols et danois.

Partis à quatre de Strasbourg, notre cinquième coéquipier nous rejoint en début de soirée. L’équipe est au complet; le sixième s’étant blessé peu avant la date de la compétition; sans que nous lui trouvions un remplaçant.

Après une nuit quelque peu agitée – à cause de gens s’essayant à la slackline une bière à la main à 1h du matin – le début d’une longue journée s’annonce. Bien que la compétition ne commence qu’à 16h, il y a bien des choses à faire avant le coup d’envoi de ces 24h du Mans roller 2015. Récupération des dossards et des puces, petit-déjeuner et c’est déjà l’heure de la parade et de découvrir pour la première fois le circuit ainsi que sa montée du Dunlop dont j’ai tant entendu parlé. Une majorité d’équipe sont présentes pour cet événement d’avant course, c’est une véritable explosion de couleurs qui envahit l’asphalte noir du circuit.

Continuer la lecture de « 24H du Mans Roller 2015 »

Le temps

Et si le temps était plus que de l’argent ?

En 1748, Benjamin Franklin aurait dit à un jeune marchand: « Remember that time is money. », en français « Rappel toi que le temps c’est de l’argent. » puis au fil du temps cette phrase est devenue l’adage de tous. Mais en réalité le temps est-il vraiment de l’argent ? Une unité que l’on débourserait dans le but de s’enrichir ? Ou alors le temps serait-il plus que cela ? Une possession individuelle que chaque personne à loisir de dépenser comme bon lui semble sans rendre compte à personne ? En brûlant les étapes et en avançant bien plus loin dans le questionnement, les inégalités de ce monde ne viendraient-elles pas du fait qu’il y ai d’un côté des riches qui profitent du temps des autres du fait de leurs richesses et de l’autre des pauvres obliger de donner de leur temps pour gagner de l’argent pour profiter eux-mêmes du temps des autres ? Là encore il m’est facilement possible de dériver en vous expliquant que de cette chaîne résulte un état d’esprit fortement individualiste, ne permettant plus de donner de son temps sans paraître attendre quelque chose en retour. Or, la vraie beauté d’un geste ne provient-elle pas de sa gratuité et du temps qu’on y consacre ? En se basant sur le temps et non sur l’argent, en redonnant sa véritable valeur au temps ne serions-nous pas égaux ? Et si la gestion de cette ressource était le fait de tous nos problèmes; la limite que la nature nous impose, à nous et à nos semblables ? Ah, tant de questions ! Et si peu de « temps » pour y répondre pourrait-on dire pour adoucir le ton et permettre de mieux analyser le temps. Vous l’aurez peut-être compris, je m’attaque à un monument colossal, le temps.

Penchons-nous sur la première question qui nous vient surement tous à l’esprit après cette introduction, qu’est-ce que le temps ?

Le temps. En français, ça peut être 7°C un Mercredi soir nuageux du mois de février 2015 à 22h39 comme ça peut être, comme le dit fort bien Wikipédia: un concept développé par l’homme pour appréhender le changement dans le monde (ndl: Il me vient à l’esprit après relecture de cet article que l’on pourrait en 2015 définir l’argent pour la majorité des personnes qui nous gouvernent comme précédemment pour le temps). On peut aussi approcher cette notion de temps par son étymologie, le mot temps proviendrait du latin tempus, de la même racine que du grec τεμνεῖν, temnein, couper, qui fait référence à une division du flot du temps en éléments finis. Temples (templum) dérive également de cette racine et en est la correspondance spatiale (le templum initial est la division de l’espace du ciel ou du sol en secteurs par les augures). Enfin, « atome » (insécable), du grec ἄτομος (non coupé, indivisible) dérive également de la même racine.

La deuxième question qui nous vient à l’esprit est toute naturelle, qu’est-ce que l’argent ?

L’argent. Wikipédia nous offre la encore diverses étymologies, dont quelques-unes que j’ai sélectionnées :

  • En Assyrie, en Égypte, l’intermédiarat existait, et, aussi, le prêt avec intérêt. Les paysans, manquant de blé, empruntaient des lingots d’or ou d’argent pour s’en procurer ; puis, quand il leur fallait rendre ces lingots, ils vendaient la récolte à perte, naturellement, à des trusteurs qui devinrent peu à peu maîtres du marché. — (Victor Méric, Les Compagnons de l’Escopette, Éditions de l’Épi, Paris, 1930, p. 172) ndl: Vieux livre très intéressant à lire de toute urgence.
  • Ressource monétaire sous forme de pièces de monnaie dans ce métal.
  • Les vieilles danses et les jeux marquisiens ayant été supprimées, l’argent que donnaient aux indigènes la récolte du copra et la culture de la vanille ne pouvait leur procurer aucun plaisir. — (Alain Gerbault, À la poursuite du soleil; tome 1 : De New-York à Tahiti, 1929).

À l’argent l’on associe valeur, car bien entendu que serait l’argent sans valeur ? La valeur donnée à l’argent dépend de plusieurs paramètres que l’on peut s’amuser à chercher, comme, la confiance qu’on lui porte, sa disponibilité à travers le monde, le nombre de ses utilisateurs, l’état de ses utilisateurs, sa quantité, etc.

Nous allons maintenant nous secouer les méninges ! Si le temps c’est de l’argent, alors l’argent c’est du temps ? Or l’argent peut être créé, produit ! Or si nous rajoutons de nouveaux billets, comment allons-nous ajouter du temps associé à cet argent ? Une piste ? Oui bien sûr… l’inflation ! Mais l’inflation n’est autre que la dévaluation de l’argent qui nous a été donné en échange du temps mis en œuvre. Le raisonnement ici est biaisé car un objet d’art peut avoir un prix qui représente du temps, mais peut aussi gagner en valeur en laissant passer le temps, beaucoup d’autres contres exemples pourront-être trouvé. Ce qui revient à dire que oui l’argent c’est du temps, mais non le temps n’est pas de l’argent, le temps est supérieur à l’argent.

Temps > Argent

Celui qui pense que le temps c’est de l’argent s’attend à pouvoir acheter le temps des autres et si besoin vendre le sien, or celui qui s’enrichit n’est pas celui qui vend son temps mais celui qui vend ses compétences, ses réalisations, le prix alors ne dépendant plus du temps passé mais de la rareté de l’offre. Un chanteur célèbre s’enrichira, un ingénieur brevetant et rendant non copiable ou irremplaçable son invention tant désirée s’enrichira, un artiste célèbre s’enrichira.

 

Les axes de réflexions suivant pourront être abordés:

Au XXIème siècle prenons-nous assez conscience du temps et de sa valeur, j’entends par la sa valeur non-monétaire par opposition à la valeur monétaire qu’on lui porte.

Le passé, le présent, le futur -> si on ne maîtrise pas les 3 on en viendrait à perdre une partie de cette somme qui nous appartient ?

Le dieu horloger ?

La clepsydre

La manière d’utiliser son temps ?

Perdre son temps ?

L’invention du temps, depuis quand nous nous soucions du temps qui passe ?

Il y a un temps pour tout, un temps de pleurer, un temps de rire, un temps à se lamenter et un temps de danser. La Bible, Extrait de l’ecclésiastique. Pourquoi faut-il scinder le temps ?

Les relations sociales -> cette manière de donner de son temps et de son énergie, mettre en opposition les égoïstes et ses antonymes : altruiste, bienfaisant, charitable, désintéressé, galant, généreux, gentil, large, mutuel, officieux, philanthrope. Ces deux opposés auraient-ils une vision du temps, de leur temps différent ?

Bilan, le temps au « fil du temps » à selon mon avis perdu sa valeur « universelle » pour gagner dès 1748 ce sens d’argent, de quelque chose de monnayable, …

Ce que nous pouvons faire pour se « donner le temps ».