Monday, 08 July 2019
|
Écrit par
Grégory Soutadé

Lac de Côme depuis Lenno

Mi juin, saison rêvée pour découvrir le nord de l'Italie et ses célèbres lacs (Majeur, Côme, Garde) avant l'arrivée massive des touristes et de la chaleur. Certes, cette année, une vague de chaleur s'est invitée lors de la seconde quinzaine de juin... Pour autant, il valait mieux être en altitude qu'en ville !

Milan (Milano)

Galleria Vittorio Emanuele II

La première étape est Milan, capitale de la mode et du design. Depuis l'exposition universelle de 2015, il y a une réelle politique pour re dynamiser la capitale Lombarde et casser son image de ville industrielle. Il suffit de quelques jours pour le ressentir. C'est une ville jeune, dynamique, en perpétuel mouvement à l'image du nouveau quartier : parc fleuri, immeubles design, balcons entièrement végétalisés et autonomes en arrosage. À ce sujet, les villes italiennes, malgré la création des artères et avenues dédiées aux voitures, ont su garder leurs arbres, apportant un peu de fraîcheur aux promeneurs. Milan, particulièrement, possède de nombreux immeubles dont les balconnières sont fleuries. Mieux encore, les anciennes lignes de tramway n'ont pas été supprimées en faveur de l'automobile. On peut même voir circuler des rames des années 30 ! En sus, le faible dénivelé et la création de nombreuses pistes cyclables en site propre favorisent l'usage du vélo. Finalement, les grands parcs apportent une réelle bouffée d'oxygène aux locaux comme aux touristes. Ils sont vraiment immenses, loin de ce qu'on peut trouver de l'autre côté des Alpes. Les municipalités françaises feraient bien de s'en inspirer lors de la création/révision des plans d'urbanisme...

Duomo Milano

Mais Milan est aussi une importante place financière, siège de la bourse d'Italie. Elle transpire l'argent à l'image des hôtels de luxe, boutiques de luxe et nombreuses voitures haut de gamme qui la sillonne. Le petit passage sur la via Monte Napoleone est assez exotique.

À quelques encablures des monuments historiques, dont la cathédrale centrale est le fleuron (tenue correcte exigée : pas de jupe, épaules couvertes...), se dressent des immeubles de société qui rivalisent de hauteur les uns avec les autres. On se doit d'être visible. La ville est sans cesse en rénovation/construction, sans, visiblement, avoir de limite concernant la taille des immeubles.

Immeuble végétalisé IBM Milan

