Architecture of a Real World Haskell Application part II


OK, did take some time since the last post, but I am really busy now.

Last time we looked at the general structure of the application in terms of threads and model/interface separation. For this post, I want to write a little bit about the protocol handling and parsing and how it evolved. While this is not the most central part of the application, it is the oldest and therefore I think good to show some historical development.

Ok, so the tool began as a command line application which could only receive telecommands and send back correct responses (which on itself is not as simple as it sounds). Also at that point in time I just more or less started learning Haskell while my main language at that time was C++, so of course the first solution was a lot C++ like. So let’s see how it goes.

A protocol parser

The used transport protocol is the NCTRS protocol which is quite simple to handle. It is a message based protocol with different headers for different content. It is quite standard in the MCS domain (at least in the ESA context). The obvious thing is to model the NCTRS messages as data structures. For serialisation to/from the socket, the first take was with the cereal library. This worked out quite well, but later I had to change to binary because I also needed bitwise encoding/decoding and there is binary-bits which does that.

So basically it boils down to define suitable data structures and define instances of the Binary class for them. At least that was the first step. So I sat down with the NCTRS Interface Control Document and defined some structures:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data NcduHeaderType =
  NCDU_TC_PKT_TYPE
  | NCDU_PKT_RES_TYPE
  | NCDU_DIR_TYPE
  | NCDU_TC_CLTU_TYPE
  | NCDU_CLTU_RES_TYPE
  | NCDU_TC_FRAME_TYPE
  | NCDU_FRAME_RES_TYPE
  ...
deriving (Ord, Eq, Show, Read, Enum)
 
data NcduTcHeader = NcduTcHeader {
  ncduPktSize :: Word32,
  ncduType :: NcduHeaderType,
  ncduScID :: Word16
} deriving (Show, Read)

The NCTRS has a general header, which is always the same. It contains the size of the message (inclusive the header) in the first 32 bit word, then the type of the message which determines the further structure and the Spacecraft ID. We also derive at least Show and Read instances automatically, so that we can print the content for debugging and also if we want to generate a message from a String. This comes sometimes quite handy. For the HeaderType we also have Eq and Ord so that we can compare them and also Enum although this is practically not needed since we do a direct transformation from the constructors to a number in the protocol.

Depending on the header type there can be various additional header information present. Basically there are three main types: packet, frame and CLTUs, which represent different layers of the protocol stack, and their responses (a packet is contained in segments which are contained in frames which are encoded as CLTUs). The mission control system can decide to skip some layers in the protocol stack (CLTU is the lowest, Packet is the highest), of course with the preposition that the functionality of this layer is then not available. The simplest is the packet layer where the header looks like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
data NcduTcPktHeader = NcduTcPktHeader {
  ncduTcPktTransType :: NcduHeaderTransType,
  ncduTcPktSeqCnt :: Word32,
  ncduTcPktVcID :: Word8,
  ncduTcPktMapID :: Word8
}
deriving (Show, Read)
 
 
data NcduHeaderTransType =
  NCDU_TC_AD_SERTYPE
  | NCDU_TC_BD_SERTYPE
deriving (Ord, Eq, Show, Read)

So we have a transportation type (AD or BD mode), a sequence count, a virtual channel ID and a Multiplexer Access Point ID. Most of this is uninteresting, just for AD and BD a short explanation: AD is a sequence controlled mode where a state machine is utilised to check that the commands arrive in the right sequence and are acknowledged in the first stage from the space craft (there are multiple stages of acknowledges of commands, this is the first on-board). BD mode is kind of an emergency mode, when the spacecraft is a bit in chaos, so there is no real sequence checked, they are fire and forget commands executed immediately to (hopefully) get the spacecraft back into a controllable mode. This is important as AD mode involves a more complex machinery (though the on-board part is simpler than the mission control part).

CLTU and Frame headers are more complicated and contain more fields, but use the same principal, so I omitted them.

To stack them together we can do something like this:

1
2
3
4
5
6
7
8
9
data NcduTcDu = NcduTcDuHeaderPkt {
    ncduTcHdr :: NcduTcHeader,
    ncduTcPktHdr :: NcduTcPktHeader,
    ncduTcData :: B.ByteString}
  | NcduTcDuHeaderCltu {
    ncduTcHdr :: NcduTcHeader,
    ncduTcCltuHdr :: NcduTcCltuHeader,
    ncduTcCltuData :: B.ByteString}
 deriving (Show)

So we have a complete Data Unit for TC’s with the general header, the specific header and the data part which is a ByteString and has to be interpreted by the next layer. I left out the types for TM (the direction simulator -> MCS) and also the responses because they are quite similar.

As we need full control over the binary format, we have to derive our own hand written instances for the Binary class (some examples):

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
instance Binary NcduTcHeader where
  put x = do
    put (ncduPktSize x)
    put (convertType.ncduType $ x)
    put (ncduScID x)
  get = do
    s <- getWord32be
    t <- getWord16be
    scid <- getWord16be
    return $ NcduTcHeader s (convertToType t) scid
 
instance Binary NcduHeaderTransType where
 put NCDU_TC_AD_SERTYPE = put (0 :: Word8)
 put NCDU_TC_BD_SERTYPE = put (1 :: Word8)
 get = do
   val <- get :: Get Word8
   return $ case val of
     0 -> NCDU_TC_AD_SERTYPE
     1 -> NCDU_TC_BD_SERTYPE
     _ -> NCDU_TC_BD_SERTYPE
 
instance Binary NcduTcPktHeader where
 put x = do
   put (ncduTcPktTransType x)
   put (ncduTcPktSeqCnt x)
   put (ncduTcPktVcID x)
   put (ncduTcPktMapID x)
 get = do
   transType <- get :: Get NcduHeaderTransType
   seqCnt <- get :: Get Word32
   vcID <- get :: Get Word8
   mapID <- get :: Get Word8
   return $ NcduTcPktHeader transType seqCnt vcID mapID

This is just boilerplate which is necessary. With automatic deriving from Binary maybe some boilerplate would not have been necessary, but in other parts we need more fine grained control over how the data type is serialized.

Also I don’t find this quite bad to write, in C++ depending on the serialization library used, it is often a lot more wordy. Another important issue is, that the format is now fixed, so if the binary maintainers choose to change the serialisation underneath, we won’t be affected. For fixed binary protocols, this is inevitable.

Ok, so we have some structures and the de/serialisation in place, we now need a function to read the message from the socket and decode it. The first attempt, which stems from long years of low level C and C++ programming looked like this:

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
receiveTC :: Socket -> IO (Maybe NcduTcDu)
receiveTC handle = do
  msg <- recvAll handle (fromIntegral hdrLen)
 
  case B.null msg of
    True -> return Nothing
    False -> do
      let dec = decodeOrFail msg :: Either (B.ByteString, ByteOffset, String) (B.ByteString, ByteOffset, NcduTcHeader)
      logStr nctrsArea $ "Decoded NCTRS header: " ++ show dec
      case dec of
        Left (_,_,err) -> throwIO (DecodeError err)
        Right (_,_,hdr) -> do
          let len = msgCalcPayloadLen hdr
              ncduLen = ncduPktSize hdr
 
          if ncduLen <= 0
            then do
              logStr lAreaAlways "Received illegal Pkt with length=0, ignoring"
              return Nothing
            else do
              pl <- recvAll handle $ fromIntegral len
 
              case B.null pl of
                True -> return Nothing
                False -> do
                  let dec = decodeOrFail $ msg `B.append` pl :: Either (B.ByteString, ByteOffset, String) (B.ByteString, ByteOffset, NcduTcDu)
                  logStr nctrsArea $ "NCDU: " ++ show dec
                  case dec of
                    Left (_,_,err) -> throwIO (DecodeError err)
                    Right (_,_,pkt) -> do
                      logStr nctrsArea $ "Received Pkt: " ++ dumpPkt pkt
                      return $ Just pkt
 
 
recvAll :: Socket -> Int64 -> IO B.ByteString
recvAll handle n = do
  msg <- recv handle n
  case B.null msg of
    True -> do
      logStr nctrsArea "EOF"
      return msg
    False -> do
      let len = B.length msg
      logStr nctrsArea $ "Read bytes: " ++ show len
      if len < n
        then do
          rest <- recvAll handle (n - len)
          return (msg `B.append` rest)
        else do
          logStr nctrsArea $ "Received: " ++ hexDumpString msg
          return $! msg

Yeah! This is really like old-fashioned C-code! Haskellers may forgive me, but this was really the first version I wrote (as I was quite early in the Haskell learning stage). This code is bad in more than one regard, so let’s just quickly go over it and then see if we can come up with something better.

First, there is the recvAll function. It’s sole purpose is to read exactly the number of bytes it is given from the socket. Reason is, that the recv call can return fewer bytes than requested. I first didn’t have this function and then suddenly got decoding errors when the data rate was going up, until I realized this.

So receiveTC first loads hdrLen bytes, which is the length of the NcduTcHeader. Recv returns an empty bytestring when the socket has closed, so in this case we return Nothing. Otherwise we decode the header and in case of a decode error throw an exception. This is one of the bad things, since one time we simply return Nothing, in the other case we throw an exception

Vous gagnez ainsi non seulement du temps, en évitant de devoir prendre rendez-vous avec votre médecin (un processus qi peut être plus ou moins long, en fonction de ses disponibilités), mais aussi en argent. En effet, les pharmacies en ligne proposent très régulièrement des promotions et des offres spéciales qui feront considérablement baisser le prix du Cialis. De plus, elles ne sont soumises à aucun des frais fixes que doivent payer les pharmacies classiques (comme la location d’un local commercial, ou des charges de personnel). Cela permet de réduire le prix de votre médicament, ce qui n’est pas négligeable.Souvent des hommes, qui souffrent de la dysfonction érectile, ne recourent pas aux médicaments, en disant que c’est juste la fatigue et le stress. En fait, beaucoup d’hommes ont peur de coûts élevés des médicaments pour augmenter la puissance. Mais faut-il dire non aux plaisirs de la vie à cause de cela? Pour ceux qui défient de leur budget, il y a des médicaments génériques. Ce sont des médicaments, dont la composition chimique en termes de substances actives est identique à celui de médicament de marque. En d’autres termes, les médicaments génériques sont bioéquivalents à tels produits comme le Cialis, leur efficacité est aussi haute, il n’y a que le coût initial qui distingue ces produits seulement.En cas de baisse brutale de la vision ou de diminution ou perte d’audition, arrêtez la prise du médicament et contactez rapidement votre médecin.Cialis Générique vient en aide dans cette situation– un médicament générique puissant breveté de Cialis connu de la société Lilly, mais qui est vendu au prix qui est considérablement de bon marché.Le médicament ne cause aucune influence sur la composition et la qualité du sperme. Il répond seulement de l’afflux du sang au pénis et de la stimulation de l’érection. C’est pourquoi, Cialis Générique est très désirable pour le couple qui veut faire un bébé. En plus, grâce à l’action prolongée pendant 36 heures, on peut faire plus d’actes sexuels et cela augmentera la chance de conception de l’enfant. levitra Pour aider ceux qui ne sont peut-être pas entièrement convaincus de l’efficacité du Cialis, nous avons pensé que nous voudrions rassembler les éléments suivants: une série d’avis par des patients qui l’ont utilisé.Quel que soit le problème, il est souvent difficile de discerner ce qui est lié à une atteinte physique de ce qui est psychologique. Les idées, les pensées et les sentiments ont autant d’importance que les manifestations physiques.Le tadalafil peut également interagir avec les alphabloquants, notamment ceux utilisés dans le traitement des troubles urinaires dus à un adénome de la prostate.Si vous observez l’un de ces symptômes après avoir ingéré du Cialis, vous devez absolument vous rendre chez votre médecin le plus rapidement possible. Ces effets secondaires peuvent disparaître d’eux-mêmes le temps que votre corps s’adapte au médicament, mais ne prenez pas des risques inutiles. Si votre érection dure plus de 36 heures, il est également nécessaire de vous tourner vers votre médecin, pour ne pas causer des dommages irréversibles à votre appareil génital.Consommation d’alcool: Les fabricants ne conseillent pas la prise de l’alcool avec le médicament Viagra. L’alcool est un anticoagulant et donc il va s’aggraver des effets secondaires du Viagra en réduisant la capacité d’atteindre et de maintenir un érection de pénis. La consommation d’alcool doit être évitée, surtout si un patient prend le VIAGRA et a des troubles cardiaques, des reins et du foie..

