diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f3f0ce3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+pages
+.hugo_build.lock
\ No newline at end of file
diff --git a/content/movingfeaturesformats/wkb.md b/content/movingfeaturesformats/wkb.md
index fab8665..09c19b3 100644
--- a/content/movingfeaturesformats/wkb.md
+++ b/content/movingfeaturesformats/wkb.md
@@ -1,7 +1,7 @@
---
title: Well-Known Binary (WKB)
date: 2022-07-29T14:22:51+02:00
-draft: true
+draft: false
---
“Well-known binary” is a scheme for writing moving features into a platform-independent array of bytes, usually for transport between systems or between programs. By using WKB, systems can avoid exposing their particular internal implementation of moving feature storage, for greater overall interoperability. It is an extension of the scheme for writing a [simple features](https://en.wikipedia.org/wiki/Simple_Features) geometry into a [platform-independent array of bytes](https://libgeos.org/specifications/wkb/).
diff --git a/public/404.html b/public/404.html
deleted file mode 100644
index ff56414..0000000
--- a/public/404.html
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-
MEOS borrows from PostgreSQL the computation model for aggregate operations. These operations are defined in terms of state values, state transition functions, and final functions. An aggregate operation uses a state value that is updated as each successive input value is processed. The data type for the state value depends on the aggregate operation. It is a set or a span type when aggregating time values, or a temporal type when aggregating temporal values. The state transition function takes the previous state value and the aggregate’s current value, and returns a new state value. A final function takes the ending state value and returns the aggregate result.
-
An example of usage of aggregate operations in MEOS is given here.
We explain next the skip list structure implemented in MobilityDB for efficiently implementing temporal aggregate operations. The struture is illustrated in the figure below.
-
-
The skip list structure contains the following elements.
-elemType contains the type of elements stored in the skip list.
-capacity is the maximum number of elements the skip list can currently store.
-next is the index of the free next element.
-length is the current number of values stored.
-freed is an array containing the indexes of the elements deleted whose space can be reused.
-freecount is the number of deleted elements.
-freecap is the current size of the freed array.
-tail is the index of the tail element of the list.
-extra is a pointer to a structure containing additional information to be passed to the aggregate function. This is used when aggregating temporal points to keep the SRID and the dimensionality of the values.
-extrasize is the size of the extra structure.
-elems is an array containing the elements of the skip list.
-
As shown in the figure, to minimize memory allocation operations, the skip list uses a contiguous memory space for its elements. This is to contrast with an alternative implementation in which every element of the skip list is allocated individually as in the figure shown here. Each element contains a value (shown in the yellow boxes), its current height, and an array of pointers (of size four in the figure) to other elements. Due to its memory structure, the pointers between skip list elements are not actually pointers, but values of the index of the element pointed to. This is implied in the figure by the dashed arrows. The grayed cells in the figure show unused pointers, that is, those whose index is greater that the current height of the element. The array of skip list elements is an expandable struture, it will expand automatically when it is full.
-
In the figure, the values 1 to 10 represent timestamps. In this case, the values stored in the skip list are passed by value and thus the skip list element contains the value. If on the contrary, the values stored in the skip list are passed by reference, as is the case for spans or for temporal values, a pointer to the address where the structure is located will be stored as value of the element.
-
The figure below shows the contents of the skip list after removing the element with value 9. As can be seen, the array freed contains the indexes of the elements deleted and whose space can be reused.
-
-
Finally, the next figure shows the contents of the skip list after inserting the element with value 11.
-
-
As can be seen, the free value from the previous delete is reused when inserting a new value. If there are no more free values to be reused, the new value will be stored at the next available place of the structure and the pointers will be updated similarly.
MEOS provides temporal types, which represent the evolution on time of values of some element type, called the base type of the temporal type. For instance, a temporal integer may be used to represent the evolution on time of the gear used by a moving car. In this case, the data type is temporal integer and the base type is integer. Similarly, a temporal float may be used to represent the evolution on time of the speed of a car. As another example, a temporal point may be used to represent the evolution on time of the location of a car, as reported by GPS devices. Temporal types are useful because representing values that evolve in time is essential in many applications, especially in mobility applications. Furthermore, the operators on the base types (such as arithmetic operators for integers and floats, spatial relationships and distance for geometries) can be intuitively generalized when the values evolve in time.
-
MEOS has six built-in temporal types, namely tbool, tint, tfloat, ttext, tgeompoint, and tgeogpoint, which are, respectively, based on PostgreSQL alphanumeric types bool (a Boolean value), int (a 4-byte integer number), float (an 8-byte floating point number), and text (a string of characters of variable size), as well as the geospatial base types geometry, and geography from PostGIS restricted to 2D or 3D points with Z dimension.
-
The interpolation of a temporal value states how the value evolves between successive instants. The interpolation is discrete when the value is unknown between two successive instants. They can represent, for example, checkins/checkouts when using an RFID card reader to enter/exit a building. The interpolation is linear when the value evolves linearly between two successive instants. For example, the speed of a car may be represented with a temporal float, which indicates that the values are known at the two time instants but continuously evolve between them. Similarly, the location of a vehicule may be represented by a temporal point where the location between two consecutive GPS readings is obtained by linear interpolation. Finally, the interpolation is stepwise when the value remains constant between two successive instants. For example, the gear used by a moving car may be represented with a temporal integer, which indicates that its value is constant between two time instants. Temporal types based on discrete base types (that is tbool, tint, or ttext) may evolve in a discrete or stepwise manner. On the other hand, temporal types based on continuous base types (that is tfloat, tgeompoint, or tgeogpoint) may evolve in a discrete, linear, or stepwise manner.
-
The subtype of a temporal value states the temporal extent at which the evolution of values is recorded. Temporal values come in thee subtypes, explained next.
-
A temporal value of instant subtype (briefly, an instant value) represents the value at a time instant, for example
-
'17@2018-01-01 08:00:00'
-
A temporal value of sequence subtype (briefly, a sequence value) represents the evolution of the value during a sequence of time instants, where the values between these instants are interpolated using either a discrete, a linear, or a stepwise function (see above). A graphical represention of sequence values with the three interpolations are given next.
-
-
Examples of values for the three interpolations are given next:
As can be seen, a sequence value has a lower and an upper bound that can be either inclusive, represented by [ and ], or exclusive, represented by ( and ). By definition, both bounds must be inclusive when the interpolation is discrete or when the sequence has a single instant such as '[10@2018-01-01 08:00:00]'. The latter is called an instantaneous sequence.
-
The value of a temporal sequence with linear or stepwise interpolation is interpreted by assuming that the period of time defined by every pair of consecutive values v1@t1 and v2@t2 is lower inclusive and upper exclusive, unless they are the first or the last instants of the sequence and in that case the bounds of the whole sequence apply. Furthermore, the value taken by the temporal sequence between two consecutive instants depends on whether the interpolation is linear or stepwise. For example, the temporal sequence above
represents that the value evolves from 10 to 20 during (2018-01-01 08:00:00, 2018-01-01 08:05:00) and evolves from 20 to 15 during [2018-01-01 08:05:00,2018-01-01 08:10:00]. On the other hand, the temporal sequence above
represents that the value is 10 during (2018-01-01 08:00:00, 2018-01-01 08:05:00), 20 during [2018-01-01 08:05:00,2018-01-01 08:10:00), and 15 at the end instant 2018-01-01 08:10:00.
-
Finally, a temporal value of sequence set subtype (briefly, a sequence set value) represents the evolution of the value at a set of sequences, where the values between these sequences are unknown. A graphical represention of sequence set values with different interpolations are given next.
-
-
As shown above, sequence set values can only be of linear or stepwise interpolation. Furtheremore, all composing sequences of a sequence set value must be of the same interpolation.
A rich set of functions is available to perform various operations on temporal types. The developer’s documentation available at docs.libmeos.org give a detailed description of these functions.
-
Each temporal type is associated to another type, referred to as its bounding box, which represent its extent in the value and/or the time dimension. The bounding box of the various temporal types are as follows:
-
-
The tstzspan type (see below) for the tbool and ttext types, where only the temporal extent is considered.
-
A TBox (temporal box) type for the tint and tfloat types, where the value extent is defined in the X dimension and the temporal extent in the T dimension.
-
An STBox (spatiotemporal box) type for the tgeompoint and tgeogpoint types, where the spatial extent is defined in the X, Y, and Z dimensions (where the Z dimension is optional), and the temporal extent in the T dimension.
MEOS provides span and span set types (corresponding to PostgreSQL range and multirange types) for defining ranges of values. Examples of span types are intspan, floatspan, and tstzspan, which represent, respectively, ranges of integer, float, and timestamp with time zone values. Examples of values for the span types are as follows.
-
-- Integer span
-'[17, 18)'
--- Float span
-'(17.5, 18.5]'
--- Timestamp with time zone span
-'[2018-01-01 08:00:00, 2018-01-01 08:10:00]'
-
Examples of span set types are intspanset, floatspanset, and tstzspanset, which represent sets of spans. Examples of values for the span types are as follows.
-
-- Integer span set
-'{[17, 18), [19, 20)}'
--- Float span set
-'{[17.5, 18.5), [19.5, 20.5)}'
--- Timestamp with time zone span set
-'{[2018-01-01 08:00:00, 2018-01-01 08:10:00], [2018-01-01 08:20:00, 2018-01-01 08:30:00]}'
-
MEOS also provides set types for representing set of values. Examples of set types are intset, floatset, and tstzset, which represent, respectively, set of integer, float, and timestamp with time zone values. Examples of values for the set types are as follows.
-
-- Integer set
-'{17, 18, 19, 20}'
--- Float set
-'{17.5, 18.5, 19.5, 20.5}'
--- Timestamp with time zone set
-'{2018-01-01 08:00:00, 2018-01-01 08:10:00, 2018-01-01 08:20:00, 2018-01-01 08:30:00}'
-
Finally, MEOS also provides PostgreSQL date/time types, namely, Timestamp, TimestampTz, DateADT, Time, and Interval, in addition to the base types bool, int, float, and text.
Although MEOS is written in C, it aims at using well-proven object-oriented concepts for its development. The
-data model for the temporal types is implemented using the following conceptual class hierarchy.
-
-
The superclass Temporal is a template class since it is used for all temporal types, such as temporal integers or temporal points. Temporal is also an abstract class, since it cannot be instantiated, only its subtypes can. Temporal types are variable-length types: the size of an instance in bytes is kept in the size attribute. The specific type of an instance (such as tintor tfloat) is defined in the temptype attribute. The specific subtype of an instance (such as TInstantor TSequence) is specified in the subtype attribute. Finally, the interpolation attribute keeps the interpolation used, which can be discrete, linear, or stepwise.
-
The class TInstant is used for representing a single observation composed of a value and a timestamp t. Timestamps in MEOS keep associated time zone information and are stored using PostgreSQL format, that is, in microseconds from January 1st, 2000 at 00:00:00 in Coordinated Universal Time (UTC), which is equal to Greenwich Mean Time (GMT). Notice that other systems, for example PostGIS trajectories, use Unix time in which time is represented in milliseconds from January 1st, 1970 at 00:00:00 UTC. In temporal instant values, the flags attribute specifies whether the value is passed by value or by reference, or whether the base type is discrete or continuous.
-
The class TSequence is used for representing a set of observations where an interpolation function is used for determining the value between observations. MEOS provides three interpolation functions: discrete, where the value is unknown between observations, stepwise where the value remains constant between consecutive observations, and linear, where the value evolves linearly between consecutive observations. For temporal sequence values, the flags attribute specifies the interpolation function used. The count attribute specifies the number of observations, the bbox attribute specifies the bounding box that encompasses them, and the instants attribute keeps the observations. The bounding box can be of various types depending on the temporal type:
-
-
for tbool and ttext it is a period keeping only the time extent,
-
for tint and tfloat it is a TBox composed of a period for the time extent and a floatspan for the value extent, and
-
for tgeompoint and tgeogpoint it is an STBox keeping a period for the time extent and the minimum and maximum values of the 2D/3D coordinates for the spatial extent.
-
-
The class TSequenceSet is used for representing a set of sequences having the same interpolation function that may have temporal gaps where the value is not known. This situation typically arrives in real-world applications due to signal loss. The count attribute specifies the number of such sequences, while the totalcount attribute specifies the number of observations across all sequences. Finally, the bbox attribute specifies the bounding box that encompasses all observations and the sequences attribute keeps the composing sequences.
-
The following figure shows the C structures implementing the above conceptual class hierarchy for temporal types.
-
-
The structures for all temporal types start with a header, which contains information in the Temporal supertype above shared for all subtypes. It is composed of the size (Z), temptype (T), subtype (S), and flags (F). The flags encodes metadata information such as whether the base values are passed by value or by reference, whether the base values are discrete (e.g., int) or continuous (e.g., float), the interpolation function used, whether the spatial values have a Z dimension, etc.
-
The TInstant structure stores after the header the timestamp t and the base value.
-
The TSequence structure stores after the header the attributes count and maxcount, which state, respectively, the current and maximum number of composing values of type TInstant, bboxsize that stores the size of the bounding box, and bbox that stores the bounding box. As indicated in the figure, all bounding boxes start with a period for the time extent, and contain other attributes for temporal numbers (TBox) and temporal points (STBox). The structure contains an array of òffsets, storing the offset of the location of each composing instant with respect to the start of the structure. Therefore, the address of each composing instant can be easily obtained by adding its òffset to the address of the structure. The òffsets array also acts as a temporal index, since the instants are stored in ascending order of timestamp. This enables a binary search of the array, for example, when looking for the value at a given timestamp. This temporal index, combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, enables an efficient implementation of the temporal operations. Then, the structure stores the composing instants.
-
Finally, the TSequenceSet structure has similar structure as the TSequence structure, where count and maxcount state the current and maximum number of composing values of type TSequence, totalcount states the total number of instants accross all composing sequences, followed by the size of the bounding box bboxsize, the bounding box bbox, the offsets array, and the composing sequences.
-
Both the TSequence and TSequenceSet structures are expandable, that is, at the creation time they can allocate space available for storing additional observations later, as stated by the count and maxcount attributes. Furthermore, both structures automatically expand upon update operations when there is no more available space, where by default the size is doubled at each expansion. These features are essential for streaming applications. On the other hand, for historical (that is, batch) processing, the operations create structures without any additional space by simply calling the constructors with the same value for count and maxcount.
MEOS uses set and span types for representing finite subsets of values from the base and time types. The set and span types are template classes, since they are used for all base types. The following figure shows the C structures for these types.
-
-
The Set structure comes in two variants, depending on whether the values in the set are passed by value or by reference, depicted, respectively, in the topmost and the second structure. The header contains the size (Z), settype (B), basetype (B), and flags (F). Here, the flags encodes metadata information such as whether the values in the set are passed by value or by reference and whether the values in the set are stored in ascending order or not. The bboxsize attribute keeps the size of the bounding box and bbox stores the bounding box. For alphanumeric values, these are the indexes of the minimum (minidx) and maximum (maxidx) values of the set. These values are only necessary when the values of the set are not ordered. For spatial values, the bounding box is a spatiotemporal box (STBox) keeping the minimum and maximum values of the 2D/3D coordinates for the spatial extent.
-
When the values in the set are passed by value, they are stored immediately after the bounding box. Otherwise, the structure contains an array of òffsets, storing the offset of the location of each value with respect to the start of the structure. Therefore, the address of each value can be easily obtained by adding its òffset to the address of the structure. Notice that the òffsets array is only necessary when the values of the set are of variable length, as is the case for the type textset, which contains text values. The òffsets array also act as an index when the set is ordered, since a binary search of the array is performed when looking for a given value. This index, combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, enables an efficient implementation of the set operations.
-
The Span structure starts with a header, composed of the spantype (S), basetype (B), lower_inc (L), and upper_inc (U), where the two latter elements state, respectively, whether the lower and upper bounds are inclusive or not.
-Then, the structure stores the values of the lower and upper bounds.
-
Finally, the SpanSet structure starts with a header, composed of the size (Z), spansettype (T), spantype (S), and basetype (B). It is followed by the count attribute, which states the number of composing values of type Span, and the bounding span. The composing span values are kept in the elems array. Since the spans are stored in ascending order, this enables a binary search of the array when, for example, looking whether a given value is contained in the span set. Combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, this enables an efficient implementation of span set operations.
Although MEOS is written in C, it aims at using well-proven object-oriented concepts for its development. The
-data model for the temporal types is implemented using the following conceptual type hierarchy.
-
-
The supertype Temporal is a template type since it is used for all temporal types, such as temporal integers or temporal points. Temporal is also an abstract type, since it cannot be instantiated, only its subtypes can. Temporal types are variable-length types: the size of an instance in bytes is kept in the size attribute. The specific type of an instance (such as tintor tfloat) is defined in the temptype attribute. The specific subtype of an instance (such as TInstantor TSequence) is specified in the subtype attribute. Finally, the interpolation attribute keeps the interpolation used, which can be discrete, linear, or stepwise.
-
The type TInstant is used for representing a single observation composed of a value and a timestamp t. Timestamps in MEOS keep associated time zone information and are stored using PostgreSQL format, that is, in microseconds from January 1st, 2000 at 00:00:00 in Coordinated Universal Time (UTC), which is equal to Greenwich Mean Time (GMT). Notice that other systems, for example PostGIS trajectories, use Unix time in which time is represented in milliseconds from January 1st, 1970 at 00:00:00 UTC. In temporal instant values, the flags attribute specifies whether the value is passed by value or by reference, or whether the base type is discrete or continuous.
-
The type TSequence is used for representing a set of observations where an interpolation function is used for determining the value between observations. MEOS provides three interpolation functions: discrete, where the value is unknown between observations, stepwise where the value remains constant between consecutive observations, and linear, where the value evolves linearly between consecutive observations. For temporal sequence values, the flags attribute specifies the interpolation function used. The count attribute specifies the number of observations, the bbox attribute specifies the bounding box that encompasses them, and the instants attribute keeps the observations. The bounding box can be of various types depending on the temporal type:
-
-
for tbool and ttext it is a period keeping only the time extent,
-
for tint and tfloat it is a TBox composed of a period for the time extent and a floatspan for the value extent, and
-
for tgeompoint and tgeogpoint it is an STBox keeping a period for the time extent and the minimum and maximum values of the 2D/3D coordinates for the spatial extent.
-
-
The type TSequenceSet is used for representing a set of sequences having the same interpolation function that may have temporal gaps where the value is not known. This situation typically arrives in real-world applications due to signal loss. The count attribute specifies the number of such sequences, while the totalcount attribute specifies the number of observations across all sequences. Finally, the bbox attribute specifies the bounding box that encompasses all observations and the sequences attribute keeps the composing sequences.
-
The following figure shows the C structures implementing the above conceptual type hierarchy for temporal types.
-
-
The structures for all temporal types start with a header, which contains information in the Temporal supertype above shared for all subtypes. It is composed of the size (Z), temptype (T), subtype (S), and flags (F). The flags encodes metadata information such as whether the base values are passed by value or by reference, whether the base values are discrete (e.g., int) or continuous (e.g., float), the interpolation function used, whether the spatial values have a Z dimension, etc.
-
The TInstant structure stores after the header the timestamp t and the base value.
-
The TSequence structure stores after the header the attributes count and maxcount, which state, respectively, the current and maximum number of composing values of type TInstant, bboxsize that stores the size of the bounding box, and bbox that stores the bounding box. As indicated in the figure, all bounding boxes start with a period for the time extent, and contain other attributes for temporal numbers (TBox) and temporal points (STBox). The structure contains an array of òffsets, storing the offset of the location of each composing instant with respect to the start of the structure. Therefore, the address of each composing instant can be easily obtained by adding its òffset to the address of the structure. The òffsets array also acts as a temporal index, since the instants are stored in ascending order of timestamp. This enables a binary search of the array, for example, when looking for the value at a given timestamp. This temporal index, combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, enables an efficient implementation of the temporal operations. Then, the structure stores the composing instants.
-
Finally, the TSequenceSet structure has similar structure as the TSequence structure, where count and maxcount state the current and maximum number of composing values of type TSequence, totalcount states the total number of instants accross all composing sequences, followed by the size of the bounding box bboxsize, the bounding box bbox, the offsets array, and the composing sequences.
-
Both the TSequence and TSequenceSet structures are expandable, that is, at the creation time they can allocate space available for storing additional observations later, as stated by the count and maxcount attributes. Furthermore, both structures automatically expand upon update operations when there is no more available space, where by default the size is doubled at each expansion. These features are essential for streaming applications. On the other hand, for historical (that is, batch) processing, the operations create structures without any additional space by simply calling the constructors with the same value for count and maxcount.
MEOS uses set, span, and span set types for representing finite subsets of values from the base and time types. These types are template types, since they are used for constructing multiple types.
-
-
The following figure shows the C structures for these types.
-
-
The Set structure comes in two variants, depending on whether the values in the set are passed by value or by reference, depicted, respectively, in the topmost and the second structure. The header contains the size (Z), settype (B), basetype (B), and flags (F). Here, the flags encodes metadata information such as whether the values in the set are passed by value or by reference and whether the values in the set are stored in ascending order or not. The bboxsize attribute keeps the size of the bounding box and bbox stores the bounding box. As suggested by the dashed box, the bounding box may not be present, which is the case for alphanumeric values. For spatial values, the bounding box is a spatiotemporal box (STBox) keeping the minimum and maximum values of the 2D/3D coordinates for the spatial extent.
-
When the values in the set are passed by value, they are stored immediately after the bounding box. Otherwise, the structure contains an array of òffsets, storing the offset of the location of each value with respect to the start of the structure. Therefore, the address of each value can be easily obtained by adding its òffset to the address of the structure. Notice that the òffsets array is only necessary when the values of the set are of variable length, as is the case for the type textset, which contains text values. The òffsets array also act as an index when the set is ordered, since a binary search of the array is performed when looking for a given value. This index, combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, enables an efficient implementation of the set operations.
-
The Span structure starts with a header, composed of the spantype (S), basetype (B), lower_inc (L), and upper_inc (U), where the two latter elements state, respectively, whether the lower and upper bounds are inclusive or not.
-Then, the structure stores the values of the lower and upper bounds.
-
Finally, the SpanSet structure starts with a header, composed of the size (Z), spansettype (T), spantype (S), and basetype (B). It is followed by the count attribute, which states the number of composing values of type Span, and the bounding span. The composing span values are kept in the elems array. Since the spans are stored in ascending order, this enables a binary search of the array when, for example, looking whether a given value is contained in the span set. Combined with the bounding box that is used to quickly filter out values that do not satisfy a predicate, this enables an efficient implementation of span set operations.
MEOS uses bounding boxes for efficient manipulation of temporal types. For example, when determining whether a temporal point (e.g., a moving vehicle) overlaps a geometry (e.g., a county), a bounding box test is applied to quickly filter out the temporal points whose bounding box does not overlap the bounding box of the geometry. Then, the computation continues for the values satisfying the bounding box test.
-
MEOS has three types of bounding boxes depicted next.
-
-
The Span type, already described above, is used for temporal types such as tbool and ttext and in this case the bounding box only represents the temporal extent of the value.
-
The TBox type is used for temporal numbers such as tint and tfloat, where the span attribute represents the value extent and the period attribute represents the temporal extent of the value.
-
Finally, the STBox type is used for temporal points such as tgeompoint and tgeogpointt, where the period attribute represents the temporal extent of the value, the attributes such as xmin and xmax represent the 2D or 3D spatial extent of the values, the attribute srid identifies the coordinate system, and the flags attribute keeps information such as whether the coordinate system is Cartesian or geodetic.
We explain next the semantics of the modification operations for temporal types. These operations are needed for streaming applications where the observations arrive not necessarily ordered by time. The assumption is that most observations arrive ordered by time and thus, inserting in the middle of a temporal value is an exceptional operation. In this case, we need to push the subsequent instants in the extensible array using a memmove operation in C, which is a costly operation. If on the contrary, the observations would arrive in a random order with respect to time, the extensible array data structure used in MobilityDB is not the right data structure, instead a linked list or a skip list(https://en.wikipedia.org/wiki/Skip_list) of instants should be used. For example, in MobilityDB skip lists are used for temporal aggregation operations since by definition the temporal values to aggregate come in random order of time.
-
MEOS provides the insert, update, and delete operations for modifying the content of an existing sequence or sequence set. As a comparison, PostGIS provides the following update operations for modifying an existing line string:
-ST_AddPoint,
-ST_SetPoint, and
-ST_RemovePoint.
-
First, we explain the case of inserting or updating an instant or a sequence to an existing sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence (or a temporal instant if n = 1) in the top of the figure to an existing sequence in the bottom of the figure. When vi@ti is the last instant of the sequence, we are adding the new sequence to the end of the existing sequence (this corresponds to an append operation).
-
We start by explaining the insert operation. In this case, it is supposed that ti <= t1 and tn <= ti+1, otherwise an error is thrown. A particular case that must be taken into account is when ti = t1 and/or tn = ti+1. In this case, the semantics depends on the operation performed. In the case of an insert, it is necessary that vi = v1 and vn = vi+1, otherwise an error is thrown. If the constraint is satisfied, the insert does not add the redundant connecting instants. In the case of an update, the values of the connecting instants are updated if they are different. In the general case, if ti < t1 and/or tn < ti+1, then the new instants are added to the sequence.
-
On the other hand, when performing an update operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence, resulting in a sequence set.
-
We now explain the case of inserting or updating an instant or a sequence to an existing sequence set. The case of inserting or updating an existing sequence amounts to the previous case. What remains to be explained is to add a sequence in a temporal gap between two sequences or at the end of a sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence in the top of the figure to a temporal gap in (or at the end of) an existing sequence in the bottom of the figure.
-
As before, in the case of an insert or an update operation, it is supposed that ti <= t1 and ti+1 >= tn, otherwise an error is thrown. When ti = t1 and/or tn = ti+1, we are extending the sequence to the left and/or to the right of the temporal gap and we proceed as explained above. Otherwise, when ti < t1 and tn < ti+1, three different operations can be contemplated, depending on the value of an additional parameter of the insert or update functions. We can either extend the sequence to the left and/or to the right of the gap, or simply add the new sequence in the gap, leaving two gaps to the left and to the right of the new sequence.
-
When performing a replace operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence set will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn. Notice that if t1 <= ti and/or ti+1 <= tn the operation fills (partially or completely) the temporal gap.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence set.
-
-
-
-
-
-
diff --git a/public/documentation/index.xml b/public/documentation/index.xml
deleted file mode 100644
index c837e38..0000000
--- a/public/documentation/index.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
- Documentation on MEOS
- /documentation/
- Recent content in Documentation on MEOS
- Hugo -- gohugo.io
- en
- Fri, 29 Jul 2022 13:57:17 +0200
-
-
- Aggregate Operations
- /documentation/aggregation/
- Fri, 29 Jul 2022 13:57:17 +0200
- /documentation/aggregation/
- We explain next the aggregate operations for temporal types. These operations use a skip list for their implementation.
Computation Model MEOS borrows from PostgreSQL the computation model for aggregate operations. These operations are defined in terms of state values, state transition functions, and final functions. An aggregate operation uses a state value that is updated as each successive input value is processed. The data type for the state value depends on the aggregate operation.
-
-
- Data Model
- /documentation/datamodel/
- Fri, 29 Jul 2022 13:57:17 +0200
- /documentation/datamodel/
- Temporal Types MEOS provides temporal types, which represent the evolution on time of values of some element type, called the base type of the temporal type. For instance, a temporal integer may be used to represent the evolution on time of the gear used by a moving car. In this case, the data type is temporal integer and the base type is integer. Similarly, a temporal float may be used to represent the evolution on time of the speed of a car.
-
-
- Data Structures
- /documentation/datastructures/
- Fri, 29 Jul 2022 13:57:17 +0200
- /documentation/datastructures/
- Temporal Types Although MEOS is written in C, it aims at using well-proven object-oriented concepts for its development. The data model for the temporal types is implemented using the following conceptual type hierarchy.
The supertype Temporal is a template type since it is used for all temporal types, such as temporal integers or temporal points. Temporal is also an abstract type, since it cannot be instantiated, only its subtypes can.
-
-
- Modification Operations
- /documentation/modification/
- Fri, 29 Jul 2022 13:57:17 +0200
- /documentation/modification/
- We explain next the semantics of the modification operations for temporal types. These operations are needed for streaming applications where the observations arrive not necessarily ordered by time. The assumption is that most observations arrive ordered by time and thus, inserting in the middle of a temporal value is an exceptional operation. In this case, we need to push the subsequent instants in the extensible array using a memmove operation in C, which is a costly operation.
-
-
- Normalization
- /documentation/normalization/
- Fri, 29 Jul 2022 13:57:17 +0200
- /documentation/normalization/
- MEOS normalizes sequence or sequence set values that are continuous (that is, when the interpolation is linear or stepwise). For this, consecutive instant values are merged when possible. Recall that two consecutive instant values v1@t1 and v2@t2 define a linear function that states the evolution of the base value between the two timestamps. In this regard, the stepwise interpolation is just a particular case of the linear interpolation when the linear function is constant.
-
-
- Developer's Documentation
- /documentation/developer/
- Fri, 29 Jul 2022 13:34:19 +0200
- /documentation/developer/
- The developer’s documentation is available at https://estebanzimanyi.github.io/MobilityDB/index.html
Alternatively, you can generate the English developer’s documentation in HTML format from the source:
git clone --branch develop https://github.com/MobilityDB/MobilityDB MobilityDB mkdir MobilityDB/build cd MobilityDB/build cmake -DMEOS=on -DDOC_DEV=on .. make -j make doc_dev The resulting HTML documentation will be generated in the doxygen directory of the build directory.
-
-
-
diff --git a/public/documentation/meos_subtype_instances.png b/public/documentation/meos_subtype_instances.png
deleted file mode 100644
index 3b73bae..0000000
Binary files a/public/documentation/meos_subtype_instances.png and /dev/null differ
diff --git a/public/documentation/meos_subtypes_instances.png b/public/documentation/meos_subtypes_instances.png
deleted file mode 100644
index 3b73bae..0000000
Binary files a/public/documentation/meos_subtypes_instances.png and /dev/null differ
diff --git a/public/documentation/modification/index.html b/public/documentation/modification/index.html
deleted file mode 100644
index 8ca81d5..0000000
--- a/public/documentation/modification/index.html
+++ /dev/null
@@ -1,2075 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- Modification Operations | MEOS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
We explain next the semantics of the modification operations for temporal types. These operations are needed for streaming applications where the observations arrive not necessarily ordered by time. The assumption is that most observations arrive ordered by time and thus, inserting in the middle of a temporal value is an exceptional operation. In this case, we need to push the subsequent instants in the extensible array using a memmove operation in C, which is a costly operation. If on the contrary, the observations would arrive in a random order with respect to time, the extensible array data structure used in MobilityDB is not the right data structure, instead a linked list or a skip list of instants should be used. For example, in MobilityDB skip lists are used for temporal aggregation operations since by definition the temporal values to aggregate come in random order of time.
-
MEOS provides the insert, update, and delete operations for modifying the content of an existing sequence or sequence set. As a comparison, PostGIS provides the following update operations for modifying an existing line string:
-ST_AddPoint,
-ST_SetPoint, and
-ST_RemovePoint.
-
First, we explain the case of inserting or updating an instant or a sequence to an existing sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence (or a temporal instant if n = 1) in the top of the figure to an existing sequence in the bottom of the figure. When vi@ti is the last instant of the sequence, we are adding the new sequence to the end of the existing sequence (this corresponds to an append operation).
-
We start by explaining the insert operation. In this case, it is supposed that ti <= t1 and tn <= ti+1, otherwise an error is thrown. A particular case that must be taken into account is when ti = t1 and/or tn = ti+1. In this case, the semantics depends on the operation performed. In the case of an insert, it is necessary that vi = v1 and vn = vi+1, otherwise an error is thrown. If the constraint is satisfied, the insert does not add the redundant connecting instants. In the case of an update, the values of the connecting instants are updated if they are different. In the general case, if ti < t1 and/or tn < ti+1, then the new instants are added to the sequence.
-
On the other hand, when performing an update operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence, resulting in a sequence set.
-
We now explain the case of inserting or updating an instant or a sequence to an existing sequence set. The case of inserting or updating an existing sequence amounts to the previous case. What remains to be explained is to add a sequence in a temporal gap between two sequences or at the end of a sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence in the top of the figure to a temporal gap in (or at the end of) an existing sequence in the bottom of the figure.
-
As before, in the case of an insert or an update operation, it is supposed that ti <= t1 and ti+1 >= tn, otherwise an error is thrown. When ti = t1 and/or tn = ti+1, we are extending the sequence to the left and/or to the right of the temporal gap and we proceed as explained above. Otherwise, when ti < t1 and tn < ti+1, three different operations can be contemplated, depending on the value of an additional parameter of the insert or update functions. We can either extend the sequence to the left and/or to the right of the gap, or simply add the new sequence in the gap, leaving two gaps to the left and to the right of the new sequence.
-
When performing a replace operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence set will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn. Notice that if t1 <= ti and/or ti+1 <= tn the operation fills (partially or completely) the temporal gap.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence set.
We explain next the semantics of the modification operations for temporal types. These operations are needed for streaming applications where the observations arrive not necessarily ordered by time. The assumption is that most observations arrive ordered by time and thus, inserting in the middle of a temporal value is an exceptional operation. In this case, we need to push the subsequent instants in the extensible array using a memmove operation in C, which is a costly operation. If on the contrary, the observations would arrive in a random order with respect to time, the extensible array data structure used in MobilityDB is not the right data structure, instead a linked list or a skip list(https://en.wikipedia.org/wiki/Skip_list) of instants should be used. For example, in MobilityDB skip lists are used for temporal aggregation operations since by definition the temporal values to aggregate come in random order of time.
-
MEOS provides the insert, update, and delete operations for modifying the content of an existing sequence or sequence set. As a comparison, PostGIS provides the following update operations for modifying an existing line string:
-ST_AddPoint,
-ST_SetPoint, and
-ST_RemovePoint.
-
First, we explain the case of inserting or updating an instant or a sequence to an existing sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence (or a temporal instant if n = 1) in the top of the figure to an existing sequence in the bottom of the figure. When vi@ti is the last instant of the sequence, we are adding the new sequence to the end of the existing sequence (this corresponds to an append operation).
-
We start by explaining the insert operation. In this case, it is supposed that ti <= t1 and tn <= ti+1, otherwise an error is thrown. A particular case that must be taken into account is when ti = t1 and/or tn = ti+1. In this case, the semantics depends on the operation performed. In the case of an insert, it is necessary that vi = v1 and vn = vi+1, otherwise an error is thrown. If the constraint is satisfied, the insert does not add the redundant connecting instants. In the case of an update, the values of the connecting instants are updated if they are different. In the general case, if ti < t1 and/or tn < ti+1, then the new instants are added to the sequence.
-
On the other hand, when performing an update operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence, resulting in a sequence set.
-
We now explain the case of inserting or updating an instant or a sequence to an existing sequence set. The case of inserting or updating an existing sequence amounts to the previous case. What remains to be explained is to add a sequence in a temporal gap between two sequences or at the end of a sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence in the top of the figure to a temporal gap in (or at the end of) an existing sequence in the bottom of the figure.
-
As before, in the case of an insert or an update operation, it is supposed that ti <= t1 and ti+1 >= tn, otherwise an error is thrown. When ti = t1 and/or tn = ti+1, we are extending the sequence to the left and/or to the right of the temporal gap and we proceed as explained above. Otherwise, when ti < t1 and tn < ti+1, three different operations can be contemplated, depending on the value of an additional parameter of the insert or update functions. We can either extend the sequence to the left and/or to the right of the gap, or simply add the new sequence in the gap, leaving two gaps to the left and to the right of the new sequence.
-
When performing a replace operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence set will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn. Notice that if t1 <= ti and/or ti+1 <= tn the operation fills (partially or completely) the temporal gap.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence set.
MEOS normalizes sequence or sequence set values that are continuous (that is, when the interpolation is linear or stepwise). For this, consecutive instant values are merged when possible. Recall that two consecutive instant values v1@t1 and v2@t2 define a linear function that states the evolution of the base value between the two timestamps. In this regard, the stepwise interpolation is just a particular case of the linear interpolation when the linear function is constant.
-
We start by analyzing the case of sequence values. Given three consecutive instant values, the middle value can be deleted if the linear functions defining the evolution of values are the same. This is illustrated in the figure below for linear and stepwise interpolation, where the sequence values in the left are replaced through normalization by the values on the right.
-
-
As can be seen, the sequences at the left convey the same information as the sequences at the right. Therefore, normalization ensures that we have a unique representation for equivalent sequences.
-Examples of normalization for sequence values are shown below
In the case of sequence set values, two composing sequences are merged whenever possible. This is the case when the instant to be removed connects two consecutive sequences. This is illustrated below, where we only consider the case where the first sequence is right exclusive and the second one is left inclusive.
-
-
Examples of normalization for sequence set values are shown below
The normalization process is performed by the constructors of the TSequence and TSequenceSet. Therefore, this happens both at the time mobility data is input and when computing the result of any operation. Normalization thus performs lossless compression that can achieve up to 400% compression rate when real-world mobility data is input.
We explain next the semantics of the update operations for temporal types. These operations are needed for streaming applications where the observations arrive not necessarily ordered by time. The assumption is that most observations arrive ordered by time and thus, inserting in the middle of a temporal value is an exceptional operation. In this case, we need to push the subsequent instants in the extensible array using a memmove operation in C, which is a costly operation. If on the contrary, the observations would arrive in a random order with respect to time, the extensible array data structure used in MobilityDB is not the right data structure, instead a linked list or a skip list of instants should be used. For example, in MobilityDB skip lists are used for temporal aggregation operations since by definition the temporal values to aggregate come in random order of time.
-
MEOS provides the insert, update, replace, and delete operations for modifying the content of an existing sequence or sequence set. As a comparison, PostGIS provides the following update operations for modifying an existing line string:
-ST_AddPoint,
-ST_SetPoint, and
-ST_RemovePoint.
-
First, we explain the case of inserting or updating an instant or a sequence to an existing sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence (or a temporal instant if n = 1) in the top of the figure to an existing sequence in the bottom of the figure. When vi@ti is the last instant of the sequence, we are adding the new sequence to the end of the existing sequence (that is, an append operation).
-
We start by explaining the insert and update operations. In this case, it is supposed that ti <= t1 and tn <= ti+1, otherwise an error is thrown. A particular case that must be taken into account is when ti = t1 and/or tn = ti+1. In this case, the semantics depends on the operation performed. In the case of an insert, it is necessary that vi = v1 and vn = vi+1, otherwise an error is thrown. If the constraint is satisfied, the insert does not add the redundant connecting instants. In the case of an update, the values of the connecting instants are updated if they are different. In the general case, if ti < t1 and/or tn < ti+1, then the new instants are added to the sequence.
-
On the other hand, when performing a replace operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence, resulting in a sequence set.
-
We now explain the case of inserting or updating an instant or a sequence to an existing sequence set. The case of inserting or updating an existing sequence amounts to the previous case. What remains to be explained is to add a sequence in a temporal gap between two sequences or at the end of a sequence, as illustrated next.
-
-
As shown in the figure, we are adding the temporal sequence in the top of the figure to a temporal gap in (or at the end of) an existing sequence in the bottom of the figure.
-
As before, in the case of an insert or an update operation, it is supposed that ti <= t1 and ti+1 >= tn, otherwise an error is thrown. When ti = t1 and/or tn = ti+1, we are extending the sequence to the left and/or to the right of the temporal gap and we proceed as explained above. Otherwise, when ti < t1 and tn < ti+1, three different operations can be contemplated, depending on the value of an additional parameter of the insert or update functions. We can either extend the sequence to the left and/or to the right of the gap, or simply add the new sequence in the gap, leaving two gaps to the left and to the right of the new sequence.
-
When performing a replace operation, the above constraint ti <= t1 and tn <= ti+1 is not required and therefore, the resulting sequence set will contain the values in the new sequence, independently of the previous values it had (if any) between the timestamps t1 and tn. Notice that if t1 <= ti and/or ti+1 <= tn the operation fills (partially or completely) the temporal gap.
-
Finally, when performing a delete operation, it removes the instants between two timestamps tstart and tend passed as parameters, where an additional parameter of the function states whether the values before and after the given timestamps are connected, or on the contrary a temporal gap is added to the sequence set.
This program reads from a CSV file synthetic trip data in Brussels generated by the MobilityDB-BerlinMOD generator and computes the distance traversed by the trips in the 19 Brussels municipalities (communes in French).
The above ouput uses the pretty-printing options provided by the json-c library to facilite human reading. By changing the corresponding flag in the program it is possible to obtain a more compact machine-processable representation.
This program reads AIS data from a CSV file, constructs trips from these records, and outputs for each trip the MMSI, the number of instants, and the distance travelled.
-
The output of the program is given next.
-
156837 records read.
-0 incomplete records ignored.
-5 trips read.
-MMSI: 265513270, Number of input instants: 21799, Number of instants: 6, Distance travelled 11.695976
-MMSI: 219027804, Number of input instants: 38326, Number of instants: 3285, Distance travelled 64865.704162
-MMSI: 566948000, Number of input instants: 26619, Number of instants: 2969, Distance travelled 14932.332003
-MMSI: 219001559, Number of input instants: 48323, Number of instants: 1597, Distance travelled 5202.381849
-MMSI: 257136000, Number of input instants: 21770, Number of instants: 14811, Distance travelled 647535.585339
-
The above ouput shows the normalization process that takes place in MEOS. In the first example above, from 21799 observations only 6 of them were necessary to represent the same information. Normalization achieves lossless compression by removing redundant instants. For example, three consecutive instant values can be merged into two if they have the same value. As another example, three consecutive instant values can be merged into two if the linear functions defining the evolution of values over time are the same. Normalization may achieve up to 400% lossless compression of real-world mobility data. Indeed, many observations that are collected, e.g., while a vehicle is stopped at a red light or in a traffic jam are redudant and can be safely removed without losing any information.
This program reads from a CSV file synthetic trip data in Brussels generated by the MobilityDB-BerlinMOD generator, simplifies the trips using both Douglas-Peucker (DP) and Synchronized Euclidean Distance (SED, also known as Top-Down Time Ratio simplification), and outputs for each trip the initial number of instants and the number of instants of the two simplified trips.
-
The output of the program is given next.
-
64 records read.
-0 incomplete records ignored.
-Vehicle: 1, Date: 2020-06-01, Seq: 1, No. of instants: 2475, No. of instants DP: 218, No. of instants SED: 218
-Vehicle: 1, Date: 2020-06-01, Seq: 2, No. of instants: 2422, No. of instants DP: 188, No. of instants SED: 188
-Vehicle: 1, Date: 2020-06-01, Seq: 3, No. of instants: 2972, No. of instants DP: 280, No. of instants SED: 280
-...
-Vehicle: 5, Date: 2020-06-04, Seq: 1, No. of instants: 1153, No. of instants DP: 134, No. of instants SED: 134
-Vehicle: 5, Date: 2020-06-04, Seq: 2, No. of instants: 1127, No. of instants DP: 119, No. of instants SED: 119
-
This program reads AIS data from a CSV file, converts them into temporal values, and stores them in MobilityDB. The program uses the libpq library to connect to PostgreSQL.
-
The output of the program is given next.
-
Creating the table in the database
-NOTICE: table "meos_demo" does not exist, skipping
-Start processing the file
-156837 records read.
-0 incomplete records ignored.
-Query 'SELECT COUNT(*) FROM public.MEOS_demo' returned 156837
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/favicon/android-chrome-144x144.png b/public/favicon/android-chrome-144x144.png
deleted file mode 100644
index 6f29a7c..0000000
Binary files a/public/favicon/android-chrome-144x144.png and /dev/null differ
diff --git a/public/favicon/android-chrome-192x192.png b/public/favicon/android-chrome-192x192.png
deleted file mode 100644
index 05e641e..0000000
Binary files a/public/favicon/android-chrome-192x192.png and /dev/null differ
diff --git a/public/favicon/android-chrome-256x256.png b/public/favicon/android-chrome-256x256.png
deleted file mode 100644
index 7e9495c..0000000
Binary files a/public/favicon/android-chrome-256x256.png and /dev/null differ
diff --git a/public/favicon/android-chrome-36x36.png b/public/favicon/android-chrome-36x36.png
deleted file mode 100644
index 53fb609..0000000
Binary files a/public/favicon/android-chrome-36x36.png and /dev/null differ
diff --git a/public/favicon/android-chrome-384x384.png b/public/favicon/android-chrome-384x384.png
deleted file mode 100644
index 6536bd0..0000000
Binary files a/public/favicon/android-chrome-384x384.png and /dev/null differ
diff --git a/public/favicon/android-chrome-48x48.png b/public/favicon/android-chrome-48x48.png
deleted file mode 100644
index 6e4adaf..0000000
Binary files a/public/favicon/android-chrome-48x48.png and /dev/null differ
diff --git a/public/favicon/android-chrome-512x512.png b/public/favicon/android-chrome-512x512.png
deleted file mode 100644
index f671035..0000000
Binary files a/public/favicon/android-chrome-512x512.png and /dev/null differ
diff --git a/public/favicon/android-chrome-72x72.png b/public/favicon/android-chrome-72x72.png
deleted file mode 100644
index 83c64bc..0000000
Binary files a/public/favicon/android-chrome-72x72.png and /dev/null differ
diff --git a/public/favicon/android-chrome-96x96.png b/public/favicon/android-chrome-96x96.png
deleted file mode 100644
index c060ba7..0000000
Binary files a/public/favicon/android-chrome-96x96.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-1024x1024.png b/public/favicon/apple-touch-icon-1024x1024.png
deleted file mode 100644
index b378fc3..0000000
Binary files a/public/favicon/apple-touch-icon-1024x1024.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-114x114.png b/public/favicon/apple-touch-icon-114x114.png
deleted file mode 100644
index 6e238a7..0000000
Binary files a/public/favicon/apple-touch-icon-114x114.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-120x120.png b/public/favicon/apple-touch-icon-120x120.png
deleted file mode 100644
index 49bbf19..0000000
Binary files a/public/favicon/apple-touch-icon-120x120.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-144x144.png b/public/favicon/apple-touch-icon-144x144.png
deleted file mode 100644
index 1a37a93..0000000
Binary files a/public/favicon/apple-touch-icon-144x144.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-152x152.png b/public/favicon/apple-touch-icon-152x152.png
deleted file mode 100644
index f2771db..0000000
Binary files a/public/favicon/apple-touch-icon-152x152.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-167x167.png b/public/favicon/apple-touch-icon-167x167.png
deleted file mode 100644
index a7bc4a5..0000000
Binary files a/public/favicon/apple-touch-icon-167x167.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-180x180.png b/public/favicon/apple-touch-icon-180x180.png
deleted file mode 100644
index b3394eb..0000000
Binary files a/public/favicon/apple-touch-icon-180x180.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-57x57.png b/public/favicon/apple-touch-icon-57x57.png
deleted file mode 100644
index 0e231dd..0000000
Binary files a/public/favicon/apple-touch-icon-57x57.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-60x60.png b/public/favicon/apple-touch-icon-60x60.png
deleted file mode 100644
index f5f2a22..0000000
Binary files a/public/favicon/apple-touch-icon-60x60.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-72x72.png b/public/favicon/apple-touch-icon-72x72.png
deleted file mode 100644
index 3bc76bc..0000000
Binary files a/public/favicon/apple-touch-icon-72x72.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-76x76.png b/public/favicon/apple-touch-icon-76x76.png
deleted file mode 100644
index 9e9a619..0000000
Binary files a/public/favicon/apple-touch-icon-76x76.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon-precomposed.png b/public/favicon/apple-touch-icon-precomposed.png
deleted file mode 100644
index b3394eb..0000000
Binary files a/public/favicon/apple-touch-icon-precomposed.png and /dev/null differ
diff --git a/public/favicon/apple-touch-icon.png b/public/favicon/apple-touch-icon.png
deleted file mode 100644
index b3394eb..0000000
Binary files a/public/favicon/apple-touch-icon.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1125x2436.png b/public/favicon/apple-touch-startup-image-1125x2436.png
deleted file mode 100644
index b0cae60..0000000
Binary files a/public/favicon/apple-touch-startup-image-1125x2436.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1136x640.png b/public/favicon/apple-touch-startup-image-1136x640.png
deleted file mode 100644
index 031c052..0000000
Binary files a/public/favicon/apple-touch-startup-image-1136x640.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1242x2208.png b/public/favicon/apple-touch-startup-image-1242x2208.png
deleted file mode 100644
index 829fdd4..0000000
Binary files a/public/favicon/apple-touch-startup-image-1242x2208.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1242x2688.png b/public/favicon/apple-touch-startup-image-1242x2688.png
deleted file mode 100644
index f1e8ed6..0000000
Binary files a/public/favicon/apple-touch-startup-image-1242x2688.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1334x750.png b/public/favicon/apple-touch-startup-image-1334x750.png
deleted file mode 100644
index 31ce000..0000000
Binary files a/public/favicon/apple-touch-startup-image-1334x750.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1536x2048.png b/public/favicon/apple-touch-startup-image-1536x2048.png
deleted file mode 100644
index 173db16..0000000
Binary files a/public/favicon/apple-touch-startup-image-1536x2048.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1620x2160.png b/public/favicon/apple-touch-startup-image-1620x2160.png
deleted file mode 100644
index d7e4ba7..0000000
Binary files a/public/favicon/apple-touch-startup-image-1620x2160.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1668x2224.png b/public/favicon/apple-touch-startup-image-1668x2224.png
deleted file mode 100644
index 408602a..0000000
Binary files a/public/favicon/apple-touch-startup-image-1668x2224.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1668x2388.png b/public/favicon/apple-touch-startup-image-1668x2388.png
deleted file mode 100644
index e64e6bd..0000000
Binary files a/public/favicon/apple-touch-startup-image-1668x2388.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-1792x828.png b/public/favicon/apple-touch-startup-image-1792x828.png
deleted file mode 100644
index 0d50a25..0000000
Binary files a/public/favicon/apple-touch-startup-image-1792x828.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2048x1536.png b/public/favicon/apple-touch-startup-image-2048x1536.png
deleted file mode 100644
index 1b2a388..0000000
Binary files a/public/favicon/apple-touch-startup-image-2048x1536.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2048x2732.png b/public/favicon/apple-touch-startup-image-2048x2732.png
deleted file mode 100644
index 4a3efe5..0000000
Binary files a/public/favicon/apple-touch-startup-image-2048x2732.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2160x1620.png b/public/favicon/apple-touch-startup-image-2160x1620.png
deleted file mode 100644
index 73a718c..0000000
Binary files a/public/favicon/apple-touch-startup-image-2160x1620.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2208x1242.png b/public/favicon/apple-touch-startup-image-2208x1242.png
deleted file mode 100644
index 0691e41..0000000
Binary files a/public/favicon/apple-touch-startup-image-2208x1242.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2224x1668.png b/public/favicon/apple-touch-startup-image-2224x1668.png
deleted file mode 100644
index 7bf14cd..0000000
Binary files a/public/favicon/apple-touch-startup-image-2224x1668.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2388x1668.png b/public/favicon/apple-touch-startup-image-2388x1668.png
deleted file mode 100644
index ee628dd..0000000
Binary files a/public/favicon/apple-touch-startup-image-2388x1668.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2436x1125.png b/public/favicon/apple-touch-startup-image-2436x1125.png
deleted file mode 100644
index 752595e..0000000
Binary files a/public/favicon/apple-touch-startup-image-2436x1125.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2688x1242.png b/public/favicon/apple-touch-startup-image-2688x1242.png
deleted file mode 100644
index dd7174a..0000000
Binary files a/public/favicon/apple-touch-startup-image-2688x1242.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-2732x2048.png b/public/favicon/apple-touch-startup-image-2732x2048.png
deleted file mode 100644
index 95242b7..0000000
Binary files a/public/favicon/apple-touch-startup-image-2732x2048.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-640x1136.png b/public/favicon/apple-touch-startup-image-640x1136.png
deleted file mode 100644
index 1c352f9..0000000
Binary files a/public/favicon/apple-touch-startup-image-640x1136.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-750x1334.png b/public/favicon/apple-touch-startup-image-750x1334.png
deleted file mode 100644
index e4e1091..0000000
Binary files a/public/favicon/apple-touch-startup-image-750x1334.png and /dev/null differ
diff --git a/public/favicon/apple-touch-startup-image-828x1792.png b/public/favicon/apple-touch-startup-image-828x1792.png
deleted file mode 100644
index b11563e..0000000
Binary files a/public/favicon/apple-touch-startup-image-828x1792.png and /dev/null differ
diff --git a/public/favicon/brandfavicon.svg b/public/favicon/brandfavicon.svg
deleted file mode 100644
index e1ff428..0000000
--- a/public/favicon/brandfavicon.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/public/favicon/browserconfig.xml b/public/favicon/browserconfig.xml
deleted file mode 100644
index 6ea2413..0000000
--- a/public/favicon/browserconfig.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
- #2f333e
-
-
-
-
-
-
diff --git a/public/favicon/favicon-16x16.png b/public/favicon/favicon-16x16.png
deleted file mode 100644
index b127ca6..0000000
Binary files a/public/favicon/favicon-16x16.png and /dev/null differ
diff --git a/public/favicon/favicon-32x32.png b/public/favicon/favicon-32x32.png
deleted file mode 100644
index 1845997..0000000
Binary files a/public/favicon/favicon-32x32.png and /dev/null differ
diff --git a/public/favicon/favicon-48x48.png b/public/favicon/favicon-48x48.png
deleted file mode 100644
index 72619b2..0000000
Binary files a/public/favicon/favicon-48x48.png and /dev/null differ
diff --git a/public/favicon/favicon.ico b/public/favicon/favicon.ico
deleted file mode 100644
index 22b3702..0000000
Binary files a/public/favicon/favicon.ico and /dev/null differ
diff --git a/public/favicon/favicon.svg b/public/favicon/favicon.svg
deleted file mode 100644
index 1aeb79d..0000000
--- a/public/favicon/favicon.svg
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/public/favicon/firefox_app_128x128.png b/public/favicon/firefox_app_128x128.png
deleted file mode 100644
index 6000319..0000000
Binary files a/public/favicon/firefox_app_128x128.png and /dev/null differ
diff --git a/public/favicon/firefox_app_512x512.png b/public/favicon/firefox_app_512x512.png
deleted file mode 100644
index c208753..0000000
Binary files a/public/favicon/firefox_app_512x512.png and /dev/null differ
diff --git a/public/favicon/firefox_app_60x60.png b/public/favicon/firefox_app_60x60.png
deleted file mode 100644
index cab9e9c..0000000
Binary files a/public/favicon/firefox_app_60x60.png and /dev/null differ
diff --git a/public/favicon/manifest.json b/public/favicon/manifest.json
deleted file mode 100644
index 7c4eb21..0000000
--- a/public/favicon/manifest.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "name": "geekdoc",
- "short_name": "geekdoc",
- "description": "Hugo theme made for documentation",
- "dir": "auto",
- "lang": "en-US",
- "display": "standalone",
- "orientation": "any",
- "start_url": "/?homescreen=1",
- "background_color": "#2f333e",
- "theme_color": "#2f333e",
- "icons": [
- {
- "src": "android-chrome-36x36.png",
- "sizes": "36x36",
- "type": "image/png"
- },
- {
- "src": "android-chrome-48x48.png",
- "sizes": "48x48",
- "type": "image/png"
- },
- {
- "src": "android-chrome-72x72.png",
- "sizes": "72x72",
- "type": "image/png"
- },
- {
- "src": "android-chrome-96x96.png",
- "sizes": "96x96",
- "type": "image/png"
- },
- {
- "src": "android-chrome-144x144.png",
- "sizes": "144x144",
- "type": "image/png"
- },
- {
- "src": "android-chrome-192x192.png",
- "sizes": "192x192",
- "type": "image/png"
- },
- {
- "src": "android-chrome-256x256.png",
- "sizes": "256x256",
- "type": "image/png"
- },
- {
- "src": "android-chrome-384x384.png",
- "sizes": "384x384",
- "type": "image/png"
- },
- {
- "src": "android-chrome-512x512.png",
- "sizes": "512x512",
- "type": "image/png"
- }
- ]
-}
\ No newline at end of file
diff --git a/public/favicon/manifest.webapp b/public/favicon/manifest.webapp
deleted file mode 100644
index 3642f99..0000000
--- a/public/favicon/manifest.webapp
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "version": "1.0.0",
- "name": "geekdoc",
- "description": "Hugo theme made for documentation",
- "icons": {
- "60": "firefox_app_60x60.png",
- "128": "firefox_app_128x128.png",
- "512": "firefox_app_512x512.png"
- },
- "developer": {
- "name": "Robert Kaussow",
- "url": null
- }
-}
\ No newline at end of file
diff --git a/public/favicon/mstile-144x144.png b/public/favicon/mstile-144x144.png
deleted file mode 100644
index 6f29a7c..0000000
Binary files a/public/favicon/mstile-144x144.png and /dev/null differ
diff --git a/public/favicon/mstile-150x150.png b/public/favicon/mstile-150x150.png
deleted file mode 100644
index 9616d50..0000000
Binary files a/public/favicon/mstile-150x150.png and /dev/null differ
diff --git a/public/favicon/mstile-310x150.png b/public/favicon/mstile-310x150.png
deleted file mode 100644
index 495f131..0000000
Binary files a/public/favicon/mstile-310x150.png and /dev/null differ
diff --git a/public/favicon/mstile-310x310.png b/public/favicon/mstile-310x310.png
deleted file mode 100644
index d129801..0000000
Binary files a/public/favicon/mstile-310x310.png and /dev/null differ
diff --git a/public/favicon/mstile-70x70.png b/public/favicon/mstile-70x70.png
deleted file mode 100644
index ec52491..0000000
Binary files a/public/favicon/mstile-70x70.png and /dev/null differ
diff --git a/public/fonts/GeekdocIcons.woff b/public/fonts/GeekdocIcons.woff
deleted file mode 100644
index 951517b..0000000
Binary files a/public/fonts/GeekdocIcons.woff and /dev/null differ
diff --git a/public/fonts/GeekdocIcons.woff2 b/public/fonts/GeekdocIcons.woff2
deleted file mode 100644
index 23bd093..0000000
Binary files a/public/fonts/GeekdocIcons.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_AMS-Regular.woff b/public/fonts/KaTeX_AMS-Regular.woff
deleted file mode 100644
index b804d7b..0000000
Binary files a/public/fonts/KaTeX_AMS-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_AMS-Regular.woff2 b/public/fonts/KaTeX_AMS-Regular.woff2
deleted file mode 100644
index 0acaaff..0000000
Binary files a/public/fonts/KaTeX_AMS-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Caligraphic-Bold.woff b/public/fonts/KaTeX_Caligraphic-Bold.woff
deleted file mode 100644
index 9759710..0000000
Binary files a/public/fonts/KaTeX_Caligraphic-Bold.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Caligraphic-Bold.woff2 b/public/fonts/KaTeX_Caligraphic-Bold.woff2
deleted file mode 100644
index f390922..0000000
Binary files a/public/fonts/KaTeX_Caligraphic-Bold.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Caligraphic-Regular.woff b/public/fonts/KaTeX_Caligraphic-Regular.woff
deleted file mode 100644
index 9bdd534..0000000
Binary files a/public/fonts/KaTeX_Caligraphic-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Caligraphic-Regular.woff2 b/public/fonts/KaTeX_Caligraphic-Regular.woff2
deleted file mode 100644
index 75344a1..0000000
Binary files a/public/fonts/KaTeX_Caligraphic-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Fraktur-Bold.woff b/public/fonts/KaTeX_Fraktur-Bold.woff
deleted file mode 100644
index e7730f6..0000000
Binary files a/public/fonts/KaTeX_Fraktur-Bold.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Fraktur-Bold.woff2 b/public/fonts/KaTeX_Fraktur-Bold.woff2
deleted file mode 100644
index 395f28b..0000000
Binary files a/public/fonts/KaTeX_Fraktur-Bold.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Fraktur-Regular.woff b/public/fonts/KaTeX_Fraktur-Regular.woff
deleted file mode 100644
index acab069..0000000
Binary files a/public/fonts/KaTeX_Fraktur-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Fraktur-Regular.woff2 b/public/fonts/KaTeX_Fraktur-Regular.woff2
deleted file mode 100644
index 735f694..0000000
Binary files a/public/fonts/KaTeX_Fraktur-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Bold.woff b/public/fonts/KaTeX_Main-Bold.woff
deleted file mode 100644
index f38136a..0000000
Binary files a/public/fonts/KaTeX_Main-Bold.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Bold.woff2 b/public/fonts/KaTeX_Main-Bold.woff2
deleted file mode 100644
index ab2ad21..0000000
Binary files a/public/fonts/KaTeX_Main-Bold.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-BoldItalic.woff b/public/fonts/KaTeX_Main-BoldItalic.woff
deleted file mode 100644
index 67807b0..0000000
Binary files a/public/fonts/KaTeX_Main-BoldItalic.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-BoldItalic.woff2 b/public/fonts/KaTeX_Main-BoldItalic.woff2
deleted file mode 100644
index 5931794..0000000
Binary files a/public/fonts/KaTeX_Main-BoldItalic.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Italic.woff b/public/fonts/KaTeX_Main-Italic.woff
deleted file mode 100644
index 6f43b59..0000000
Binary files a/public/fonts/KaTeX_Main-Italic.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Italic.woff2 b/public/fonts/KaTeX_Main-Italic.woff2
deleted file mode 100644
index b50920e..0000000
Binary files a/public/fonts/KaTeX_Main-Italic.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Regular.woff b/public/fonts/KaTeX_Main-Regular.woff
deleted file mode 100644
index 21f5812..0000000
Binary files a/public/fonts/KaTeX_Main-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Main-Regular.woff2 b/public/fonts/KaTeX_Main-Regular.woff2
deleted file mode 100644
index eb24a7b..0000000
Binary files a/public/fonts/KaTeX_Main-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Math-BoldItalic.woff b/public/fonts/KaTeX_Math-BoldItalic.woff
deleted file mode 100644
index 0ae390d..0000000
Binary files a/public/fonts/KaTeX_Math-BoldItalic.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Math-BoldItalic.woff2 b/public/fonts/KaTeX_Math-BoldItalic.woff2
deleted file mode 100644
index 2965702..0000000
Binary files a/public/fonts/KaTeX_Math-BoldItalic.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Math-Italic.woff b/public/fonts/KaTeX_Math-Italic.woff
deleted file mode 100644
index eb5159d..0000000
Binary files a/public/fonts/KaTeX_Math-Italic.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Math-Italic.woff2 b/public/fonts/KaTeX_Math-Italic.woff2
deleted file mode 100644
index 215c143..0000000
Binary files a/public/fonts/KaTeX_Math-Italic.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Bold.woff b/public/fonts/KaTeX_SansSerif-Bold.woff
deleted file mode 100644
index 8d47c02..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Bold.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Bold.woff2 b/public/fonts/KaTeX_SansSerif-Bold.woff2
deleted file mode 100644
index cfaa3bd..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Bold.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Italic.woff b/public/fonts/KaTeX_SansSerif-Italic.woff
deleted file mode 100644
index 7e02df9..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Italic.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Italic.woff2 b/public/fonts/KaTeX_SansSerif-Italic.woff2
deleted file mode 100644
index 349c06d..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Italic.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Regular.woff b/public/fonts/KaTeX_SansSerif-Regular.woff
deleted file mode 100644
index 31b8482..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_SansSerif-Regular.woff2 b/public/fonts/KaTeX_SansSerif-Regular.woff2
deleted file mode 100644
index a90eea8..0000000
Binary files a/public/fonts/KaTeX_SansSerif-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Script-Regular.woff b/public/fonts/KaTeX_Script-Regular.woff
deleted file mode 100644
index 0e7da82..0000000
Binary files a/public/fonts/KaTeX_Script-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Script-Regular.woff2 b/public/fonts/KaTeX_Script-Regular.woff2
deleted file mode 100644
index b3048fc..0000000
Binary files a/public/fonts/KaTeX_Script-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Size1-Regular.woff b/public/fonts/KaTeX_Size1-Regular.woff
deleted file mode 100644
index 7f292d9..0000000
Binary files a/public/fonts/KaTeX_Size1-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Size1-Regular.woff2 b/public/fonts/KaTeX_Size1-Regular.woff2
deleted file mode 100644
index c5a8462..0000000
Binary files a/public/fonts/KaTeX_Size1-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Size2-Regular.woff b/public/fonts/KaTeX_Size2-Regular.woff
deleted file mode 100644
index d241d9b..0000000
Binary files a/public/fonts/KaTeX_Size2-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Size2-Regular.woff2 b/public/fonts/KaTeX_Size2-Regular.woff2
deleted file mode 100644
index e1bccfe..0000000
Binary files a/public/fonts/KaTeX_Size2-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Size3-Regular.woff b/public/fonts/KaTeX_Size3-Regular.woff
deleted file mode 100644
index e6e9b65..0000000
Binary files a/public/fonts/KaTeX_Size3-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Size3-Regular.woff2 b/public/fonts/KaTeX_Size3-Regular.woff2
deleted file mode 100644
index 249a286..0000000
Binary files a/public/fonts/KaTeX_Size3-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Size4-Regular.woff b/public/fonts/KaTeX_Size4-Regular.woff
deleted file mode 100644
index e1ec545..0000000
Binary files a/public/fonts/KaTeX_Size4-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Size4-Regular.woff2 b/public/fonts/KaTeX_Size4-Regular.woff2
deleted file mode 100644
index 680c130..0000000
Binary files a/public/fonts/KaTeX_Size4-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/KaTeX_Typewriter-Regular.woff b/public/fonts/KaTeX_Typewriter-Regular.woff
deleted file mode 100644
index 2432419..0000000
Binary files a/public/fonts/KaTeX_Typewriter-Regular.woff and /dev/null differ
diff --git a/public/fonts/KaTeX_Typewriter-Regular.woff2 b/public/fonts/KaTeX_Typewriter-Regular.woff2
deleted file mode 100644
index 771f1af..0000000
Binary files a/public/fonts/KaTeX_Typewriter-Regular.woff2 and /dev/null differ
diff --git a/public/fonts/LiberationMono.woff b/public/fonts/LiberationMono.woff
deleted file mode 100644
index 05f5bd2..0000000
Binary files a/public/fonts/LiberationMono.woff and /dev/null differ
diff --git a/public/fonts/LiberationMono.woff2 b/public/fonts/LiberationMono.woff2
deleted file mode 100644
index 3f4bb06..0000000
Binary files a/public/fonts/LiberationMono.woff2 and /dev/null differ
diff --git a/public/fonts/LiberationSans-Bold.woff b/public/fonts/LiberationSans-Bold.woff
deleted file mode 100644
index 145ed9f..0000000
Binary files a/public/fonts/LiberationSans-Bold.woff and /dev/null differ
diff --git a/public/fonts/LiberationSans-Bold.woff2 b/public/fonts/LiberationSans-Bold.woff2
deleted file mode 100644
index b165967..0000000
Binary files a/public/fonts/LiberationSans-Bold.woff2 and /dev/null differ
diff --git a/public/fonts/LiberationSans-BoldItalic.woff b/public/fonts/LiberationSans-BoldItalic.woff
deleted file mode 100644
index aa4c0c1..0000000
Binary files a/public/fonts/LiberationSans-BoldItalic.woff and /dev/null differ
diff --git a/public/fonts/LiberationSans-BoldItalic.woff2 b/public/fonts/LiberationSans-BoldItalic.woff2
deleted file mode 100644
index 081c4d6..0000000
Binary files a/public/fonts/LiberationSans-BoldItalic.woff2 and /dev/null differ
diff --git a/public/fonts/LiberationSans-Italic.woff b/public/fonts/LiberationSans-Italic.woff
deleted file mode 100644
index ebe952e..0000000
Binary files a/public/fonts/LiberationSans-Italic.woff and /dev/null differ
diff --git a/public/fonts/LiberationSans-Italic.woff2 b/public/fonts/LiberationSans-Italic.woff2
deleted file mode 100644
index 86f6521..0000000
Binary files a/public/fonts/LiberationSans-Italic.woff2 and /dev/null differ
diff --git a/public/fonts/LiberationSans.woff b/public/fonts/LiberationSans.woff
deleted file mode 100644
index bb582d5..0000000
Binary files a/public/fonts/LiberationSans.woff and /dev/null differ
diff --git a/public/fonts/LiberationSans.woff2 b/public/fonts/LiberationSans.woff2
deleted file mode 100644
index 796cb17..0000000
Binary files a/public/fonts/LiberationSans.woff2 and /dev/null differ
diff --git a/public/fonts/Metropolis.woff b/public/fonts/Metropolis.woff
deleted file mode 100644
index 6b1342c..0000000
Binary files a/public/fonts/Metropolis.woff and /dev/null differ
diff --git a/public/fonts/Metropolis.woff2 b/public/fonts/Metropolis.woff2
deleted file mode 100644
index d79d50a..0000000
Binary files a/public/fonts/Metropolis.woff2 and /dev/null differ
diff --git a/public/images/050_set_tbl.test.out b/public/images/050_set_tbl.test.out
deleted file mode 100644
index a1b46a7..0000000
--- a/public/images/050_set_tbl.test.out
+++ /dev/null
@@ -1,322 +0,0 @@
-COPY tbl_geomset TO '/tmp/tbl_geomset' (FORMAT BINARY);
-COPY 100
-DROP TABLE IF EXISTS tbl_geomset_tmp;
-NOTICE: table "tbl_geomset_tmp" does not exist, skipping
-DROP TABLE
-CREATE TABLE tbl_geomset_tmp AS TABLE tbl_geomset WITH NO DATA;
-CREATE TABLE AS
-COPY tbl_geomset_tmp FROM '/tmp/tbl_geomset' (FORMAT BINARY);
-COPY 100
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset_tmp t2 WHERE t1.k = t2.k AND t1.g <> t2.g;
- count
--------
- 0
-(1 row)
-
-DROP TABLE tbl_geomset_tmp;
-DROP TABLE
-COPY tbl_geogset TO '/tmp/tbl_geogset' (FORMAT BINARY);
-COPY 100
-DROP TABLE IF EXISTS tbl_geogset_tmp;
-NOTICE: table "tbl_geogset_tmp" does not exist, skipping
-DROP TABLE
-CREATE TABLE tbl_geogset_tmp AS TABLE tbl_geogset WITH NO DATA;
-CREATE TABLE AS
-COPY tbl_geogset_tmp FROM '/tmp/tbl_geogset' (FORMAT BINARY);
-COPY 100
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset_tmp t2 WHERE t1.k = t2.k AND t1.g <> t2.g;
- count
--------
- 0
-(1 row)
-
-DROP TABLE tbl_geogset_tmp;
-DROP TABLE
-SELECT MAX(length(asText(g))) FROM tbl_geomset;
- max
------
- 491
-(1 row)
-
-SELECT MAX(length(asText(g))) FROM tbl_geogset;
- max
------
- 470
-(1 row)
-
-SELECT MAX(length(asEWKT(g))) FROM tbl_geomset;
- max
------
- 491
-(1 row)
-
-SELECT MAX(length(asEWKT(g))) FROM tbl_geogset;
- max
------
- 570
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset WHERE geomsetFromBinary(asBinary(g)) <> g;
- count
--------
- 0
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset WHERE geogsetFromBinary(asBinary(g)) <> g;
- count
--------
- 0
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset WHERE geomsetFromHexWKB(asHexWKB(g)) <> g;
- count
--------
- 0
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset WHERE geogsetFromHexWKB(asHexWKB(g)) <> g;
- count
--------
- 0
-(1 row)
-
-SELECT memorySize(set_agg(g)) FROM tbl_geom_point3D WHERE g IS NOT NULL AND NOT ST_IsEmpty(g);
- memorysize
-------------
- 4856
-(1 row)
-
-SELECT memorySize(set_agg(g)) FROM tbl_geog_point3D WHERE g IS NOT NULL AND NOT ST_IsEmpty(g::geometry);
- memorysize
-------------
- 4856
-(1 row)
-
-SELECT MAX(memorySize(set(g))) FROM tbl_geom_point3D WHERE g IS NOT NULL AND NOT ST_IsEmpty(g);
-ERROR: Only point geometries accepted
-SELECT MAX(memorySize(set(g))) FROM tbl_geog_point3D WHERE g IS NOT NULL AND NOT ST_IsEmpty(g::geometry);
-ERROR: Only point geometries accepted
-SELECT MIN(ST_X(startValue(round(g, 6)))) FROM tbl_geomset;
- min
-------------
- -96.535171
-(1 row)
-
-SELECT MIN(ST_X(startValue(round(g, 6))::geometry)) FROM tbl_geogset;
- min
-----------
- 0.432515
-(1 row)
-
-SELECT MAX(memorySize(g)) FROM tbl_geomset;
- max
------
- 504
-(1 row)
-
-SELECT MAX(storageSize(g)) FROM tbl_geomset;
- max
------
- 504
-(1 row)
-
-SELECT MIN(numValues(g)) FROM tbl_geomset;
- min
------
- 5
-(1 row)
-
-SELECT MIN(ST_X(startValue(g))) FROM tbl_geomset;
- min
-------------
- -96.535171
-(1 row)
-
-SELECT MIN(ST_X(endValue(g))) FROM tbl_geomset;
- min
-------------
- -96.535171
-(1 row)
-
-SELECT MIN(ST_X(valueN(g, 1))) FROM tbl_geomset;
- min
-------------
- -96.535171
-(1 row)
-
-SELECT MIN(array_length(getValues(g), 1)) FROM tbl_geomset;
- min
------
- 5
-(1 row)
-
-SELECT MAX(memorySize(g)) FROM tbl_geogset;
- max
------
- 504
-(1 row)
-
-SELECT MAX(storageSize(g)) FROM tbl_geogset;
- max
------
- 504
-(1 row)
-
-SELECT MIN(numValues(g)) FROM tbl_geogset;
- min
------
- 5
-(1 row)
-
-SELECT MIN(ST_X(startValue(g)::geometry)) FROM tbl_geogset;
- min
-----------
- 0.432515
-(1 row)
-
-SELECT MIN(ST_X(endValue(g)::geometry)) FROM tbl_geogset;
- min
-----------
- 0.432515
-(1 row)
-
-SELECT MIN(ST_X(valueN(g, 1)::geometry)) FROM tbl_geogset;
- min
-----------
- 0.432515
-(1 row)
-
-SELECT MIN(array_length(getValues(g), 1)) FROM tbl_geogset;
- min
------
- 5
-(1 row)
-
-SELECT numValues(set_agg(g)) FROM tbl_geom_point3D WHERE NOT ST_IsEmpty(g);
- numvalues
------------
- 99
-(1 row)
-
-SELECT numValues(set_agg(g)) FROM tbl_geog_point3D WHERE NOT ST_IsEmpty(g::geometry);
- numvalues
------------
- 99
-(1 row)
-
-WITH test1(k, g) AS (
- SELECT k, unnest(g) FROM tbl_geomset ),
-test2 (k, g) AS (
- SELECT k, set_agg(g) FROM test1 GROUP BY k )
-SELECT COUNT(*) FROM test2 t1, tbl_geomset t2 WHERE t1.k = t2.k AND t1.g <> t2.g;
- count
--------
- 0
-(1 row)
-
-WITH test1(k, g) AS (
- SELECT k, unnest(g) FROM tbl_geogset ),
-test2 (k, g) AS (
- SELECT k, set_agg(g) FROM test1 GROUP BY k )
-SELECT COUNT(*) FROM test2 t1, tbl_geogset t2 WHERE t1.k = t2.k AND t1.g <> t2.g;
- count
--------
- 0
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE set_cmp(t1.g, t2.g) = -1;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g = t2.g;
- count
--------
- 99
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g <> t2.g;
- count
--------
- 9702
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g < t2.g;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g <= t2.g;
- count
--------
- 4950
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g > t2.g;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geomset t1, tbl_geomset t2 WHERE t1.g >= t2.g;
- count
--------
- 4950
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE set_cmp(t1.g, t2.g) = -1;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g = t2.g;
- count
--------
- 99
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g <> t2.g;
- count
--------
- 9702
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g < t2.g;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g <= t2.g;
- count
--------
- 4950
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g > t2.g;
- count
--------
- 4851
-(1 row)
-
-SELECT COUNT(*) FROM tbl_geogset t1, tbl_geogset t2 WHERE t1.g >= t2.g;
- count
--------
- 4950
-(1 row)
-
-SELECT MAX(set_hash(g)) FROM tbl_geomset;
- max
-------------
- 2098051068
-(1 row)
-
-SELECT MAX(set_hash(g)) FROM tbl_geogset;
- max
-------------
- 2135464549
-(1 row)
-
diff --git a/public/images/boxes.png b/public/images/boxes.png
deleted file mode 100644
index 62f918d..0000000
Binary files a/public/images/boxes.png and /dev/null differ
diff --git a/public/images/delete.png b/public/images/delete.png
deleted file mode 100644
index cfcba41..0000000
Binary files a/public/images/delete.png and /dev/null differ
diff --git a/public/images/insert.png b/public/images/insert.png
deleted file mode 100644
index 78fa5bf..0000000
Binary files a/public/images/insert.png and /dev/null differ
diff --git a/public/images/interpolation_seq.png b/public/images/interpolation_seq.png
deleted file mode 100644
index 9851bbc..0000000
Binary files a/public/images/interpolation_seq.png and /dev/null differ
diff --git a/public/images/interpolation_seqset.png b/public/images/interpolation_seqset.png
deleted file mode 100644
index b030127..0000000
Binary files a/public/images/interpolation_seqset.png and /dev/null differ
diff --git a/public/images/meos_classes.png b/public/images/meos_classes.png
deleted file mode 100644
index 1cafd2b..0000000
Binary files a/public/images/meos_classes.png and /dev/null differ
diff --git a/public/images/meos_instances.png b/public/images/meos_instances.png
deleted file mode 100644
index c528f63..0000000
Binary files a/public/images/meos_instances.png and /dev/null differ
diff --git a/public/images/meos_instances_values.png b/public/images/meos_instances_values.png
deleted file mode 100644
index 15d545b..0000000
Binary files a/public/images/meos_instances_values.png and /dev/null differ
diff --git a/public/images/meos_struct.png b/public/images/meos_struct.png
deleted file mode 100644
index 48190c4..0000000
Binary files a/public/images/meos_struct.png and /dev/null differ
diff --git a/public/images/meos_subtype_instances.png b/public/images/meos_subtype_instances.png
deleted file mode 100644
index 3b73bae..0000000
Binary files a/public/images/meos_subtype_instances.png and /dev/null differ
diff --git a/public/images/meos_subtypes.png b/public/images/meos_subtypes.png
deleted file mode 100644
index c9a0e3b..0000000
Binary files a/public/images/meos_subtypes.png and /dev/null differ
diff --git a/public/images/meos_subtypes_values.png b/public/images/meos_subtypes_values.png
deleted file mode 100644
index 3b73bae..0000000
Binary files a/public/images/meos_subtypes_values.png and /dev/null differ
diff --git a/public/images/meos_update_sequence.png b/public/images/meos_update_sequence.png
deleted file mode 100644
index 7704e76..0000000
Binary files a/public/images/meos_update_sequence.png and /dev/null differ
diff --git a/public/images/meos_update_sequenceset.png b/public/images/meos_update_sequenceset.png
deleted file mode 100644
index cae2d7b..0000000
Binary files a/public/images/meos_update_sequenceset.png and /dev/null differ
diff --git a/public/images/normalization.png b/public/images/normalization.png
deleted file mode 100644
index 48a2d5c..0000000
Binary files a/public/images/normalization.png and /dev/null differ
diff --git a/public/images/normalization_seq.png b/public/images/normalization_seq.png
deleted file mode 100644
index 4473418..0000000
Binary files a/public/images/normalization_seq.png and /dev/null differ
diff --git a/public/images/normalization_seqset.png b/public/images/normalization_seqset.png
deleted file mode 100644
index 173ffab..0000000
Binary files a/public/images/normalization_seqset.png and /dev/null differ
diff --git a/public/images/setspan_classes.png b/public/images/setspan_classes.png
deleted file mode 100644
index fd8e0c6..0000000
Binary files a/public/images/setspan_classes.png and /dev/null differ
diff --git a/public/images/setspan_struct.png b/public/images/setspan_struct.png
deleted file mode 100644
index 59f8ef6..0000000
Binary files a/public/images/setspan_struct.png and /dev/null differ
diff --git a/public/images/skiplist.png b/public/images/skiplist.png
deleted file mode 100644
index 82937a0..0000000
Binary files a/public/images/skiplist.png and /dev/null differ
diff --git a/public/images/skiplist_delete.png b/public/images/skiplist_delete.png
deleted file mode 100644
index 8775336..0000000
Binary files a/public/images/skiplist_delete.png and /dev/null differ
diff --git a/public/images/skiplist_insert.png b/public/images/skiplist_insert.png
deleted file mode 100644
index 2f0fde7..0000000
Binary files a/public/images/skiplist_insert.png and /dev/null differ
diff --git a/public/images/temp_classes.png b/public/images/temp_classes.png
deleted file mode 100644
index 1cafd2b..0000000
Binary files a/public/images/temp_classes.png and /dev/null differ
diff --git a/public/images/temp_struct.png b/public/images/temp_struct.png
deleted file mode 100644
index aeb7f8b..0000000
Binary files a/public/images/temp_struct.png and /dev/null differ
diff --git a/public/images/temp_types.png b/public/images/temp_types.png
deleted file mode 100644
index 4d07c44..0000000
Binary files a/public/images/temp_types.png and /dev/null differ
diff --git a/public/images/temporal_delete.png b/public/images/temporal_delete.png
deleted file mode 100644
index cfcba41..0000000
Binary files a/public/images/temporal_delete.png and /dev/null differ
diff --git a/public/images/temporal_insert.png b/public/images/temporal_insert.png
deleted file mode 100644
index 78fa5bf..0000000
Binary files a/public/images/temporal_insert.png and /dev/null differ
diff --git a/public/images/temporal_update.png b/public/images/temporal_update.png
deleted file mode 100644
index 4e25025..0000000
Binary files a/public/images/temporal_update.png and /dev/null differ
diff --git a/public/images/update.png b/public/images/update.png
deleted file mode 100644
index 4e25025..0000000
Binary files a/public/images/update.png and /dev/null differ
diff --git a/public/img/geekdoc-stack.svg b/public/img/geekdoc-stack.svg
deleted file mode 100644
index 302c764..0000000
--- a/public/img/geekdoc-stack.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
deleted file mode 100644
index 79cbbc9..0000000
--- a/public/index.html
+++ /dev/null
@@ -1,2029 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- MEOS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
MEOS (Mobility Engine, Open Source) is a C library and its associated API for manipulating temporal and spatiotemporal data. It is the core component of MobilityDB, an open source geospatial trajectory data management & analysis platform built on top of PostgreSQL and PostGIS.
-
MEOS extends the ISO 19141:2008 standard (Geographic information — Schema for moving features) for representing the change of non-spatial attributes of features. It also takes into account the fact that when collecting mobility data it is necessary to represent “temporal gaps”, that is, when for some period of time no observations were collected due, for instance, to signal loss.
-
MEOS is heavily inspired by a similar library called GEOS (Geometry Engine, Open Source) — hence the name. A first version of the MEOS library written in C++ has been proposed by Krishna Chaitanya Bommakanti. However, due to the fact that MEOS codebase is actually a subset of MobilityDB codebase, which is written in C and in SQL, the current version of the library allows us to evolve both programming environments simultaneously.
-
MEOS aims to be the base library on which other projects can be built. For example, the following projects are built on top of MEOS: