From af305fdd72e617e1c882146e4d777ad3e167e186 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Thu, 13 Jan 2022 10:02:00 -0300 Subject: [PATCH] Added some examples of the field types in the XML --- content/research/decoding-fast-examples.md | 4 ++ content/research/decoding-fast.md | 46 ++++++++++++++++++++++ content/research/decoding-fast.pt.md | 44 +++++++++++++++++++++ 3 files changed, 94 insertions(+) diff --git a/content/research/decoding-fast-examples.md b/content/research/decoding-fast-examples.md index 66e593a..e884aee 100644 --- a/content/research/decoding-fast-examples.md +++ b/content/research/decoding-fast-examples.md @@ -230,6 +230,10 @@ faster now: not present, but because the previous value was 53, the ID for username "Me" is 54. +# Decimals + +# Presence Map Usage + --- Changelog: diff --git a/content/research/decoding-fast.md b/content/research/decoding-fast.md index 9c6f9ca..1e10ede 100644 --- a/content/research/decoding-fast.md +++ b/content/research/decoding-fast.md @@ -1,6 +1,7 @@ +++ title = "Decoding the FAST Protocol" date = 2022-01-10 +updated = 2022-01-13 [taxonomies] tags = ["finance", "binary", "protocol", "fix", "fast"] @@ -173,6 +174,13 @@ optional integer with value 0 is, actually, Null; to get the value 0 for the field, the incoming data will have value 1, which is decremented in 1 and goes back to 0. +In the template, the fields appear as + +- ``: Unsigned Int of 32 bits. +- ``: Unsigned Int of 64 bits. +- ``: Signed Int of 32 bits. +- ``: Signed Int of 64 bits. + ### Types: Strings ASCII strings are pretty simple to read: Again, the decoder keeps reading the @@ -199,6 +207,8 @@ here. Optional strings are Null when the first byte have a stop bit set and every other bit is zero. +In the template, a string field appears as ``. + ### Types: Sequences Sequences are basically arrays. The first field of a sequence is the "length" @@ -209,6 +219,20 @@ even include more sequences. Optional sequences affect the way the length is read: If optional, the length should be treated as an optional Integer and thus the size is decremented by 1. +In the template, the sequence appears as ``, with the length +following it. An example is + +```xml + + + +``` + +{% note() %} +I describe most of the length fields with a name starting with "No". That's +because the FIX spec defines the lengths with that prefix. +{% end %} + ### Types: Decimals Decimals are formed by two fields: Exponent and Mantissa. The way it works is @@ -227,6 +251,16 @@ Also, because Exponent and Mantissa are two fields, they can have different operators. I'll show some examples after the Operator, mostly because I've seen both with different operators and they make a mess to read. +In the template, the decimal field appears as ``, with the exponent +and mantissa as internal fields. + +```xml + + + + +``` + ### Type: Presence Map Presence Maps are used in conjunction with operators. They are read like @@ -280,6 +314,8 @@ dealing with the incoming value. When a field have No Operator, there will be no bit in the Presence Map. +All the previous examples of the template have no operator. + ### Operator: Constant A field with the Constant operator will not appear in the incoming data and the @@ -316,6 +352,14 @@ In a way, you can read this: Is the value present in the incoming data otherwise, use the default value. {% end %} +Example + +```xml + + + +``` + ### Operator: Copy The copy operator indicates that the value for this record have the same value @@ -589,3 +633,5 @@ mandatory sequences. - 2022-01-10: First release. - 2022-01-10: Added information about the template versioning. +- 2022-01-13: Added examples of the tags in the template for the field types + and examples for operators. diff --git a/content/research/decoding-fast.pt.md b/content/research/decoding-fast.pt.md index c9271e9..91ec59a 100644 --- a/content/research/decoding-fast.pt.md +++ b/content/research/decoding-fast.pt.md @@ -1,6 +1,7 @@ +++ title = "Decodificando o Protocolo FAST" date = 2022-01-10 +updated = 2022-01-13 [taxonomies] tags = ["finanças", "binário", "protocolo", "fix", "fast"] @@ -177,6 +178,13 @@ em 1. O motivo é que deve haver uma forma de diferenciar entre 0 e Null. Assim, um inteiro que seja decodificado para 0 é, na verdade, Null; para obter o valor 0 num inteiro, é enviado o valor 1, que é decrementando por 1 e volta a zero. +No template, os campos aparecem como + +- ``: Inteiro sem sinal de 32 bits. +- ``: Inteiro sem sinal de 64 bits. +- ``: Inteiro com sinal de 32 bits. +- ``: Inteiro sem sinal de 64 bits. + ### Tipos: Strings Strings em ASCII são bem simples de serem lidas: Novamente, o decodificador @@ -204,6 +212,8 @@ eu decidi não comentar aqui. Strings opcionais são Null quando o primeiro byte tiver o bit de mais alta ordem ligado e todos os demais desligados. +No template, um campo de string aparece como ``. + ### Tipos: Sequências Sequências são basicamente arrays. O primeiro campo de uma sequência é o @@ -215,6 +225,20 @@ Sequências opcionais afetam a forma como o campo de tamanho é lido: Se a sequência é opcional, o tamanho deve ser tratado como um inteiro opcional e, portanto, decrementando em 1. +No template, a sequência aparece como ``, com o tamanho logo depois. +Um exemplo é + +```xml + + + +``` + +{% note() %} +Eu descrevo a maior parte dos campos de tamanho com um nome que começa com +"No". Isso é porque a especificação do FIX define os tamanhos com esse prefixo. +{% end %} + ### Tipos: Decimais Decimais são formados por dois campos: Expoente e Mantissa. A forma como isso @@ -235,6 +259,16 @@ diferentes. Eu vou mostrar exemplos depois de explicar os Operadores, principalmente porque eu vi os dois com operadores diferentes e a leitura é complicada. +No template, um campo decimal aparece como ``, com o expoente e a +mantissa como campos internos. + +```xml + + + + +``` + ### Tipo: Mapa de Presença Mapas de Presença são usados em conjunto com operadores. Eles são lidos da @@ -328,6 +362,14 @@ pelo Mapa de Presença)? Leia o valor dos dados de entrada; caso contrário, use o valor default. {% end %} +Exemplo + +```xml + + + +``` + ### Operador: Copy O operador Copy (Cópia) indica que o valor deste campo neste registro tem o @@ -602,6 +644,8 @@ Changelog: - 2022-01-10: Primeira versão. - 2022-01-10: Adicionada informações sobre o versionamento de templates. +- 2022-01-13: Adicionados exemplos das tags no template para os tipos de campos + e exemplos dos operadores.