Les indications (2) les plus fréquentes pour la pose d’une prothèse pénienne sont des troubles cardio-vasculaires (35,3%) et le diabète (22,8%). Une autre indication, moins fréquente, est celle des patients ayant une subi une prostatectomie (16,5%) qui souffrent de dysérection et pour lesquels ni la rééducation ni les traitements médicamenteux n’ont été satisfaisants.Les problèmes d’érection sont encore aujourd’hui considérés à tort comme un problème honteux . Rares sont donc les hommes à admettre qu’ils en souffrent. Pourtant, cette souffrance est bien réelle car, non contente de nuire à l’équilibre de nombreux couples, elle empoisonne rapidement la vie et l’image de soi des hommes, allant jusqu’à leur faire perdre toute confiance en eux.Si, pour une raison quelconque vous avez dépassé la limite de la dose maximale, vous ne devez pas vous inquiéter du tout. Parce que pour lutter contre les effets secondaires ont a besoin seulement d’un pas – la réduction de la consommation de Cialis Soft générique. Si le patient peut utiliser une pilule tous les deux jours et si vous ressentez un malaise lors de l’intimité sexuelle, vous pouvez prendre la moitié de la dose de Cialis Soft générique pour effacer la gêne. Grâce à l’ajustement de le dosage, il est possible d’obtenir un meilleur résultat et supprimer les effets secondaires qui ont pu survenir à cause d’une surdose. Il est donc conseillé de suivre strictement les règles de dosage pour obtenir un résultat optimal, sans effets secondaires visibles.Nous vous demandons d’indiquer l’information correcte pendant le remplissage de la forme de commande, pourtant nous garantissons sa sécurité complète et l’impossibilité d’être transférée aux tiers. Vous pouvez même ne pas voir le courrier, après avoir payé l’achat à l’aide du virement bancaire et après avoir indiqué votre bureau de poste ou réception de votre centre d’office dans tout endroit en France.Le Cialis est un produit d’une grande fiabilité. Si vous achetez le Cialis – cela signifie que vous allez vous débarrasser de la dysfonction érectile de toute origine et de toute gravité. La raison peut être d’ordre psychologique ou physiologique, vous avez la garantie d’obtenir des résultats excellents même dans les cas les plus difficiles.La prise du Cialis peut faire également subvenir des douleurs au niveau des membres, et du ventre. La transpiration excessive, ainsi qu’un saignement au niveau de l’organe génital. Le médicament peut présenter d’autres effets secondaires, il faut alors songer à contacter votre médecin pour tout effet indésirable ressenti. generic sildenafil Comme tous les médicaments qui auront des effets importants sur votre organisme en régulant votre circulation sanguine et en améliorant votre pression artérielle, vous devez être sûr de l’endroit sur lequel vous allez acheter votre Cialis (Tadalafil) dans une pharmacie fiable. Nous avons sélectionné la pharmacie Treated.com pour son sérieux, sa qualité de service et ses prix très compétitifs. De nombreuses e-pharmacies se fournissent en Asie et vous vendent des molécules qui ne sont pas tracés dont le dosage ne correspond pas du tout à celui préconisé. Il n’est pas rare également de trouver des cachets qui ne contiennent pas du tout les molécules attendues et qui jouent sur des prix très compétitifs pour arriver à diffuser en masse leur gélules. Afin de vous protéger et de vous tenir loin de tous ces charlatans, privilégiez des valeurs sures qui sont reconnues, ont des entreprises domiciliées dans l’Union Européenne et possèdent des avis et des évaluations très positives par les consommateurs et spécialistes du sujet. A ce propos, vous retrouverez sur la gauche notre évaluation objective en fonction de différents critères comme la traçabilité des médicaments, la qualité de la distribution, la rapidité d’envoi le tout avec un rapport qualité / prix défiant toute concurrence avec des médicaments dont l’origine est garantie pour le consommateur.Aujourd’hui les médicaments les plus populaires pour le traitement de la dysfonction érectile en ligne sont le Viagra sans ordonnance en pharmacie, le Cialis Generique et le Levitra en France. Cependant, ceux qui sont confrontés pour la première fois à la nécessité d’acheter ces produits, se posent une question: lequel est mieux?Les effets secondaires sont rares, mais ils peuvent se produire dans les maux de tête, maux de dos, des douleurs musculaires, indigestion ou sensation de froid. Ces effets secondaires ne se produisent pas en même temps.Le dosage minimal c’est 10 mg, mais essayez de ne pas dépasser la limite de 20 mg par jour. Cela est assez suffisant pour le traitement complexe..

