<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jaak Henno</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hannu Jaakkola</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jukka Mäkelä</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Tallinn University of Technology</institution>
          ,
          <addr-line>Ehitajate tee 5, 19086 Tallinn</addr-line>
          ,
          <country country="EE">Estonia</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Tampere University</institution>
          ,
          <addr-line>Pori Campus, P.O. Box 300, FI-28101 Pori</addr-line>
          ,
          <country country="FI">Finland</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Lapland</institution>
          ,
          <addr-line>Rovaniemi</addr-line>
          ,
          <country country="FI">Finland</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2021</year>
      </pub-date>
      <fpage>2021</fpage>
      <lpage>2028</lpage>
      <abstract>
        <p>Once upon a time programming was done just writing commands of a programming language in a proper order, but currently software is created using libraries, API-s (Application Programming Interface), frameworks, Dockers, Kubernetes etc. Libraries load other libraries, API-s call other API-s and as a result seemingly short and simple programs may have amazing depth of code and complexity, what causes for programmers many problems, especially for students. For interpreted code this depth could be (approximately) measured with the ratio of the visual code vs code in libraries. It is shown that the number of LOC (Lines Of Code) in invisible code - code in libraries, modules, API-s etc. is even in small practical programs thousands-millions times greater than the number of lines in the visible code. Innovations (cloud computing, multicore CPU-s etc.) cause introduction of new libraries and modules which enable use of new possibilities in existing software ecosystem, but also introduce bigger and bigger amounts of invisible code. During the pandemic grow student's use of WWW tutorials, but abundance of code in programming examples/tutorials on WWW is sometimes unnecessary, caused by obsolete or unneeded packages and libraries and sometimes also by desire to earn on adverting (un-needed, but popular) code packages for high-paying customers. In the following are analyzed some Python 3 and JavaScript examples.</p>
      </abstract>
      <kwd-group>
        <kwd>1 Software complexity</kwd>
        <kwd>libraries</kwd>
        <kwd>modules</kwd>
        <kwd>API</kwd>
        <kwd>LOC</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>With exhaustion of Earth's natural resources humanity is constantly increasing scientific research,
which nowadays is based on world-wide programming and communication ecosystem. Once upon a
time programming was done just writing commands of a programming language in a proper order.
Modern software is created using libraries, API-s (Application Programming Interface), selecting
commands from menus in frameworks, packed with Dockers, Kubernetes etc. Libraries load other
libraries, API-s call other API-s and as a result programs have amazing depth of code. For
notcompiled (interpreted code) that depth could be (approximately) measured with the ratio of the visual
code vs code in libraries - the total number of lines used in visible code is thousands-millions times
greater than the number of lines in the visible code. This abundance of code is often unnecessary,
caused by obsolete or unneeded packages and libraries, but sometimes also by desire to earn on
adverting (un-needed, but popular) code packages for high-paying customers. This creates many
difficulties for students, who often cannot understand the programming task but try to solve it using
'top-down' programming – first import all libraries and packages, what have been used in some
previous project and then just start googling trying to get from Internet sources as many snippets
(which may be useful) as possible. Such 'top-down' programmers often do never become a 'real'
programmers, but continue creating new packages and libraries, which 'just work' and further
contaminate the software ecosystem.
1.1.</p>
    </sec>
    <sec id="sec-2">
      <title>World-wide ecosystem of programming and communication</title>
      <p>
        With exhaustion of Earth's natural resources humanity is constantly increasing scientific
