<!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>
      <issn pub-type="ppub">1613-0073</issn>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Framework for Distributed Computing on the Web</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Web Intelligence Research Group, Faculty of Information Technology Czech Technical University</institution>
          ,
          <addr-line>Thákurova 9, 160 00, Prague 6</addr-line>
          ,
          <country country="CZ">Czech Republic</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2018</year>
      </pub-date>
      <volume>2203</volume>
      <fpage>161</fpage>
      <lpage>167</lpage>
      <abstract>
        <p>This work is a brief summary of a master thesis that focuses on design and implementation of a framework that uses computers of website visitors as computing nodes through web browsers. It contains an analysis of the Web environment, summarization of previous approaches and projects, design and implementation of the framework. The work describes the solution of computing node failure, reaction to slow computing node, possibilities of controlling the load of the framework on a website visitor's computer, strategies for work distribution and security of the framework. At the end of the work, the experiment results and proposal of improvements are listed.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>Nowadays, web technologies and web services are an
inseparable part of human life. We are using web browser
for communication, entertainment, shopping and a many
other activities. A lot of web users have powerful
devices but they don’t use their full power often. Thus, in
the world, there is huge computing potential that is idle.
Framework presented in this work is able to utilize this
computing power.</p>
      <p>In section 2 there is a summarization of previous works
and current project in the field of distributed computation
in web browsers. Analysis of web environment and
framework requirements are content of section 3. Section 4 is
focused on design of the framework. Finally, experiment
results are presented in section 5.</p>
    </sec>
    <sec id="sec-2">
      <title>Related works</title>
      <p>
        Utilizing idle power via the Internet to create distributed
computer is not a new idea. According to [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] the first
project about this topic was Great Internet Mersenne
Prime Search [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] that started in 1996. A few years later
projects SETI@Home [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] that was focused on the Search
for Extraterrestrial Intelligence and Folding@home [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]
that was using computers of volunteers for medical
research was launched. After that BOINC (Berkeley Open
Infrastructure for Network Computing) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] was created. It
is probably the biggest and the best known platform for
volunteer computing. All of mentioned projects are still
alive. In order to join a computation in these projects a
volunteer have to install some additional software.
      </p>
      <p>
        Since 2007 several works related to utilizing