La base de Cialis est faite de Tadalafil, à savoir un inhibiteur sélectif. Cette substance détend les muscles du pénis, augment l’artère et accélère le flux sanguin dans le phallus. En conséquence, le pénis est rempli de sang qui prédispose à une construction stable et durable quand il est excité. En plus des effets physiques, le médicament entraîne un effet psychologique sous la forme de relaxation, parce que un homme cesse timide de quelque chose va mal et peut facilement inviter votre fille préférée pour un bon passe-temps. Achetez le Cialis sans ordonnance sur Internet et vous sentiez rassasié!Si les hommes veulent assurer lors de relations intimes, les femmes elles aussi ne veulent pas être totalement soumises. Le médicament Cialis utilisé par les hommes avec des troubles d’érection est également disponible pour les femmes. Car ces dernières pouvant bel et bien être victimes de dysfonctionnement sexuel.Ce traitement convenant aux hommes avec une prostate dont le volume dépasse la moyenne. Cialis n’a pas comme seule vertu de provoquer l’érection chez un homme. Il peut soulager une personne d’une envie incessante de vouloir uriner, ou d’un sentiment de vidange incomplète de la vessie.Dysfonction érectile. On peut diagnostiquer une dysfonction érectile lorsque s’installe une incapacité répétée d’avoir une érection ou de la maintenir suffisament durant le coït. Elle ne doit pas être confondue avec la panne d’érection isolée ou occasionnelle qui, bien que souvent vécue de manière gênanteest banale et peut se produire chez n’importe quel homme en bonne santé physique et psychique. La grande majorité des hommes connaissent un jour ou l’autre de telles périodes sans que leur vie ou celle de leur partenaire n’en soit pour autant perturbée. La dysfonction érectile touche environ 20 % des hommes âgés de 50 ans à 59 ans, une proportion augmentant avec l’âge et la survenue de maladies avec l’avancée en âge. Il n’en demeure pas moins qu’un homme en bonne santé peut demeurer actif sexuellement toute sa vie. viagra for women Différents maux pouvant être à l’origine d’un dysfonctionnement dans l’érection, le Cialis, est un médicament qui agit sur les parties intimes de l’homme, en lui facilitant l’érection. Le médicament peut également lui servir pour le traitement d’une hypertrophie de la prostate. Les effets secondaires ressentis lors de la prise du médicament sont nombreux, c’est pourquoi il ne faut se l’approprier que sur prescription de votre médecin. Cialis, qui peut sauver un couple, existe également pour la gent féminine.Aucune autre maladie génitale masculine n’a tellement de mythes et de fausse information que la dysfonction érectile. L’impuissance masculine est un état quand une érection se produit ou ne se tiens pas correctement pendant le temps suffisant pour des rapports sexuels. Urgence de l’issue de la prévention et du traitement de la dysfonction érectile est liée au fait qu’aujourd’hui la maladie est très répandue. Basé sur les données statistiques, pas tous les hommes qui ont besoin d’un traitement complet demandent des conseilles aux médecins. Les méthodes de diagnostic et de traitement de la dysfonction érectile sont désormais suffisamment nombreux et efficaces, et leur utilisation peut améliorer de façon significative la qualité de vie des hommes.Si vous observez l’un de ces symptômes après avoir ingéré du Cialis, vous devez absolument vous rendre chez votre médecin le plus rapidement possible. Ces effets secondaires peuvent disparaître d’eux-mêmes le temps que votre corps s’adapte au médicament, mais ne prenez pas des risques inutiles. Si votre érection dure plus de 36 heures, il est également nécessaire de vous tourner vers votre médecin, pour ne pas causer des dommages irréversibles à votre appareil génital.Le Cialis a pour autre vertu de soulager cette sensation par une amélioration de l’afflux sanguin vers les organes que sont la vessie et la prostate. Il est alors produit une détente des muscles, pour une diminution des symptômes de l’hypertrophie de la prostate.Des effets secondaires peuvent être ressentis lors du traitement de la prostate par le médicament Cialis.Dans des pays comme la France, il n’est autorisé la vente en ligne que pour les médicaments qu’on peut se procurer sans ordonnance, car acheter le Cialis sans ordonnance peut nuire à votre santé par de sévères effets secondaires..

Facilement vous pouvez acheter le Cialis, dont les qualités de guérison et des composants sont les mêmes que l’original en France. En outre, ces pilules peuvent être achetées à un prix inférieur dans Pharmacie Hommes. Le médicament est une usine de produits pharmaceutiques en Inde et produit sous la licence qui garantit sa qualité.Même si vous décidez d’acheter ce traitement sans aucune ordonnance, il peut être plus prudent et sûr pour vous de vous rendre chez un spécialiste qui pourra vous éclairer et avec qui vous aurez un suivi tout au long de votre traitement.Il s’agit du renouvellement des discours publics sur la sexualité, qui au sortir des “années-sida” redeviennent porteurs d’un certain optimisme. Les conceptions de la sexualité qui ont été développées à l’occasion des différents travaux médico-scientifiques sur l’impuissance masculine tranchent avec les conceptions développées à la même époque dans le contexte de l’épidémie de sida. Le médicament est prescrit pour provoquer, et faciliter des érections chez un homme qui en avait du mal. Au niveau de la prise, il faut respecter la dose prescrite par votre médecin. Évitez de la doubler pour accroître votre efficacité sexuelle. La prise des comprimés de 10 et 20 milligrammes doit se faire en prise unique tous les trois jours. Le médicament peut être pris une fois par jour sur recommandation médicale.Le Tadalafil est un ingrédient actif. Les avis sur le produit démontrent que beaucoup d’hommes sont satisfait avec ce médicament. L’action du médicament dure 36 heures, alors que le Viagra est éliminé d’organisme dans 6-7 heures.En cas d’achat d’une grande confection ou pendant les nouvelles commandes des pilules de traitement de la DE dans la même pharmacie en ligne, vous pouvez profiter d’une livraison gratuite ou d’une possibilité d’acheter Cialis au prix spécial et de compenser ainsi vos frais postaux. L’ensemble des médicaments, pas uniquement ceux pour la dysfonction érectile, existent dans de multiples dosages. 20mg est le dosage le plus élevé du Cialis. natural viagra Une perte soudaine de la vue peut résulter de la prise du médicament, dans pareil cas pensez à vous rapprocher le plus vite possible d’une structure médicale. La prise du médicament ne doit pas se faire avec de l’alcool, le liquide pouvant entraîner des effets secondaires. Le pamplemousse en jus ou en fruit ne doit pas être consommé quand on a l’intention de prendre le médicament.Néanmoins, il faut être prudent si vous choisissez de vous procurer le médicament à partir de chez vous. Car si la vente de produits érectiles a le vent en poupe, les produits contrefaits se mêlent à la danse. Le client qui se procure de produits sous prescription risque d’altérer sa santé et même des amendes.Vous pouvez toujours commander Cialis Générique sans ordonnance dans notre pharmacie en linge, et nous le livrons à l’aide de la livraison rapide..