research. Spending on sciences has increased in last four years worldwide by 19% and the
number of scientists grew by 13.7% reaching currently already to 8.8 million [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Modern Science is based on worldwide ecosystem of programs and communication and spending
on IT technology is growing rapidly. Since the start of 2020, the COVID-19 crisis further boosted
this trend. We constantly need more and more programmers. But software development today is
orders of magnitude more complex than one or two decades ago and is increasing with every new
innovation in hardware, new method in software, new encryption method.
      </p>
    </sec>
    <sec id="sec-3">
      <title>2. Changes in programs and in programming</title>
      <p>Once upon a time programming was done just writing commands of a programming language in
a proper order, but these times are long gone. While e.g. the language Python 3.7 has only 35
keywords and 59 symbols, the real power of the language is in its libraries and modules, e.g. in
the computer used to write this text are installed 361 Python 3.7 modules. Currently
programming is done with modules, libraries, API-s, Dockers, Kubernetes etc. Every module
presents some functionality what is (usually) far more complex than a single command of a
programming language. Modules and API-s call other modules, libraries, API-s, what makes
modern programs complex hierarchical systems, where the visible part (code what is inspect able
in the program) is a minuscule part of the invisible in final code, hidden in libraries, API-s etc.
Modern software is like icebergs in Antarctic – the main part is invisible.</p>
      <p>In the following are presented some (simple) examples showing this 'iceberg-style' programming
and an analyse of the reasons for programs 'blow-up', since the depth/complexity is causing many
problems for students, but also for the whole modern world-wide software ecosystem. To
illustrate the issue here is introduced program's visibility index: ratio of visible code vs code
loaded in libraries/modules.
2.1.</p>
    </sec>
    <sec id="sec-4">
      <title>A simple graph</title>
      <p>The following graph depicts development of the SQAMIA conference over 2012..2019 in terms of
number of pages in the conference proceedings; the yellow line is a second-order (square)
approximation of the process.</p>
      <p>Growth of the SQAMIA conference –by number of pages in Proceedings (the yellow line – second-order
approximation)
The above graph was produced by 17 lines (including commentaries – they are important to
make a program easier to understand for humans) of Python 3 code :
1.
2.
3.
4.
5.
6.
7.
8.</p>
      <p>9.
10.
11.
12.
13.
14.
15.
16.
17.</p>
      <p>
        import numpy as np
import matplotlib.pyplot as plt
# x axis values
x_sqamia = range(2012,2020)
# corresponding y axis values
y_sqamia = [18,108,114,80,109,192,154,176] # Sqamia
plt.plot(x_sqamia, y_sqamia)
# naming the x axis
plt.xlabel('year')
# naming the y axis
plt.ylabel('pages in Proceedings ')
# giving to graph a title
plt.title("Growth of the Sqamia conference")
# calculating coefficients of the approximation line
a2, a1, a0 = np.polyfit(x_sqamia, y_sqamia, 2)
plt.plot(x_sqamia, a2*x_sqamia*x_sqamia + a1*x_sqamia + a0)
plt.show()
This text is understandable also for non-programmers. But programmers looking the above code
will wonder – no loops ??? The 'classical' program, i.e. using only commands from a programming
language without any libraries would have to use several loops – using the x_sqamia iterator,
projecting values to axes, solving the system of equations for creating square approximation in
order to calculate correlation parameters a2,a1,a0. Totally is hidden the AI (Artificial
Intelligence) – calculating the size and visually pleasing placement of axes and their scales.
All the functionality of the above program is hidden in the two explicitly called libraries numpy,
matplotlib and many others, called from these two. The pyinstaller [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] tool reveals, that for
drawing of this graph are 162 modules called all together:
bootlocale • _collections_abc • _weakrefset • abc • codecs • collections •
collections.abc • copyreg • encodings • encodings.aliases • encodings.ascii … …
sre_constants • sre_parse • tokenize • traceback • types • warnings • weakref …
Tracing the files for these modules revealed, that they all together contain 18378 lines of Python
code (together with commentaries) and the added modules increased 31882 times the size (on
disk) of the program – from 2 KB to 63764 KB.
      </p>
      <p>The 'blow-up' and then 'missing' together make programming (at least for students) a
nondeterministic exercise, thus difficult/impossible to learn) is in (this case mainly) caused by
modern exceedingly diverse executing environments – Windows (32/64 bit), MacOS, GNU/Linux,
AIX, Solaris, FreeBSD and OpenBSD, IBM-style mainframes, diverse lot of mobile devices, which
all have some differences, thus for them are called different modules. Many of them are specific
to current environment, e.g. ntpath exists only on Windows, but the posixpath exists only on
Posix/Unix/Mac systems and is missing in Windows environment (but the compiler is still trying
to load it). This creates (in every environment) many modules which compiler marks as 'missing'.
There are several types of missing modules:
 optional - imported within a try-except-statement
 delayed - imported from within a function
 conditional - imported within an if-statement
 top-level - imported at the top-level; they are most important and may cause the program