computation power using web browser have been published. They
were focused on various types of computing tasks. For
instance projects [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] and [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] were using web
browsers for simulated evolution. Work [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] was focused
on image processing. Machine learning in web browsers
was the topic of [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Authors of [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] created web search
engine using web browsers. In [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] and [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] map reduce
frameworks were presented. There were also works that
were focused on creating general framework: [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ],
[
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Architecture of most of presented works was
clientserver.
      </p>
      <p>Developers of commercial project Computes are trying
to create distributed decentralized supercomputer from all
kind of devices.</p>
      <p>There are also several commercial tools for mining
altcoins.</p>
      <p>Published works are usually just proof of concept and
authors don’t deal with every aspect of systems. For
instance security is often omitted. The main contribution of
this work is to create complex framework that could be
deployed.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Analysis</title>
      <p>The web has several major characteristics. One of them is
diversity. Web users are using various browsers of various
versions. Each user has different device, different
connection speed etc.</p>
      <p>
        Another strong aspect of the Web is dynamics. Web
technologies are still evolving and continuously new
technologies are emerging. Also web browsing is very
dynamic. According to [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] users often stay on a page just
for 10-20 seconds.
      </p>
      <p>The Web is free and open. Everyone can join and
publish and consume data.</p>
      <p>
        And the last but not least aspect is its’ enormous size.
[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] states that the Web has more than 3.7 billions
users and this number is getting bigger every year.
      </p>
      <p>These aspects of the Web have impact on the
framework requirements. Dynamic browsing will cause
frequent computing node failures. The framework have to be
able to detect failure and solve the situation. The
framework also should be able to work with computing nodes
of different performance. Security mechanisms should be
involved on server side and on client side as well.
Framework also have to ensure correctness and reliability of
tasks results.
4
4.1</p>
    </sec>
    <sec id="sec-4">
      <title>Design</title>
      <sec id="sec-4-1">
        <title>Computational model</title>
        <p>The framework is focused on types of tasks in which server
sends work to client, client processes the work and sends
the result back to the server. There is no communication
between clients and no communication between client and
server regarding the computation but distributing works
and receiving results. Framework user can define
dividing and merging functions. In case that a task has too big
data the framework will use dividing function in order to
automatically recursively divide the data and create partial
subtasks called works. Works are then distributed to the
client. Results of works from clients are then merged by
framework using merging function. Described model is
shown in figure 1.</p>
        <p>In order to compute a tasks there will be a lot of
messages between clients and the server. Speed of
communication depends on connection quality. It might be time
consuming. Therefore, the framework is more suitable for
computing intensive tasks rather than data intensive tasks.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Users</title>
        <p>Users of the framework are divided into two groups. Users
from the first group are creators of task prototypes. A task
prototype consists of definition of code that should be
executed in client and optional dividing and merging
function. This group of users should know the framework
its’ advantages, disadvantages and some technical details
in order to create effective code for the framework.</p>
        <p>The second group are common users. They use
framework for computations. They don’t need to know anything
about the framework but the id of task prototype they want
to use.</p>
        <p>This division has several reasons. The first of them is
security. We can assume that number of task prototypes
creators will be much smaller than number of other users.
Therefore it might be relatively easy to make sure that
creators of task prototypes are trustworthy. And then we can
assume that their code is probably trustworthy as well.
Another reason for the division is quality of code. If there are
users who are focusing on creating code for the
framework there is high probability that the code will be
efficient, without bugs and there will be no task prototypes
for tasks that are not suitable for the framework.
Moreover common users don’t need to know anything about the
framework.
4.3</p>
      </sec>
      <sec id="sec-4-3">
        <title>Framework in a nutshell</title>
        <p>Basic architecture of the framework is client-server. The
server consists of two main parts - ProgrammerServer
and VolunteerServer. ProgrammerServer is responsible
for communication with users of the framework.
VolunteerServer is the main part of the framework. It is
responsible for communication with clients, processing tasks,
distributing works to clients and processing results.
The framework utilizes replication and majority voting in
order to ensure correctness and reliability of works results.
User can for each task specify the replication factor. In
each work object server holds information that indicates
to how many more clients the work should be distributed
in order to reach the replication factor. This information is
in attribute remaining.</p>
        <p>In order to compute a task a user sends data and id of
task prototype to the server. Server insert the task to the
task queue. The server holds collection of works that are
currently being distributed to clients. If there is enough
place for more works server prepare another task from
the queue for distribution. Preparation of a task for
distribution consists mainly of dividing task’s data. When a
client sends work request the server response with several
works. Works that are returned to the client have attribute
remaining greater then zero. After assigning a work to a
client the attribute is decremented. Number of works that
are returned to the client depends on strategy that is used.
Strategies implemented in the framework are described in
following section. When a client receives works it starts to
process them. The client doesn’t wait until all works are
done but each result is sent back to the server as soon as it
is available. This is shown in figure 3.</p>
        <p>When the server received results from all works it merge
them to the result of the task. The task’s result is stored in
database. When the user send request for the result to the
server it responds with the result from the database.</p>
        <p>When a client processes all assigned works it sends new
work request to the server.</p>
      </sec>
      <sec id="sec-4-4">
        <title>Strategies for work distribution There are several strate</title>
        <p>gies in the framework for determining number of works
that should be returned to a client.</p>
        <p>The most easy one is a strategy that returns fixed
number of works.</p>
        <p>Another strategy is based on fixed sum of works sizes.
The framework uses statistics to estimate maximum
number of works so that sum of their sizes is less then
configured threshold.</p>
        <p>
          The most complex strategy uses time elapsed from start
of a client session. According to [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] a distribution of
session duration follows Weibull distribution with negative
aging. That means that at the begging of a web page visit
the probability that user will leave the page is very high
and it decrease over time. Therefore this strategy increase
number of works that are sent to the client accordingly to
the session duration.
        </p>
      </sec>
      <sec id="sec-4-5">
        <title>Modes of work distribution Work distribution can run</title>
        <p>in two modes. In the first mode data with full work code
are sent to the client. In the second mode data along code
identifier are sent. In this mode client have to make
another request to the server in order to get the code.
However, in this mode it is possible to cache the code in the
(b) Receiving and merging phase
browser and in intermediate network devices. Therefore
the amount of data on wires can be decreased. This mode
is efficient only if a client or a group of clients are
performing tasks of a single or a few task prototypes. In other
cases it might be inefficient because of more requests.
4.4</p>
      </sec>
      <sec id="sec-4-6">
        <title>Computing node failure</title>
        <p>In order to detect computing node failure the framework
holds in each session object time of last access. It is
updated with each request from the session. During
computation a client code running in a session periodically sends
empty request to the server - a heartbeat - so the server is
informed the session is still alive as is shown in figure 3.</p>
        <p>A server module DeadSessionCollector periodically
collects dead sessions. A session is considered to be dead
if time elapsed from the last access is higher than a
configured threshold. When a session die the framework
increments attribute remaining of all unprocessed works that
were assigned to the session. So the work will be assigned
again to some session.
4.5</p>
      </sec>
      <sec id="sec-4-7">
        <title>Slow computing node</title>
        <p>Because of different performance of web user devices,
different connection speed and different utilization of the
device by it’s user it may happen that computation of a work
would last on one client much longer than computation of
the same work on other client. Thus, when some client is
processing some work too long it may be efficient to assign
the work again to another client.</p>
        <p>The framework’s module
LongRunningSessionCollector periodically checks whether there is a slow client for
some work. A client is considered too slow for a work if
(a) Dividing and distributing phase
the time elapsed since the work was assigned to the client
is several times longer than average time of computation
of the work on other clients. If a client is marked as slow
for a work the framework increment attribute remaining of
the work.
4.6</p>
      </sec>
      <sec id="sec-4-8">
        <title>Client side</title>
        <p>
          At client side the framework is using Web Worker
technology [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. A web browser create new thread for each Web
Worker object. Therefore experience of browsing a web
page should not be affected by the framework. The
framework creates several Web Worker objects in which works
are processed. When a client receive works it put them in
a queue. The Web Worker objects are taking objects from
the queue and processing them. As soon as a Web Worker
object computes a work the result is sent to the server. This
is shown in figure 4.
        </p>
        <p>
          For computation of a work the framework is able to
use new client-side web technologies asm.js [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] and
WebAsembly [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] instead of JavaScript [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ]. The creator of
task prototype can implement working function in C++
which is then at the server compiled into asm.js and
WebAssembly modules.
4.7
        </p>
      </sec>
      <sec id="sec-4-9">
        <title>Controlling of client utilization</title>
        <p>There are two ways how the framework is able to control
stressing of client’s device. The first one is controlling the
number of Web Workers that are used. The second option
is throttling. JavaScript code can not control stressing of
CPU at particular time but it is possible to control stressing
from long-term view. For instance if x seconds is processor
fully stressed by the framework and then x seconds is idle
we can say that the framework stressed CPU by 50%
during 2x seconds. The configuration attributethrottleFactor
holds information how many times the duration of the last
computation the server has to wait before it could again
assign a work to a client. In other words it is inverted value
to the desired CPU usage.
4.8</p>
      </sec>
      <sec id="sec-4-10">
        <title>Security</title>
        <p>The framework contains several security mechanisms. The
server accepts user request only with valid API keys. List
of API keys is in configuration of the framework. If a
request doesn’t contain valid API key the server responds
with HTTP code 403 forbidden.</p>
        <p>
          The framework executes user code on server-side and
also on client-side. The framework must ensure that the
code will cause no harm to server or client’s device.
Therefore, user code is executed in a sandbox. At the server-side
VM2 module [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ] is used. At the client-side a sandbox is
implemented as a white-list of allowed function and
objects. Every other function or object is disallowed.
        </p>
        <p>Communication between a client and the server is
encrypted. This decrease probability that content of
messages is changed by malicious third-party.</p>
        <p>As was mentioned earlier in order to ensure correctness
an reliability of results majority voting is involved. A user
can specify replication factor but he or she should be aware
that probability that data are correct is never 100%.</p>
        <p>
          Securing data is complicated topic. The purpose of web
browsers is to serve data to its user so the framework can
not hide data from the user of the browser it is running in.
Therefore the only way how to secure the data is
computing on encrypted data. There are mathematical models that
enables it. Some of them are described in [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ]. There is
no need to change the framework in order to compute on
encrypted data - it is responsibility of task prototypes
implementation. Computing on encrypted data can also
ensure 100% probability that result is correct excluding bugs
in the task prototype.
5
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Experiments</title>
      <p>Experiments were performed on 60 computers in
classrooms at FIT CTU. Configuration of computers is in table
1. Test task was naive algorithm for computing
determinant of a matrix. Maximum size of a matrix that was sent
to clients was 11 × 11. If the matrix was bigger it was
recursively divided to matrices of size 11 × 11.</p>
      <sec id="sec-5-1">
        <title>Classroom</title>
        <p>T9-350
T9-351
T9-303
T9-349
server
size of RAM
16 GB</p>
        <p>Tests were performed in the mode in which just
identifier of a code is sent to the client. Replication factor
was set to 3. The framework was using all CPU cores
of the client devices. Test environment refreshed test web
page at a client after randomly chosen time from interval
[0, maxDuration] where maxDuration is parameter. Test
Settings of earlier mentioned parameters are in table 2.</p>
        <p>Parameter Value
deadSessionCollector:
interval 2 sec
deadTime 10 sec
LongRunningSessionCollector:
interval 5 sec
factor 5
Other framework settings:</p>
        <p>throttleFactor 0
heartBeatInterval 5 sec
test environment settings:</p>
        <p>maxDuration 960 sec</p>
        <p>
          The purpose of the first experiment was to test how
would change computation time of the task from user point
of view with increasing number of clients. In figure 5 we
can see that with increasing number of clients
computation time is decreasing. During tests in classrooms
T9350, T9-351 and T9-303 speeding up stops around number
30. That probably happened because computers in T9-350
were more powerful that others (shown in figure 7) so the
framework considered the others to be slow and started to
assign one work to more clients that was necessary. This
is shown in figure 6. Also there was a mistake in the
configuration. Interval of sending heartbeat was equal to the
time after which a session was considered as dead. After
some changes in configuration the computation becomes
again a little bit faster.
implemented in C++ using OpenMP [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ] in order to
utilize all CPU cores of a computer. Local computation was
executed on the server’s computer. In figure 8 we can see
that for small matrices the local computation was more
efficient but for big matrices it was more efficient to use the
framework.
        </p>
        <p>The second experiment tests how size of a matrix would
affect computation time from user point of view. It also
compares computation time of the task using framework
and computation time using local computation that was</p>
        <p>The third experiment tests influence of throttleFactor on
the computation time from user point of view. In figure
9 we can see that there is linear dependency. This test
prove that influence of throttleFactor is expected and
predictable.</p>
        <p>The last experiments tests how computation time from
user point of view is changing when maximal session
duration is changing. In figure 10 we can see that with
increasing session duration computation time is decreasing
as it was expected.
Experiments have shown that framework is useful and it
may be deployed. However there are still some limits and
drawbacks of the implementation that should be solved.
For instance database queries can be optimized or new
strategies for distributing works can be implemented.</p>
        <p>The framework can be also extended in several ways.
For instance GUI and monitoring extension would be very
practical. There might be client, user and web sites
administration. Extensions of the framework may lead to
computing platform with market that would act similar as
application markets.
7</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Motivation for joining computations</title>
      <p>There can be several reasons for a web user to join the
framework but probably the most likely situation is this:
A web page could profit from involving it’s visitors to the
framework. So the web page could offer a discount of their
services to visitors that allow joining to the framework.</p>
      <p>Another use case could be in a company that have a lot
of computers for it’s employees. In this case a proxy could
inject web pages with framework’s client-side code and so
create company’s big distributed computer with minimum
additional costs.
8</p>
    </sec>
    <sec id="sec-7">
      <title>Conclusion</title>
      <p>In this work a framework for distributed computation
using web browsers is presented. It contains mechanisms
that solve computing node failure and reaction to a slow
computing node. It describes strategies for distributing
works within clients and modes in which the distribution
can be done. The work deals with controlling of client’s
device stressing. Security mechanisms are described as
well. Experiment results that are presented have shown
that the framework is useful and deployable. The future
of the framework may be a computational platform with
market of task prototypes and computation power.</p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgments</title>
      <p>This research was supported by Faculty of Informatics,
Czech Technical University in Prague.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Miller</surname>
            ,
            <given-names>D. M.:</given-names>
          </string-name>
          <article-title>The Online Community Grid Volunteer Grid Computing with the Web Browser</article-title>
          . Georgia Institute of Technology,
          <year>2008</year>
          . Available on: https://smartech. gatech.edu/handle/1853/33477
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Mersenne</given-names>
            <surname>Research</surname>
          </string-name>
          , Inc.:
          <source>Great Internet Mersenne Prime Search. [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://www. mersenne.org
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3] University of California :
          <source>About SETI@home. [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://setiathome. berkeley.edu/sah_about.php
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Pande</given-names>
            <surname>Lab</surname>
          </string-name>
          : Folding@home.
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: http://folding.stanford.edu
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>D. P.:</given-names>
          </string-name>
          <article-title>BOINC: a system for public-resource computing and storage</article-title>
          . In Fifth IEEE/ACM International Workshop on Grid Computing,
          <year>Nov 2004</year>
          , ISSN 1550- 5510, s. 4-
          <fpage>10</fpage>
          , doi:10.1109/GRID.
          <year>2004</year>
          .
          <volume>14</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Merelo</surname>
            ,
            <given-names>J. J.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>García</surname>
            ,
            <given-names>A. M.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Laredo</surname>
            ,
            <given-names>J. L. J.</given-names>
          </string-name>
          <article-title>; aj.: Browserbased Distributed Evolutionary Computation: Performance and Scaling Behavior</article-title>
          .
          <source>In Proceedings of the 9th Annual Conference Companion on Genetic and Evolutionary Computation</source>
          , GECCO '
          <fpage>07</fpage>
          , New York, NY, USA: ACM,
          <year>2007</year>
          , ISBN 978-1-
          <fpage>59593</fpage>
          -698-1, s.
          <fpage>2851</fpage>
          -
          <lpage>2858</lpage>
          , doi: 10.1145/1274000.1274083. Available on: http://doi. acm.
          <source>org/10</source>
          .1145/1274000.1274083
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Klein</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Spector</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Unwitting Distributed Genetic Programming via Asynchronous JavaScript and XML</article-title>
          .
          <source>In Proceedings of the 9th Annual Conference on Genetic and Evolutionary Computation</source>
          , GECCO '
          <fpage>07</fpage>
          , New York, NY, USA: ACM,
          <year>2007</year>
          , ISBN 978-1-
          <fpage>59593</fpage>
          -697-4, s.
          <fpage>1628</fpage>
          -
          <lpage>1635</lpage>
          , doi:10.1145/1276958.1277282. Available on: http: //doi.acm.
          <source>org/10</source>
          .1145/1276958.1277282
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Merelo-Guervos</surname>
            ,
            <given-names>J. J.</given-names>
          </string-name>
          ; Castillo,
          <string-name>
            <given-names>P. A.</given-names>
            ;
            <surname>Laredo</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. L. J.</surname>
          </string-name>
          ; aj.:
          <article-title>Asynchronous distributed genetic algorithms with Javascript and JSON</article-title>
          .
          <source>In 2008 IEEE Congress on Evolutionary Computation (IEEE World Congress on Computational Intelligence)</source>
          ,
          <year>June 2008</year>
          , ISSN 1089-778X, s.
          <fpage>1372</fpage>
          -
          <lpage>1379</lpage>
          , doi:10.1109/CEC.
          <year>2008</year>
          .
          <volume>4630973</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Duda</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Dlubacz</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Distributed Evolutionary Computing System Based on Web Browsers with Javascript</article-title>
          .
          <source>In Proceedings of the 11th International Conference on Applied Parallel and Scientific Computing, PARA'12</source>
          , Berlin, Heidelberg: Springer-Verlag,
          <year>2013</year>
          , ISBN 978-3-
          <fpage>642</fpage>
          -36802-8, s.
          <fpage>183</fpage>
          -
          <lpage>191</lpage>
          , doi:10.1007/ 978-3-
          <fpage>642</fpage>
          -36803-5_
          <fpage>13</fpage>
          . Available on: http://dx.doi. org/10.1007/978-3-
          <fpage>642</fpage>
          -36803-5_
          <fpage>13</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Zorrilla</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Martin</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Tamayo</surname>
          </string-name>
          , I.; aj.:
          <article-title>Web BrowserBased Social Distributed Computing Platform Applied to Image Analysis</article-title>
          .
          <source>In 2013 International Conference on Cloud and Green Computing</source>
          ,
          <year>Sept 2013</year>
          , s.
          <fpage>389</fpage>
          -
          <lpage>396</lpage>
          , doi: 10.1109/CGC.
          <year>2013</year>
          .
          <volume>68</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Meeds</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Hendriks</surname>
          </string-name>
          , R.; al Faraby, S.; aj.:
          <source>MLitB: Machine Learning in the Browser. CoRR, rocˇník abs/1412.2432</source>
          ,
          <year>2014</year>
          ,
          <volume>1412</volume>
          .2432. Available on: http: //arxiv.org/abs/1412.2432
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Turek</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Nawarecki</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Dobrowolski</surname>
          </string-name>
          , G.;
          <article-title>aj.: WEB PAGES CONTENT ANALYSIS USING BROWSERBASED VOLUNTEER COMPUTING</article-title>
          . Computer Science, rocˇník
          <volume>14</volume>
          , cˇ. 2,
          <year>2013</year>
          : str. 215,
          <string-name>
            <surname>ISSN</surname>
          </string-name>
          2300-
          <fpage>7036</fpage>
          . Available on: https://journals.agh.edu.pl/csci/article/ view/278
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Pan</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>White</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ; Sun, Y.; aj.:
          <article-title>Gray Computing: An Analysis of Computing with Background JavaScript Tasks</article-title>
          .
          <source>In 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering, rocˇník 1</source>
          ,
          <string-name>
            <surname>May</surname>
            <given-names>2015</given-names>
          </string-name>
          , ISSN 0270- 5257, s.
          <fpage>167</fpage>
          -
          <lpage>177</lpage>
          , doi:10.1109/ICSE.
          <year>2015</year>
          .
          <volume>38</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Ryza</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ; Wall,
          <string-name>
            <surname>T.</surname>
          </string-name>
          :
          <article-title>MRJS: A JavaScript MapReduce Framework for Web Browsers</article-title>
          .
          <year>2010</year>
          . Available on: http://static.cs.brown.edu/courses/ csci2950-u/f11/papers/mrjs.pdf
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Cushing</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ; Putra,
          <string-name>
            <surname>G. H. H.</surname>
          </string-name>
          ; Koulouzis, S.; aj.:
          <article-title>Distributed Computing on an Ensemble of Browsers</article-title>
          .
          <source>IEEE Internet Computing, rocˇník 17, cˇ. 5</source>
          ,
          <string-name>
            <surname>Sept</surname>
            <given-names>2013</given-names>
          </string-name>
          <source>: s. 54-61</source>
          , ISSN 1089-7801, doi:10.1109/MIC.
          <year>2013</year>
          .
          <volume>3</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Wilkinson</surname>
            ,
            <given-names>S. R.</given-names>
          </string-name>
          ; Almeida,
          <string-name>
            <surname>J. S.:</surname>
          </string-name>
          <article-title>QMachine: commodity supercomputing in web browsers</article-title>
          .
          <source>BMC Bioinformatics</source>
          , rocˇník 15, cˇ. 1,
          <string-name>
            <surname>Jun</surname>
            <given-names>2014</given-names>
          </string-name>
          <source>: str. 176, ISSN 1471-2105</source>
          , doi: 10.1186/
          <fpage>1471</fpage>
          -2105-15-176. Available on: https://doi. org/10.1186/
          <fpage>1471</fpage>
          -2105-15-176
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Fabisiak</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Danilecki</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Browser-based Harnessing of Voluntary Computational Power</article-title>
          . rocˇník
          <volume>42</volume>
          ,
          <fpage>03</fpage>
          <lpage>2017</lpage>
          . Available on: https://www.degruyter. com/downloadpdf/j/fcds.
          <year>2017</year>
          .
          <volume>42</volume>
          .issue-1/ fcds-2017-0001/fcds-2017-0001.pdf
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Nielsen</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          :
          <source>How Long Do Users Stay on Web Pages? [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://www.nngroup.
          <article-title>com/articles/ how-long-do-users-stay-on-web-pages/</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Liedke</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <volume>100</volume>
          +
          <string-name>
            <given-names>Internet</given-names>
            <surname>Stats</surname>
          </string-name>
          and Facts for
          <year>2018</year>
          .
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://www.websitehostingrating.com/ internet-statistics-facts-2018/
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Stevens</surname>
            ,
            <given-names>J.: Internet</given-names>
          </string-name>
          <string-name>
            <surname>Stats</surname>
          </string-name>
          &amp; Facts for
          <year>2017</year>
          .
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://hostingfacts.com/ internet-facts-stats-2016/
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <article-title>Mozilla and individual contributors: MDN web docs: Using Web Workers</article-title>
          .
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://developer.mozilla.org/en-US/docs/ Web/API/Web_Workers_API/Using_web_workers
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <surname>Herman</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Wagner</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Zakai</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          .: asm.
          <source>js: Working Draft. [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: http://asmjs. org/spec/latest/
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          <source>[23] WebAssembly. [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: http:// webassembly.org/
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <article-title>Mozilla and individual contributors: MDN web docs: JavaScript reference</article-title>
          .
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <surname>Šimek</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <source>VM2. [cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: https: //www.npmjs.com/package/vm2
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <surname>Vaikuntanathan</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>How to Compute on Encrypted Data</article-title>
          .
          <source>In Progress in Cryptology - INDOCRYPT</source>
          <year>2012</year>
          , editace
          <string-name>
            <given-names>S.</given-names>
            <surname>Galbraith; M. Nandi</surname>
          </string-name>
          , Berlin, Heidelberg: Springer Berlin Heidelberg,
          <year>2012</year>
          , ISBN 978-3-
          <fpage>642</fpage>
          -34931-7, s. 1-
          <lpage>15</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <surname>OpenMP</surname>
            <given-names>ARB</given-names>
          </string-name>
          : OpenMP.
          <source>[cit. 30.4</source>
          .
          <year>2018</year>
          ]. Available on: http://www.openmp.org/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>