Ce type de dysfonctionnement peut être causé par des maladies comme le diabète ou l’hypertension artérielle, mais aussi par l’usage de certains excitants comme la cigarette. Une mauvaise alimentation peut également en être la cause, il faut donc éviter le cholestérol. viagra Quand vous utilisez une dose intermédiaire, il est important de ne pas la doubler dans le but de produire des effets plus intenses. Et si vous n’êtes pas satisfait des effets de votre médicament pour l’impuissance, veuillez en priorité consulter votre médecin. En commandant Cialis en ligne, chaque homme peut demander une consultation gratuite du pharmacien de la pharmacie en ligne. Pour recevoir la consultation qualifiée du pharmacien, on peut poser toutes les questions sur les pilules Cialis par courriel ou contacter le pharmacien de la pharmacie en ligne par téléphone.Si vous souffrez de troubles de l’érection, vous pouvez être intéressé par une solution médicamenteuse comme le Cialis. Mais ce produit peut-il être acheté sans ordonnance ? Et si oui comment ? Découvrez comment vous procurer du Cialis sans ordonnance dans cet article, ainsi que toutes les informations pratiques dont vous pouvez avoir besoin pour retrouver une érection normale grâce à ce médicament.Le développement du Viagra doit en outre être compris comme un phénomène culturel à différents plans.La vente du Cialis est effectuée dans les pharmacies ordinaires et dans les pharmacies en ligne, mais qu’est-ce que ce médicament? C’est un remède, qui a des propriétés qui ne sont pas inférieures au célèbre Viagra le traitement de la dysfonction érectile chez des hommes, l’augmentation du flux sanguin vers des organes génitaux, le traitement de problèmes psychologiques et physiologiques, le début d’action dans une demi-heure.Mais pas dans chaque ville et même pas dans chaque région il y a la possibilité de acheter le Viagra et d’autres médicaments pas chers pour aider à résoudre un problème purement masculin. Même si ce produit est dans un magasin pas tous les hommes oserons d’aller dans la pharmacie sans ordonnance en ligne, risquant de détecter leurs problèmes devant des gens connus rencontrés par hasard.Néanmoins, il faut être prudent si vous choisissez de vous procurer le médicament à partir de chez vous. Car si la vente de produits érectiles a le vent en poupe, les produits contrefaits se mêlent à la danse. Le client qui se procure de produits sous prescription risque d’altérer sa santé et même des amendes.Le Cialis Générique et Sildenafil (Viagra) est produit par les différents fabricants, dans une variété de formes et dosages, ayant des certaines contre-indications, qui, dans certains cas, peuvent entraîner des effets secondaires. Par conséquent, pour faire un bon choix lisez attentivement les informations que nous vous proposons.Si les hommes veulent assurer lors de relations intimes, les femmes elles aussi ne veulent pas être totalement soumises. Le médicament Cialis utilisé par les hommes avec des troubles d’érection est également disponible pour les femmes. Car ces dernières pouvant bel et bien être victimes de dysfonctionnement sexuel..

Cialis Soft générique est caractérisée en respect de la composition et les propriétés du médicament d’origine, mais il est beaucoup moins cher. Cialis est fabriqué aux Etats-Unis, et son homologue – Cialis générique – en Inde. L’ingrédient actif de Cialis Soft – Tadalafil. En outre, la préparation contient du lactose monohydraté, le laurylsulfate de sodium, le stéarate de magnésium, le talc et le colorant. cheap cialis Le Viagra est un produit probablement le plus célèbre, le plus populaire et si vous voulez le plus avancé utilisé pour le traitement de la dysfonction érectile. Le Viagra est un comprimé contenant le citrate de sildénafil. L’un de nombreux avantages de traitement avec le Viagra est ce qu’il n’a pas besoin d’injections dans le pénis ou d’autres procédures médicales, il suffit de prendre une pilule avant le rapport sexuel. En effet l’action du médicament est très simple et en même temps très efficace: le Viagra est capable d’augmenter la quantité du sang qui circule vers le pénis. Voici comment le Viagra aide un homme à provoquer une érection naturelle, et ce naturel du processus est presque une innovation majeure et un avantage du médicament par rapport aux concurrents.Ce médicament est moins populaire que Viagra. Le fait est que Viagra est utilisé pendant plus longtemps (plus de 15 ans). Pourtant le médicament générique Cialis a des avantages indiscutables en ce qui concerne la durée et l’effet d’action, et son universalité et prix de bon marché .Si vous observez l’un de ces symptômes après avoir ingéré du Cialis, vous devez absolument vous rendre chez votre médecin le plus rapidement possible. Ces effets secondaires peuvent disparaître d’eux-mêmes le temps que votre corps s’adapte au médicament, mais ne prenez pas des risques inutiles. Si votre érection dure plus de 36 heures, il est également nécessaire de vous tourner vers votre médecin, pour ne pas causer des dommages irréversibles à votre appareil génital.Pour éviter les interactions, assurez vous d’informer votre médecin de tous les médicaments de prescription ou de vente libre que vous prenez actuellement. Cela inclut également les vitamines et les suppléments naturels parce qu’ils peuvent affecter le Levitra. Parler toujours votre médecin avant de prendre un nouveau médicament ou suspendre un médicament actuel. Assurez-vous d’informer votre médecin si vous prenez des nitrates, alpha-bloquants, Flomax, Cardura, Minipress ou Uroxatral. Également informez votre médecin si vous prenez des médicaments pour traiter l’arythmie, tels que la quinidine, procaïnamide, amiodarone ou sotalol. Ne prenez pas Levitra avec d’autres médicaments utilisés pour traiter la dysfonction érectile.Peut causer un effet curatif lors de la prise régulière. Pourtant après la fin de la prise, il est très vite et efficacement sorti de l’organisme. N’entraîne pas l’accoutumance et permet à l’organisme de réagir de la même manière pendant la prise de la dose suivante.Les causes de la faiblesse sexuelle étant diverses, l’homme atteint peut également suivre une thérapie cognitivo comportementale. Il parle de ses problèmes avec un psychothérapeute, retraçant une partie de sa vie. Ce sera par la suite au spécialiste de déceler les causes du dysfonctionnement érectile pour ensuite y remédier.Les effets secondaires typiques de Levitra incluent des maux de tête, rougeur du peau, congestion nasale, malaises digestifs, infections des voies urinaires, une sensibilité accrue à la lumière et de changements de vision. Contactez votre médecin si vous avez des problèmes avec les effets secondaires, surtout si les effets secondaires ne disparaissent pas ou si elles s’aggravent au fil du temps.Pourtant la meilleure solution serait d’en parler, car des solutions pour le traitement du dysfonctionnement érectile existant. Il est ainsi possible de se procurer des médicaments capables de booster le flux artériel qui provoque l’érection. La compagne de l’homme qui est sous traitement peut aider son compagnon lors de rapports sexuels par des caresses pour stimuler l’érection..