misfunction
The same module may fall into several categories, e.g. for this program the missing module
org.python was called by module copy (optional), xml.sax (delayed, conditional) and by module
setuptools.sandbox (conditional).</p>
      <p>In Windows 64bit environment was the PyInstaller able to access only 41 packages (ca 25%).
The PyInstaller (in the same environment) even searched for more and did not find 238
modules, but it also warned "This does not necessarily mean this module is required for
running you program" – missing modules are required in some other operating environment, e.g.
the list of modules contained 125 encodings:
encodings.ascii • encodings.base64_codec • encodings.big5 • encodings.big5hkscs •
encodings.bz2_codec • encodings.charmap • encodings.cp037 • encodings.cp1006 •
encodings.cp1026 …
(missing were codecs for Egypt, Cuba, UAR etc, ).</p>
      <p>
        All together were among missing modules 150 optional, 106 delayed, 94 conditional and 313
toplevel. Large number of missing top-level modules does not mean, that the code can not be
executed – a missing top-level module were called from a module, which itself is optional.
But the highest level of program's execution is the OS (Operating System, often called also as
Operating Environments) [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], in this case Windows 10 64bit. Microsoft also uses several options
in different OS-es. The program's manifest shows, that Microsoft approves the code in 5
Operating Systems (all Windows versions before Windows 7 are already missing) :
&lt;supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/&gt; &lt;!-- Windows Vista
-&gt;
&lt;supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/&gt;&lt;!-- Windows 7 --&gt;
&lt;supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/&gt;&lt;!-- Windows 8 and
Windows Server 2012 --&gt;
&lt;supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/&gt;&lt;!-- Windows 8.1 and
Windows Server 2012 R2 --&gt;
&lt;supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/&gt;&lt;!-- Windows 10,
Windows 11, Windows Server 2016, Windows Server 2019 and Windows Server 2022 --&gt;
In modules found by PyInstaller where all together 18378 LOC (Lines Of Code), thus the index
of code visibility, i.e. relation to what in code is visible and what is hidden is rather astonishing:
visibility 
      </p>
      <sec id="sec-4-1">
        <title>LOC(visible_code) 18</title>
        <p></p>
      </sec>
      <sec id="sec-4-2">
        <title>LOC(invisible_code) 18378</title>
        <p> 0.0000979431
It is rather difficult (e.g. for students) to understand fully a program when they can inspect only
0.0000979431-th size part of it – e.g. what should be done with the program for the above graph
in order to include two missing years 2020, 2021 to it ? It turns out, that a quite new concept –
data filtering – is needed, and from inspecting the above program (as an educational simple
example for producing data graphs) this is not easy to produce.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>2.2. A simple web page</title>
      <p>Unnecessary lines of code may be also inserted deliberately – either by ignorance of authors or by
desire to advertise some popular library.</p>
      <p>
        A typical program for beginners (using any programming language/system) is to produce a