Bien sûr, la Lombarde possède moulte défauts inhérents à une métropole de son envergure : circulation automobile importante tout au long de la journée, bruit, pollution. Il y a énormément de touristes (dont beaucoup d'asiatiques). Il est d'ailleurs assez difficile de trouver des rues où personne ne fume... Il faut dire que l'agglomération Milanaise est forte de 1.3M d'habitants (plus les 2M de touristes annuels), 7M si on prend en compte l'aire urbaine. Les pics de chaleur se font donc vite ressentir. Car, Milan avec ses parcs ombragés, est l'arbre qui cache la forêt ! La région alentour est un mélange d'agriculture et d'industries. Les autoroutes périphériques sont denses, aussi bien à cause des riverains que des camions de marchandise. Résultat, si un dimanche calme, il ne faisait que 31°C sur la route, un lundi en plein après-midi, le mercure dépasse les 34°C !

Pour ce qui est des conseils pratiques, le mieux est de stationner sa voiture en périphérie dans un parking longue durée (style Parkvia) et de prendre un hébergement au centre. Concernant Parkvia, inutile de réserver, car, dans ce cas, il faut faire valider sa réservation en sortie via un interphone et du personnel ne parlant pas forcément anglais. La place de stationnement n'étant de toutes façons pas garantie. Les bonnes adresses :

  • La pâtisserie Pavè
  • Bar Cimmino 104 : tous les cocktails à 8€ et une planche apéritive est disponible gratuitement
  • Restaurant Osteria Brunello : cuisine raffinée (prix en conséquence)
  • Pizzeria Pino

Bergame (Bergamo)

Partie haute Bergame

Bergame est séparée en deux : la partie basse accueille la nouvelle ville tandis que la partie haute, fortifiée, abrite un village beaucoup plus typique (un bel exemple d'architecture locale). La liaison se fait en bus (circulation automobile réservée aux riverains sur la partie haute), par le funiculaire ou à pied.

Remparts Bergame

Autant dire qu'il est conseillé de prendre le premier à l'aller, puis de longer les remparts afin de profiter de la vue au retour. On appréciera les petites ruelles médiévales, hélas très exploitées par l'activité touristique, qui, même en juin est importante.

Cour intérieure Bergame

Si l'on pourra goûter la spécialité locale à base de polenta, il vaudra mieux regarder les ingrédients avant de se lancer : une pâte d'amande fourrée à la crème au cacao, le tout avec beaucoup de colorant. De manière générale, les Italiens sont friands de viennoiseries fourrées.

Partie basse Bergame

Même si ce n'est pas le plus joli, la petite marche depuis le nouveau parking (3€/jour) permet de découvrir les quelques monuments de la basse ville.

Bellagio

Bellagio

Probablement le grand village le plus sympathique du lac de Côme. Il occupe la place centrale dans le delta du lac. Naturellement bondé dès juin. Si certaines ont sur rester un tant soit peu authentique, ses petites ruelles ne sont dédiées qu'à la restauration et quelques boutiques de souvenirs. Il faut fuir les artères principales.

Ruelle Bellagio

Le port permet cependant de se faire une belle idée du lac et d'observer au loin la myriade de palais bourgeois (dont certains datent de la renaissance). Pour les voir de plus près, le mieux est de faire un tour en bateau (ou en bus).

Jardins Melzi Jardins Melzi

Finalement, un des points d'intérêts majeurs se trouve dans les jardins de la villa Melzi : un jardin botanique avec des essences d'arbres du monde entier. La bonne adresse :

  • Le restaurant B-Lake sur la traverse centrale (un peu cher, mais la qualité est au rendez-vous)

Mennagio - Tremezzo - Lenno

Port Mennagio

Point stratégique pour atteindre les Alpes, le lac de Côme fut très tôt colonisé par les Romains qui en expulsèrent les autochtones. S'ensuit la domination de puissantes familles, avant de devenir un lieu de villégiature privilégié de la haute bourgeoisie locale, pour finir en station balnéaire prisée des touristes fortunés. Cette histoire se reflète dans le nombre impressionnant de palais bourgeois (et maintenant hôtels de luxe) construits autour du lac. Ici, le massif Alpin plonge de manière abrupte dans l'eau. Cela a plusieurs conséquences : 1) La circulation (sur l'ancienne via Régina) est difficile (riverains, touristes, camions de livraisons), la route étant étroite, 2) À part siroter un Aperol Spritz au bord du lac, il n'y a pas grand chose à faire. Quelques villas peuvent être visitées (pour un tarif d'entrée plus ou moins important), mais dans l'ensemble, on se contente de les observer depuis le bord de la route (ou du bateau). Alors, même si c'est joli, cela ne vaut absolument pas le coup de dépenser du temps et de l'énergie à s'y rendre. De plus, il n'y a que très peu de plages aménagées pour se baigner (un petit parc à cet effet à Tremezzo).

Ruelle Lenno

Seul Lenno avec ses quelques ruelles propose un petit peu plus qu'un bord de lac, deux restaurants et des hôtels de luxe.

Côme

Cathédrâle de Côme Piazza del duomo Côme

Côme est un concentré de la région : une périphérie hideuse, un centre historique restreint et envahit par les touristes, une superbe cathédrale, des magasins et des hôtels de luxe ainsi qu'un accès au lac via un petit port. On y va pour prendre une photo avec le panneau d'entrée de la ville, rien de plus.

Stresa - Îles Borromées

Isola Bella - Borromées

À une centaine de kilomètres à l'ouest se trouve le lac Majeur (Lago Maggiore) partagé équitablement entre le Piémont et la Lombardie. Stresa est implantée sur la partie Piémontaise. On retrouve les mêmes éléments que sur le lac de Côme, mais avec une déclivité moins importante du massif Alpin permettant de faire plus d'activités de plein air (beaucoup de randonnées sont possibles). Les bus de touristes sont également très présents, mais moins qu'en Lombardie.

Palais bourgeois Stresa Palais bourgeois Stresa

Il n'y a rien de particulier à Stresa à part un mini parc zoologique privé et la possibilité de prendre le bateau pour visiter les îles Borromées. Trois d'entre elles sont visitables : l'île mère (isola madre), avec son jardin exotique, la belle (isola bella), la plus célèbre avec son château de style baroque et l'île du pêcheur (isola dei Pescatori).

Ruelle Île du pêcheur Île du pêcheur

L'île du pêcheur est plus petite, mais peut-être une des plus authentique. Pour s'y rendre, le mieux est d'utiliser les bateaux du service publique CMC qui font des rotations toutes les 30 minutes (pontons rouges), plutôt que les privés. Naturellement, les îles étant assez petites, elles sont vite submergées par les visiteurs.

Ruelle Île du pêcheur Ruelle Île du pêcheur

Port Île du pêcheur

Orta San Giulio

Isola San Giulio

Non loin de Stresa, se trouve Orta San Giulio en bordure du lac d'Orta. Ce dernier est moins prisé et permet de respirer un peu. Au-delà de son côté charmant, le village est surtout célèbre pour le site du Mont Sacré d'Orta (Sacro Monte di Orta) composé de 20 chapelles datant du XVIe et XVIIe siècle mettant en scène la vie de St François d'Assise par des sculptures et des peintures. Site inscrit au patrimoine mondial de l'UNESCO.

Ruelle Orta San Giulio Ruelle Orta San Giulio

Sormano

C'est finalement le gros coup de cœur du voyage. Perché à plus de 600m d'altitude, Sormano est un village tout à fait typique, sans urbanisation excessive (comme ses voisins) malgré un nombre important de résidences secondaires. Il offre une réelle quiétude sans pour autant être mort (il y a même une école primaire). De part son altitude, les températures sont 2°C à 3°C inférieures à celles du lac, ce qui en période de canicule est vraiment appréciable. Les quelques commerçants sont tous très sympathiques et les prix pratiqués sont bien inférieurs à ce que l'on peut trouver en bordure de lac. C'est également une région où les gens font beaucoup de vélo, malgré les forts dénivelés que l'on peut rencontrer. Il faut dire que le réseau secondaire est limité entre 50km/h et 70km/h et la circulation peu dense. Les bonnes adresses :

  • Da Mara Lago Di Como : super B&B tenu par Mara, très bonne hôte qui a le bon goût de parler français.
  • Restaurant/pizzeria Don Vito : les meilleures pizzas dégustées durant le séjour (cuites au feu de bois, naturellement)

Retour

Un conseil de dernière minute : ne jamais, jamais, JAMAIS, emprunter l'autoroute dans le sens Milan -> Nice, un samedi ! Ou alors, éviter de passer par Savone (Savona). C'est le point de rendez-vous des personnes souhaitant prendre un ferry pour la méditerranée. L'autoroute, bondée, passe de trois voies à une seule pour effectuer une jonction. Autant dire que les bouchons sont légion et qu'il faudra être chanceux pour ne pas tomber sur un bouchon causé par un accident... Résultat, 1h30 quasiment à l'arrêt sous un soleil de plomb.

Friday, 07 June 2019
|
Écrit par
Grégory Soutadé

Thym en fleur

Quoi de mieux pour occuper un vendredi de l'ascension qu'une petite balade sur les hauteurs de Grasse ? Comme en Décembre dernier, l'objectif est le radar de l'aviation civile (Haut-Montet) situé à 1335m d'altitude. Cette fois, il n'est plus question de suivre la conduite de gaz, mais de faire le détour par le col du Clapier. Autre changement : le point de départ qui se fait désormais à partir des terrains de tennis, juste au dessus d'altitude 500. Le parcours est donc porté à un peu plus de 10km aller et autant pour le retour.

Fleur

Début de la randonnée sur les coups de 10h afin de profiter encore un peu de la fraîcheur matinale (~20°C). Le départ est le même que pour le tour de la Marbrière, autant dire que l'on grimpe pas mal sur les premiers kilomètres.

Une fois arrivé tout en haut, il ne faut pas bifurquer vers la Marbrière, mais suivre le chemin principal qui débouche sur le vallon de St Christophe.

Ne pas bifurquer vers la Marbrière

La partie suivante est moins intéressante puisqu'il faut suivre la route sur 1km avant de prendre le chemin forestier en direction du col du Clapier.

Bifurquer vers le col du Clapier Chemin forestier

C'est alors que l'on rejoint la conduite de gaz. Attention à bien poursuivre sur le sentier balisé blanc et rouge et non sur le chemin de la conduite.

Vers la conduite de gaz Les antennes

Vallon St Christophe Continuer sur le chemin balisé

La sortie se fait juste avant la GAEC de la Malle. Poursuivre dans cette direction et prendre le sentier qui la contourne (sur la droite) avant le portail principal sans trop prêter attention aux panneaux d'interdiction d'entrée.

Le plateau de la Malle, d'en bas

Un peu plus loin, il faut tourner sur la gauche en direction du col du Clapier.

Ascension du col du Clapier Ascension du col du Clapier

Vue sur la mer

Au fur et à mesure de l'ascension, le superbe plateau de la Malle se dévoile et même à une centaine de mètres, l'odeur des ovins picote le nez.

Plateau de la Malle

Herbes sèches battues par le vent, thym en fleur. Le comité d'accueil du Clapier est splendide.

Herbes sèches et thym Fleur

Depuis les 1257m d'altitude, on a une vue époustouflante sur le plateau de la Malle, celui de Caussols et celui (au loin) de Calern. Ce détour se révèle au final plus intéressant que le chemin de la conduite de gaz ! On pourra aller explorer les quelques bergeries en ruine.

Plateau de Caussol et Calern

La suite se fait en direction du Haut-Montet, soit par la gauche (chemin balisé en jaune), soit en suivant le bord de la falaise sur la droite. L'idéal est de passer par le second à l'aller même s'il est moins évident.

Traverse du col du Clapier

Retour sur le chemin principal de la conduite. Cette fois, c'est tout droit.

Sans traîner, mais sans courir non plus, il faut bien compter ~2h30 pour atteindre le radar. Après quelques photos, il est temps de faire une pause bien méritée avec un bon casse-croûte.

Le radar du Haut-Montet

Le temps est assez brumeux sur la côte, dommage.

Depuis le Haut-Montet

Le retour suit le même chemin (sauf traverse depuis le col du Clapier), mais est plus rapide (~2h10).

Chemin balisé jaune

Pour l'anecdote, la semelle de ma chaussure droite, sûrement sous le charme du paysage, a décidé de rester sur place à mi-chemin, autant dire que les descentes dans les cailloux avec seulement une mini-semelle s'est révélée plutôt désagréable !

Tuesday, 21 May 2019
|
Écrit par
Grégory Soutadé

Parapluie rose

Couleurs des îles, parfums exotiques. Voilà la promesse de cette édition 2019. D'un point de vue décoration de la ville, le thème a visiblement moins inspiré le comité d'organisation que lors des deux éditions précédentes. Néanmoins, en ce qui concerne les animations, le public n'était pas en reste avec (entre autres) du théâtre, de la danse, un défilé de mode ainsi que ses traditionnels stands sur le cours Honoré Cresp. D'autant plus que le temps, certes changeant, aura été clément.

Une fois passé les portes de la villa Fragonard, l'émerveillement est toujours au rendez-vous devant cette capacité des rosiéristes à créer chaque année de nouveaux styles et couleurs ! J'ai été hélas un peu déçu par l'objectif de mon Canon EOS M10 qui n'a pas réussit à rendre des photos aussi belles que la réalité, il a eu beaucoup de mal à gérer la forte luminosité de la journée.

Sur le cours :

Rose blanche, col rouge

Rose orange, Grasse en arrière plan

Rose violette Roses violet clair

Rose moutarde

Rose blanche, liseret rose Rose jaune, liseret rouge

Rose jaune, liseret rouge

Rose blanche, coeur rosé

Quelques clichés du concours :

Roses roses Rose jaune, liseret orange

Roses blanche, liseret rose Roses blanches et roses

Rose blanche, coeur saumon Rose blanche, coeur rose

Roses rouges Roses rouges

Roses roses Roses roses

Roses tachetées Roses roses

Roses blanches, coeur rose Roses blanches, coeur rose

Rosier de la villa Fragonard

Rose blanche, col rouge Rose blanche, col rouge, abeille

Rose jaune

Statue de la place aux Aires

Wednesday, 10 April 2019
|
Écrit par
Grégory Soutadé

Another day, another script. This one helps to compute the maximum stack usage of a C program. In facts, it combines the output of cflow and GCC GNAT to find the heaviest path used (which is not necessary the deepest). The first one compute target software call graph while option -fstack-usage of GCC creates .su files containing stack usage of all functions.

Targets software are simple embedded software. This script is a simple base not intended to run on all cases, handle dynamic stack nor recursive functions (if you wish to add it...).

A file version is available here.

#!/usr/bin/env python

import os
import re
import argparse

class SUInfo:
    def __init__(self, filename, line, func_name, stack_size):
        self.filename = filename
        self.line = line
        self.func_name = func_name
        self.stack_size = stack_size

    def __str__(self):
        s = '%s() <%s:%s> %d' % (self.func_name, self.filename, self.line, self.stack_size)
        return s

class FlowElement:
    def __init__(self, root, depth, stack_size, suinfo):
        self.root = root
        self.depth = depth
        self.stack_size = stack_size
        self.suinfo = suinfo
        self.childs = []

    def append(self, suinfo):
        self.childs.append(suinfo)

    def __str__(self):
        spaces = '    ' * self.depth
        su = self.suinfo
        res = '%s-> %s() %d <%s:%d>' % (spaces, su.func_name, su.stack_size,
                                        su.filename, su.line)
        return res

def display_max_path(element):
    print('Max stack size %d' % (element.stack_size))
    print('Max path :')
    res = ''
    while element:
        res = str(element) + '\n' + res
        element = element.root
    print(res)

cflow_re = re.compile(r'([ ]*).*\(\) \<.* at (.*)\>:')

def parse_cflow_file(path, su_dict):
    root = None
    cur_root = None
    current = None
    cur_depth = 0
    max_stack_size = 0
    max_path = None
    with open(path) as f:
        while True:
            line = f.readline()
            if not line: break
            match = cflow_re.match(line)
            if not match: continue

            spaces = match.group(1)
            # Convert tab into 4 spaces
            spaces = spaces.replace('\t', '    ')
            depth = len(spaces)/4
            filename = match.group(2)
            (filename, line) = filename.split(':')
            filename = '%s:%s' % (os.path.basename(filename), line)

            suinfo = su_dict.get(filename, None)
            # Some functions may have been inlined
            if not suinfo:
                # print('WARNING: Key %s not found in su dict"' % (filename))
                continue

            if not root:
                root = FlowElement(None, 0, suinfo.stack_size, suinfo)
                cur_root = root
                current = root
                max_path = root
                max_stack_size = suinfo.stack_size
            else:
                # Go back
                if depth < cur_depth:
                    while cur_root.depth > (depth-1):
                        cur_root = cur_root.root
                # Go depth
                elif depth > cur_depth:
                    cur_root = current
                cur_depth = depth
                stack_size = cur_root.stack_size + suinfo.stack_size
                element = FlowElement(cur_root, cur_depth,
                                      stack_size,
                                      suinfo)
                current = element
                if stack_size > max_stack_size:
                    max_stack_size = stack_size
                    max_path = current
                cur_root.append(element)
    display_max_path(max_path)

su_re = re.compile(r'(.*)\t([0-9]+)\t(.*)')

def parse_su_files(path, su_dict):
    for root, dirs, files in os.walk(path):
        for sufile in files:
            if sufile[-2:] != 'su': continue
            with open(os.path.join(path, sufile)) as f:
                while True:
                    line = f.readline()
                    if not line: break
                    match = su_re.match(line)
                    if not match:
                        # print('WARNING no match for "%s"' % (line))
                        continue
                    infos = match.group(1)
                    (filename, line, size, function) = infos.split(':')
                    stack_size = int(match.group(2))
                    key = '%s:%s' % (filename, line)
                    su_info = SUInfo(filename, int(line), function, stack_size)
                    su_dict[key] = su_info


if __name__ == '__main__':
    optparser = argparse.ArgumentParser(description='Max static stack size computer')
    optparser.add_argument('-f', '--cflow-file', dest='cflow_file',
                           help='cflow generated file')
    optparser.add_argument('-d', '--su-dir', dest='su_dir',
                           default='.',
                           help='Directory where GNAT .su files are generated')
    options = optparser.parse_args()

    su_dict = {}

    parse_su_files(options.su_dir, su_dict)
    parse_cflow_file(options.cflow_file, su_dict)

Usage & example

Let's take this simple software as example.

First, compile your software using -fstack-usage options in CFLAGS. It will creates an .su file for each object file. Then, launch cflow on your software. Finally, call my script.

mkdir test
cd test
gcc -fstack-usage gget.c -lpthread -lcurl
cflow gget.c > cflow.res
./cflow.py -f cflow.res

Result:

Max stack size 608
Max path :
-> main() 352 <gget.c:493>
    -> do_transfert() 160 <gget.c:228>
        -> progress_cb() 96 <gget.c:214>
Friday, 05 April 2019
|
Écrit par
Grégory Soutadé

Affiche de la course

Après une année de disette, re voilà La foulée des baous organisée par l'association des entreprises et des commerçants Gaudois pour soutenir l'association "Ensemble avec Benoît" dans le but de récolter des fonds, sensibiliser, mais également d'enregistrer de nouveau donneurs potentiels pour lutter contre les leucémies. Le tout dans une ambiance très conviviale et avec un plateau d'intervenants fournit.

Les personnes possédants un certificat médical (même les enfants) pourront s'adonner à une de ces 4 épreuves :

  • Marche solidaire
  • 4.5km
  • 10km
  • Courses enfant (400m, 800m et 1600m)

Les tarifs sont de 12€ et 14€ (+5€ le jour même) pour les deux courses principales.

Seul petit bémol, la course est organisée le dimanche 21 avril 2019 ... dimanche de Pâques. Espérons que cela ne rebutera pas les futurs participants !

Retour : 343 participants ont fait le déplacement en ce dimanche de Pâques. C'est bien, mais on reste loin des 571 de l'édition précédente. Il faut dire que les prévisions météorologiques n'étaient pas les meilleures. Pourtant, avec un ciel couvert, une légère brise et 18°C, les conditions de course étaient idéales. Les personnes présentes auront pu échanger quelques mots avec le parrain de cette année (qui n'a pas assez été mis en avant) : Stéphane Diagana. On aurait aimé le voir sur la course, malheureusement il était en pleine préparation. Malgré tout, l'ambiance est toujours aussi conviviale du départ jusqu'à l'arrivée et même au-delà. Les heureux coureurs du 10km, ont eu droit à 3 ensembles musicaux : percussions, Provençal et symphonique pour égayer un parcours toujours aussi exigeant. Un grand merci à eux ainsi qu'aux nombreux bénévoles présents tout le long du parcours. Il y a deux ans, je n'avais couru qu'au chronomètre (sans GPS), cette année, j'ai pu enregistrer le profil de la course. Il est finalement assez simple : 3km de descente, 3km de côte, 2km de descente et 2km de côte, avec un final toujours aussi raide ! À ce titre, il faudra particulièrement féliciter les 5 membres de l'équipe All Fitness qui a parcouru les 10km en tractant un chariot pour permettre à une personne handicapée de faire la course. D'un point de vue strictement personnel, j'ai gagné 1"52 en 49"50 et me classe en 62e position.

Dernier gif les joies du code Quand je compile mon code pour la première fois