Bien qu’il n’y a pas d’effets secondaires de l’utilisation de Cialis Soft générique, et tout le monde a le droit d’acheter Cialis en ligne, la consommation doit être limitée à un seul comprimé toutes les 24 heures. Si ou si, les effets secondaires apparaissent seulement quand cette règle en particulier est violé. Les effets secondaires ont déjà été mentionnés dans le paragraphe ci-dessus où le surdosage et ses conséquences ont été expliqués complètement. Mis à part les effets secondaires déjà mentionnées, la surdose conduit à quelques autres effets secondaires. Par exemple, vertiges, maux de tête violents, nausées, rougeur dans diverses parties du corps, y compris le visage, oreilles, cou et la poitrine. En raison de ces problèmes, la surdose est strictement interdite. Par conséquent, à moins que quelqu’un prend une surdose, il ne trouvera pas des effets secondaires visibles.C’est suite à une première introduction fructueuse aux États-Unis dans les années 2000 et à la validation de cette molécule approuvée aux États-Unis puis en Europe lorsque l’efficacité et la préparation ont été prouvé.Quelles possibilités donne un effet prolongé du Cialis? Tout d’abord, vous ne devez pas planifier vos rapports sexuels à l’avance pour un certain moment. Souvent un moment spécial est détérioré par une attente de début d’action du médicament, mais dans le cas du Cialis, vous ne devez pas vous inquiéter. Vous pouvez le prendre le matin et le soir profiter de possibilités qu’il offre. Evidemment, l’effet du Cialis ne cesse pas après le premier contact sexuel. Autrement dit, vous obtenez la confiance pour 36 heures, ce qui est très important. fildena Malgré ses avantages certains, il est possible que vous ne soyez pas à l’aise à l’idée d’acheter Cialis sans ordonnance auprès d’une pharmacie en ligne. Rassurez-vous, il existe des moyens de vous assurer de la fiabilité du médicament que vous avez commandé. La première précaution à prendre est bien évidemment d’éviter les sites douteux, qui proposeraient d’acheter du Cialis sans passer par une consultation virtuelle avec un professionnel de la santé. Si les prix pratiqués par une plateforme sont beaucoup trop bas, cela cache généralement une arnaque. Ne soyez donc pas tenté d’acheter un produit moins cher, qui peut être au mieux inefficace, au pire dangereux pour votre santé.Ce type de dysfonctionnement peut être causé par des maladies comme le diabète ou l’hypertension artérielle, mais aussi par l’usage de certains excitants comme la cigarette. Une mauvaise alimentation peut également en être la cause, il faut donc éviter le cholestérol.Peu fréquents (moins de 1 % des utilisateurs): sensations vertigineuses, vision trouble, douleur oculaire, boudonnement d’oreilles, palpitations, tachycardie, essoufflement, saignement de nez, douleur abdominale, vomissement, nausées, brûlures d’estomac, rougeur cutanée, réaction allergique, présence de sang dans les urines.Personne ne saura les détails de votre vie sexuelle. Personne ne devinera ce que vous avez acheté.Le médicament est prescrit pour provoquer, et faciliter des érections chez un homme qui en avait du mal. Au niveau de la prise, il faut respecter la dose prescrite par votre médecin. Évitez de la doubler pour accroître votre efficacité sexuelle. La prise des comprimés de 10 et 20 milligrammes doit se faire en prise unique tous les trois jours. Le médicament peut être pris une fois par jour sur recommandation médicale.Outre le fait de stimuler une érection, le Cialis a une autre vertu qui peut soulager les malades de la prostate. En effet, le fait que l’hypertrophie bénigne de la prostate soit soulagée par le médicament a été approuvé depuis l’année 2013. Cette maladie, s’attaquant aux personnes âgées, mais nocive pour la santé, fait ressentir aux personnes affectées des problèmes en rapport avec l’urine.Un rétrécissement des vaisseaux sanguins peut également entraîner des dysfonctionnements érectiles. L’organe génital du mâle contient des vaisseaux sanguins. Ces vaisseaux doivent recevoir un afflux de sang commandé par le cerveau pour provoquer une érection. L’organe génital ayant rétréci, l’érection devient alors impossible..