program to create a visible display "Hello World". In html5 for this are needed only some lines
of html5 code (in basic mode).
But the programming powerhouse Facebook (currently Meta) needs thousands of such files (with
largely increased functionality for tracking users). Thus they created a Javascript+Html5 library
react.js advertising it with "React makes it painless to create interactive User Interfaces." [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
The www-tutorials site W3Schools introduces react.js with an example to create just this
example for visible display of string "Hello World" [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] using 17 lines of html5 code.
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
      </p>
      <p>&lt;script src="https://unpkg.com/react@18/umd/react.development.js"
crossorigin&gt;&lt;/script&gt;</p>
      <p>&lt;script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
crossorigin&gt;&lt;/script&gt;</p>
      <p>&lt;script src="https://unpkg.com/@babel/standalone/babel.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="mydiv"&gt;&lt;/div&gt;
&lt;script type="text/babel"&gt;
function Hello() {</p>
      <p>return &lt;h1&gt;Hello World!&lt;/h1&gt;;
}</p>
      <p>
        ReactDOM.render(&lt;Hello /&gt;, document.getElementById('mydiv'))
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
This script has some strange features:
 (lines 11:.13) - why for displaying a static string "Hello World!" (without any variables) is
created a function in an environment ReactDOM – the html5 language (without any
Javascript) can perfectly show a static string in a pre-defined div?
 (line 14) - why is for displaying/rendering the string used a proprietary function
"ReactDim.render" – in an html-document rendering anything on screen is always done
by browser, a script can only use the available CSS functions (CSS is not used)?
 (lines 4..6) - why for creating this functionality are loaded three Javascript libraries with
altogether 73571+3358+26275 = 103204 lines (after un-minifying) of JavaScript code,
which are not needed at all?
 (lines 4..5) - the crossorigin scripting has been for years considered extremely unsafe
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], so why it us used in a worldwide tutorials site proposed/presented to many students?
 the example is missing the title tag, which by the html5 standard is obligatory (missing
&lt;/title&gt; should cause the browser to ignore the rest of the page [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ])
The (absolutely excessive, hidden) lines of Javascript code make this example extremely
unhealthy:
      </p>
      <sec id="sec-5-1">
        <title>LOC(visible_code) 17</title>
        <p>visibility  </p>
      </sec>
      <sec id="sec-5-2">
        <title>LOC(invisible_code) 103204</title>
        <p> 0.000164722
Using plain html5 would return an easily understandable script, producing exactly the same
page:
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;</p>
        <p>&lt;title&gt; Hello !&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;</p>
        <p>&lt;div id="mydiv"&gt;Hello World!&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</p>
      </sec>
      <sec id="sec-5-3">
        <title>LOC(visible_code) 11</title>
        <p>visibility    1.0</p>
      </sec>
      <sec id="sec-5-4">
        <title>LOC(invisible_code) 11</title>
        <p>
          The main burden – 73571 lines of code (after un-minifying) comes from the Babel library for
interpreting Ecmascript ES6 (the official name for Javascript). All major browsers can handle
ES6 already for last five years [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ], thus Babel is not needed at all [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], it only increases page's size
and slows it down.
        </p>
        <p>At least for a student this is not "painless", but (very) painful.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>2.3. Increase of complexity with AI</title>
      <p>
        Our computing environments are constantly changing and their complexity is rapidly growing.