La base de Cialis est faite de Tadalafil, à savoir un inhibiteur sélectif. Cette substance détend les muscles du pénis, augment l’artère et accélère le flux sanguin dans le phallus. En conséquence, le pénis est rempli de sang qui prédispose à une construction stable et durable quand il est excité. En plus des effets physiques, le médicament entraîne un effet psychologique sous la forme de relaxation, parce que un homme cesse timide de quelque chose va mal et peut facilement inviter votre fille préférée pour un bon passe-temps. Achetez le Cialis sans ordonnance sur Internet et vous sentiez rassasié! viagra preis De manière générale, le Cialis s’adresse principalement aux hommes souhaitant retrouver une vie sexuelle normale avec leur(s) partenaire(s). Certains médicaments contenant ce même principe actif sont cependant vendus aux femmes qui peuvent elles aussi souffrir de dysfonctionnements sexuels, liés notamment à la ménopause (qui rend les zones érogènes du sexe féminin moins sensibles). Le Cialis leur permettrait donc d’avoir de meilleurs et de plus long orgasmes (en agissant par exemple sur leur libido), mais aussi de soigner des cas de kystes et de fibromes. Dans ce cas, il agira principalement en augmentant la production de testostérone par l’organisme et en améliorant la sensibilité externe des organes sexuels.En cas de baisse brutale de la vision ou de diminution ou perte d’audition, arrêtez la prise du médicament et contactez rapidement votre médecin.Les produits tels que le Kétoconazole, le Ritonavir, le Saquinavir, l’itraconazole, érythromycine, et d’augmenter la concentration de Tadalafil dans le sang.Des précautions sont nécessaires chez les hommes présentant une malformation du pénis ou souffrant d’une maladie les prédisposant au priapisme (drépanocytose, myélome multiple, leucémie).En outre, n’oubliez pas que la prise d’une dose intermédiaire Cialis parallèlement à de l’alcool ou après un repas copieux, peut empêcher le médicament d’agir efficacement. Ainsi, avant de demander à votre docteur d’augmenter votre dosage, assurez-vous de respecter l’ensemble des consignes relatives à la bonne utilisation du Cialis.Anonymat – c’est un principal avantage de l’achat de comprimés de Viagra en ligne. Il n’a jamais été aussi facile de commander le Viagra. En commandant le Viagra et Cialis vous allez changer votre vie pour le mieux. Votre vie sexuelle sera grandement améliorée. Ne manquez pas de chance de commander le Viagra aujourd’hui dans notre pharmacie en ligne. En achetant les produits d’augmentation de la puissance, vous pouvez être sûr que vous allez obtenir des conseils d’experts sur la prise et les caractéristiques des médicaments qui sont disponibles dans notre pharmacie. Nous avons un excellent service qui va vous satisfaire.Aujourd’hui les médicaments les plus populaires pour le traitement de la dysfonction érectile en ligne sont le Viagra sans ordonnance en pharmacie, le Cialis Generique et le Levitra en France. Cependant, ceux qui sont confrontés pour la première fois à la nécessité d’acheter ces produits, se posent une question: lequel est mieux?Curieusement, la découverte du Viagra a été occasionnelle. Ainsi, en 1992 la même compagnie pharmaceutique Pfizer a réalisé des essais cliniques de son nouveau médicament – citrate de sildénafil. Ce médicament a été développé pour traiter des maladies cardiaques. Savants estimaient que ce médicament va augmenter le flux sanguin vers le muscle cardiaque et par suite la pression artérielle va diminuer. Cependant, malheureusement, les scientifiques ont été frustré, car le médicament n’a eu aucun effet sur le flux sanguin dans le muscle cardiaque (myocarde) et sur la pression artérielle. Mais, comme il s’est avéré, il avait un autre effet remarquable. C’était une grande surprise pour des savants – la plupart des hommes qui ont participé aux essais cliniques du médicament ne voulaient pas retourner la tablette malgré l’échec durant les essais. Plus tard ils ont raconté aux savants ce qu’ils ont remarqué. C’était une amélioration de la qualité d’érections et les savants ne manquaient pas de profiter de cela et ont un peu corrigé l’objectif de leur recherches. Le nouveau médicament a été nommé par le mot Viagra, formé par la fusion de mots vigor (la puissance, la force, l’énergie) et Niagara – la plus grande, forte et puissante cascade en Amérique du Nord.En outre, n’oubliez pas que la prise d’une dose intermédiaire Cialis parallèlement à de l’alcool ou après un repas copieux, peut empêcher le médicament d’agir efficacement. Ainsi, avant de demander à votre docteur d’augmenter votre dosage, assurez-vous de respecter l’ensemble des consignes relatives à la bonne utilisation du Cialis..

Le Cialis est réputé pour faciliter à l’homme des érections qu’il avait du mal à avoir, mais avec l’aide de sa partenaire qui doit stimuler cette érection. Est-ce que ce médicament joue un rôle dans la fertilité de l’homme ? Le médicament a été testé sur des chiens qui servaient de cobayes et il a été noté une affectation de l’ensemble des processus aboutissant à la formation des spermatozoïdes.Ne manquez pas cette chance unique d’acheter le Viagra pour un très bon prix en ligne. Si vous avez des maladies, vous devriez parler avec votre médecin. Vous pouvez commander le Viagra sans ordonnance, mais des effets secondaires du médicament pour le traitement de l’impuissance devont être pris à l’attention. Lorsque vous commandez un produit chez nous, vous pouvez clarifier toutes vos questions. Vous pouvez non seulement acheter le Viagra sans ordonnance, mais aussi recevoir des conseils médicaux de haute qualité.Exposer vos antécédents médicaux complets avant de prendre Levitra pas cher. Votre médecin a besoin de savoir si vous avez eu des problèmes cardiovasculaires, tels que des douleurs à la poitrine, insuffisance cardiaque, arythmie, attaque cardiaque, hypertension, hypotension, ou si vous avez des antécédents familiaux d’une maladie appelée syndrome du QT long. Informez votre médecin si vous avez eu un accident vasculaire cérébral, troubles hépatiques, problèmes rénaux, rétinite pigmentaire, ulcères ou des saignements. Si quelque fois vous avez eu une érection qui a duré plus de 4 heures, n’oubliez pas d’informer votre médecin. D’autres conditions qui doivent être rapportées incluent anémie falciforme, le myélome multiple et la leucémie. Votre médecin peut vous aider à choisir le traitement mieux adapté pour vous.Internet va vous aider. Ici vous pouvez commander beaucoup de produits contre l’abaissement de la puissance. Des avantages d’un tel achat – un prix abordable, une livraison dans les régions différentes, une confidentialité et une facilité de faire votre commande. Alors, n’attendez pas, achetez les médicaments Génériques en ligne et profitez de la vie!Il s’agit du renouvellement des discours publics sur la sexualité, qui au sortir des “années-sida” redeviennent porteurs d’un certain optimisme. Les conceptions de la sexualité qui ont été développées à l’occasion des différents travaux médico-scientifiques sur l’impuissance masculine tranchent avec les conceptions développées à la même époque dans le contexte de l’épidémie de sida. Les produits tels que le Kétoconazole, le Ritonavir, le Saquinavir, l’itraconazole, érythromycine, et d’augmenter la concentration de Tadalafil dans le sang.Cialis est le seul médicament testé qui traite les problèmes d’érection pendant 36 heures. Beaucoup d’hommes préfèrent Cialis parce qu’ils peuvent prendre le médicament et ne se sentent pas pressés pour avoir des relations sexuelles. Le médicament peut commencer à agir en seulement 30 minutes, par conséquent il est aussi possible d’avoir des relations sexuelles spontanées. Cialis peut traiter les problèmes d’érection légère, modérée et sévère. Il peut être pris avec ou sans nourriture, par conséquent il est donc facile à utiliser Cialis dans le cadre de la vie quotidienne.Cialis est le meilleur médicament pour le traitement de la dysfonction érectile (DE), qui est commercialisé dans les pharmacies en ligne françaises sans ordonnance. Grâce à ce que les visiteurs des pharmacies en ligne ont une possibilité d’acheter Cialis sans ordonnance au prix bas, les hommes, achetant les comprimés de traitement de la DE sur l’Internet, économisent non seulement leur temps, mais aussi leur argent.On doit aussi se rappeler que Viagra détériore la qualité du sperme et sa capacité de fertilisation, ce qui peut mener à l’infertilité. Toutefois, cela se produit uniquement lorsque sildénafil est pris sans contrôle.Un dysfonctionnement érectile est rarement dû à une seule cause. En règle générale, il résulte de multiples mécanismes, d’autant plus que le sujet avance en âge. La survenue d’un dysfonctionnement érectile n’est jamais un hasard. Pour cette raison, il est nécessaire de toujours rechercher des facteurs prédisposant (pourquoi lui ?), déclenchant (pourquoi maintenant ?) ou entretenant (pourquoi encore ?) un dysfonctionnement érectile. tadalafil dosierung.

. This is really bad ™. But anyway, the exception also terminates the reading thread, so that for the mission control system the connection goes down, which in case of a decoding error is ok.

Then the remaining length is calculated, in that the length of the header is subtracted from the complete message length. Then this new length bytes are read again from the socket. In case all is well, the bytestring containing the header and the read rest is concatenated and decoded so that the complete NcduTcDu is available. This is another shortcoming, as the primary header is decoded twice. Then after some possible error case handling, the TC is returned.

I think it is easy to see, that this works, but it is inconsistent in the error handling, inefficient and also some the decoding of the primary header is redundant.

Ok, time to improve this. The problems of this code are just a symptom of the interleaving of reading and decoding the messages. One tool, which does this better is when using attoparsec. It is a fast binary parser. For this, the get implementations of Binary Instances for the NCTRS data structures will be replaced with the attoparsec implementation:

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
ncduTcParser = do
  hdr <- ncduTcHeaderParser
 
  let len = msgCalcPayloadLen hdr
 
  case (ncduType hdr) of
    NCDU_TC_CLTU_TYPE -> do
      chdr <- ncduTcCltuHeaderParser
      payl <- A.take $ fromIntegral (len - cltuSecHdrLen)
      return $ NcduTcDuHeaderCltu hdr chdr (B.fromStrict payl)
    NCDU_CLTU_RES_TYPE -> do
      chdr <- ncduTcCltuResponseParser
      return $ NcduTcDuHeaderCltuResp hdr chdr
    NCDU_TC_FRAME_TYPE -> do
      chdr <- ncduTcCltuHeaderParser
      payl <- A.take $ fromIntegral (len - cltuSecHdrLen)
      return $ NcduTcDuHeaderCltu hdr chdr (B.fromStrict payl)
    _ -> do
      phdr <- ncduTcPktHeaderParser
      payl <- A.take $ fromIntegral (len - pktHdrLen)
      return $ NcduTcDuHeaderPkt hdr phdr (B.fromStrict payl)
 
ncduTcHeaderParser = do
  len <- anyWord32be
  typ <- convertToType <$> anyWord16be
  scid <- anyWord16be
  return $ NcduTcHeader len typ scid
 
ncduTcPktHeaderParser = do
  transType <- ncduTransTypeParser
  seqCnt <- anyWord32be
  vcID <- anyWord8
  mapID <- anyWord8
  return $ NcduTcPktHeader transType seqCnt vcID mapID

This is more or less a direct translation from the Binary instances to attoparsec. This piece also uses attoparsec-binary helper functions.

Ok, as a first try, the receiveTC function can now be implemented as:

1
2
3
4
5
6
7
receiveTC :: Socket -> IO (Maybe NcduTcDu)
receiveTC sock = do
  result <- parseWith (N.recv sock 4096) ncduTcParser BS.empty
  case result of
    A.Done _ r -> return $! Just r
    A.Fail _ _ _ -> return Nothing
    A.Partial f -> return Nothing

And guess what? It works! with a lot less lines of the receiving function. Still it is not correct, as the Partial result is not handled correctly, which is bad, but for a proof of concept this is ok.

But we can also go a step further and let the looping and handling of partials be handled by a streaming library. An this is where we change to conduits. Conduits stream data through a pipeline where we can put individual pieces together. So it would be cool, if we have a socket component which streams it’s data to  a component which can use attoparsec which streams it’s data to a component which does further processing. And fortunately, these components are available. We can use the conduit-extra library, which contains conduits for networking and attoparsec (and also binary if we want to use it instead). Cool, so lets write the whole receive loop in conduits:

1
2
3
4
5
6
7
8
9
receiveLoop sock handler = do
 result <- sourceSocket sock $= conduitParserEither ncduTcParser $$ sink
 return result
 where
   sink :: Sink (Either ParseError (PositionRange, NcduTcDu)) IO ()
   sink = awaitForever $ \tc -> do
     case tc of
       Left err -> liftIO $ logStr lAreaAlways $ show err
       Right (_, tc) -> liftIO $ handler tc

Ok, we have the pipeline as the first line in the function: it uses a sourceSocket on the given socket which streams the data into a conduitParserEither of the attoparsec conduit which simply uses the ncduTcParser we defined earlier and finally puts it into a sink. The sink itself is very simple: it uses conduit’s awaitForever function to get/wait for data from upstream and in case it gets a valid TC from the attoparsec parser, it just calls the given handler function with it. In case of an error it logs the error and continues.

Ok, so how does it fit into the bigger picture? If you remember the TC thread which receives the TC’s and forwards them to the next layers of processing from the last post, we now can simplify that to:

1
2
3
4
5
6
7
8
9
10
readSocket :: Socket -> TCChannel -> Simulation ()
readSocket handle tcChan = do
  action handle tcChan
 
  where
    action handle tcChan = do
      res <- liftIO $ receiveLoop handle (handler tcChan)
      return ()
      where
        handler tcChan pkt = liftIO $ atomically $ writeTChan tcChan $ TCDU pkt

So it just calls the receiveLoop with a handler, that packs the TC into a data constructor, which says that the processing should process this NCTRS TC Data Unit (instead of doing other things like terminating…) and puts this into the TChan for the TC Processor. That’s it!

The functions are shorter and (if you once got through the concepts) quite readable. I think this streaming approach combined with different possibilities is a cool thing. If I imagine to implement this in C++, I get some template headaches and would have to write much more.

That’s it for this time, nothing really ground breaking here, but maybe it is useful for someone.

Also, there are some other projects coming up, which will then really use Haskell applications inside the operational context of mission control and not just testing, so the next challenges are on the way. Let’s see how it works out then…

 

 

1 thought on “Architecture of a Real World Haskell Application part II

  1. Pingback: Binding to a C++ CORBA interface in Haskell | Random Thoughts

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.