Every day are uploaded/modified thousands of new libraries/API-s which are also used in new
programs, e.g. in one week - August 3 – August 10, 2022 in the Github repository for node.js
"1,479 files have changed and there have been 34,550 additions and 6,640 deletions." [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
With exhaustion of Earth's natural resources humanity is forced to use their
resources/technologies far more efficiently. All our innovations begin with communication – a
workgroup meeting, chat in wine/bierstudbe etc, i.e they are presented in some natural human
language. For handling human language in computers have been developed programs with
enormous (inner) complexity.
      </p>
      <p>
        The Tensorflow example from Google [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] tries 'understand' natural language' - any language –
English, Serbian, Croatian etc without using any dictionaries; these 'superlinguists' abilities are
based on 4 imported modules only:
import tensorflow as tf
import numpy as np
import os
The PyInstaller reveals that from these four are imported other 158 modules:
_bootlocale • _collections_abc • _weakrefset • abc • codecs • collections •
collections.abc • copyreg • encodings • encodings.aliases • encodings.ascii •
encodings.base64_codec • encodings.big5 • encodings.big5hkscs •
encodings.bz2_codec • encodings.charmap • encodings.cp037 • encodings.cp1006 •
encodings.cp1026 • encodings.cp1125 …•
The module os imports also package boto (the current version is boto3/botocore), which
appears in the modulegraph gross-reference list 334 times. The module boto is the low-level CLI
(Command Language Interface) for several cloud platforms - AWS (Amazon Web Services), i.e.
SDK (System Developing Kit), which makes it easy to integrate a Python library or script with
AWS services including Amazon S3, Amazon EC2, Amazon DynamoDB, but also for Google
Storage and some private cloud systems, e.g. VMware vCloud, OpenStack, Open Nebula or
Eucalyptus. Thus Tensorflow is already prepared to swim in Amazon cloud (boto is a small river
dolphin living in Amazon [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]).
      </p>
      <p>The search for Python 3.7 modules was able to find 55 of 158 modules with 24465 lines of code.
The Tensorflow example program had 52 lines of code, thus in this case</p>
      <sec id="sec-6-1">
        <title>LOC(visible_code) 52</title>
        <p>visibility    0.002125485</p>
      </sec>
      <sec id="sec-6-2">
        <title>LOC(invisible_code) 24465</title>
        <p>But here the main growth in complexity comes from the program.</p>
        <p>Definition of the Tensorflow model contains only 6 lines of code:
def build_model(vocab_size, embedding_dim, rnn_units, batch_size):
model = tf.keras.Sequential([tf.keras.layers.Embedding(vocab_size,
embedding_dim,batch_input_shape=[batch_size, None]),
tf.keras.layers.GRU(rnn_units,return_sequences=True,stateful=True,recurrent_init
ializer='glorot_uniform'),tf.keras.layers.Dense(vocab_size)]
return model
But this definition creates a model with over 4 million parameters as shown in output for Python
command model.summary():</p>
        <p>Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (128, None, 256) 43776
_________________________________________________________________
gru (GRU) (128, None, 1024) 3938304
_________________________________________________________________
dense (Dense) (128, None, 171) 175275
=================================================================
Total params: 4,157,355
Trainable params: 4,157,355</p>
        <p>
          Non-trainable params: 0
Handling more than 4 million parameters is (very) slow in 'plain' Python, since Python uses only
a single CPU core and cannot parallelize computation. In most of modern computers are already
multicore CPU-s and their speed can be utilized with another library - bodo, which is [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]: "a new
compute engine using a novel JIT inferential compiler technology that brings supercomputing-like
performance and scalability to native Python analytics code. Bodo automatically parallelizes
Python/Pandas code allowing applications to scale to 10,000+ cores and petabytes of data."
Innovations – cloud computing, multicore CPU-s, use of graphics etc introduce constantly new
modules and libraries – and hide more LOC 'under the water'. The rapidly growing cloud
computing is currently one of the most important reasons increasing complexity of programs
introducing new libraries. The recent forecast [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] predicts, that the global cloud computing
market will be 1,251.09 billion USD by 2028 or the annual growth over the period will be 19.1%.
The growth of cloud computing in education is expected even bigger – 25.6% [16]. In 2021 nearly
half (42%) of enterprises in EU already used cloud computing [17].
        </p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>3. Conclusions</title>
      <p>Many (most) of the classical programming textbooks considered programming as a process of
creating a linear artefact - putting programming language statements one-after-another in a
proper order.</p>
      <p>But already creators of the compilers for the first high-level language – Fortran, Cobol –
understood that programs and their functionality (also creating the programs itself) are far from
linearity and programs are always presented as trees – e.g. as the AST (Abstract Syntax Tree).
Programming, human thought has never been linear, although many of created by ourselves
tools (standards, texts, constitutions etc.) are trying to force to us this style of thinking.
We are not linear. Programming has constantly becoming more and more non-linear
hierarchical. Programmers still have to create linear text, but programs are including libraries,
IDE-s, modules etc. which all make programs functionality (inner working) strongly
multidimensional. Software development is not a smooth or simple process, many researchers
are worried with its growing complexity, see e.g. [18]. Emily Freeman, head of DevOps at
Amazon Web Services Inc characterized it "It’s a study in entropy, and it is not getting any more
simple”[19]. Unfortunately we are still not aware how to teach to our non-linearly thinking
students the proper non-linear thinking methods/styles, but they should (at least) be aware of
tremendous dimensionality of our programs (and our thoughts).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1] 1 Unesco Institute for Statistics.
          <year>2022</year>
          .
          <article-title>How much does your country invest in R&amp;D</article-title>
          . Retrieved from http://uis.unesco.org/apps/visualisations/research-and
          <string-name>
            <surname>-</surname>
          </string-name>
          development-spending
          <source>/ on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <fpage>2Pyinstaller</fpage>
          .
          <year>2022</year>
          .
          <article-title>Pyinstaller 5.2</article-title>
          . Retrieved from https://pypi.org/project/pyinstaller/ on July 30th,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Microsoft. 2022. Application</given-names>
            <surname>Manifest</surname>
          </string-name>
          . Retrieved from https://docs.microsoft.com/enus/windows/win32/sbscs/application-manifests
          <source>on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <fpage>3React</fpage>
          .
          <year>2022</year>
          .
          <article-title>React - A JavaScript library for building user interfaces</article-title>
          .
          <source>Retrieved from https://reactjs.org/ on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <fpage>4W3Schools</fpage>
          .
          <article-title>React Getting Started</article-title>
          . Retrieved from https://www.w3schools.com/react/ react_getstarted.
          <source>asp on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <article-title>[6] 5 rot</article-title>
          , Rémy.
          <year>2020</year>
          .
          <article-title>Understanding Cross-Origin Resource Sharing Vulnerabilities</article-title>
          . Tenable Blog. Retrieved from https://www.tenable.com/blog/understanding
          <article-title>-cross-origin-resource-sharingvulnerabilities on</article-title>
          <source>July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>6MDN Web</given-names>
            <surname>Docs</surname>
          </string-name>
          .
          <year>2022</year>
          .
          <article-title>&lt;title&gt;: The Document Title element</article-title>
          . Retrieved from https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title on July 30th,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <fpage>7W3Schools</fpage>
          .
          <year>2022</year>
          .
          <article-title>JavaScript Versions. Browser Support for ECMAScript 2016</article-title>
          . Retrieved from https://www.w3schools.com/js/js_versions.
          <source>asp on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <fpage>8SidmartinBio</fpage>
          .
          <year>2022</year>
          .
          <article-title>Do you need Babel for ES6? Retrieved from https://www.sidmartinbio.org/ do-you-need-babel-for-</article-title>
          <source>es6/ on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <source>[10] 9 Nodejs</source>
          .
          <year>2022</year>
          . Nodejs/Node Pulse. Retrieved from https://github.com/nodejs/node/pulse
          <source>on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <fpage>10Node</fpage>
          .
          <year>2022</year>
          .
          <article-title>Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine</article-title>
          .
          <article-title>Download for Windows (X64). Retrieved from https://nodejs</article-title>
          .org/en/ on July 30th,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>TensorFlow</surname>
          </string-name>
          .
          <year>2022</year>
          .
          <article-title>Text generation with an RNN. Retrieved from https://www</article-title>
          .tensorflow.org/ text/tutorials/text_generation
          <source>on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <fpage>12Wikipedia</fpage>
          .
          <year>2022</year>
          .
          <article-title>Amazon river dolphin</article-title>
          . Retrieved from https://en.wikipedia.org/wiki/ Amazon_river_dolphin
          <source>on July 30th</source>
          ,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <fpage>13Pypi</fpage>
          .
          <year>2022</year>
          .
          <source>Bodo</source>
          <year>2022</year>
          .
          <article-title>6 Project Description</article-title>
          . Retrieved from https://pypi.org/project/bodo/ on July 30th,
          <year>2022</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <source>[15] 14Research and Markets</source>
          .
          <year>2022</year>
          .
          <article-title>Cloud Computing Market Size, Share &amp; Trends Analysis Report by Service (SaaS, IaaS), by Enterprise Size (Large Enterprises, SMEs), by End Use (BFSI,</article-title>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>