=Paper= {{Paper |id=Vol-2203/161 |storemode=property |title=Framework for Distributed Computing on the Web |pdfUrl=https://ceur-ws.org/Vol-2203/161.pdf |volume=Vol-2203 |authors=Jakub Siller,Jaroslav Kuchar |dblpUrl=https://dblp.org/rec/conf/itat/SillerK18 }} ==Framework for Distributed Computing on the Web== https://ceur-ws.org/Vol-2203/161.pdf
S. Krajči (ed.): ITAT 2018 Proceedings, pp. 161–167
CEUR Workshop Proceedings Vol. 2203, ISSN 1613-0073, c 2018 Jakub Šiller and Jaroslav Kuchař



                           Framework for Distributed Computing on the Web

                                                   Jakub Šiller and Jaroslav Kuchař

                                  Web Intelligence Research Group, Faculty of Information Technology
                                Czech Technical University, Thákurova 9, 160 00, Prague 6, Czech Republic
                                            {sillejak|jaroslav.kuchar}@fit.cvut.cz

     Abstract: This work is a brief summary of a master the-           were focused on various types of computing tasks. For
     sis that focuses on design and implementation of a frame-         instance projects [6], [7], [8] and [9] were using web
     work that uses computers of website visitors as comput-           browsers for simulated evolution. Work [10] was focused
     ing nodes through web browsers. It contains an analysis           on image processing. Machine learning in web browsers
     of the Web environment, summarization of previous ap-             was the topic of [11]. Authors of [12] created web search
     proaches and projects, design and implementation of the           engine using web browsers. In [13] and [14] map reduce
     framework. The work describes the solution of computing           frameworks were presented. There were also works that
     node failure, reaction to slow computing node, possibili-         were focused on creating general framework: [15], [16],
     ties of controlling the load of the framework on a website        [17]. Architecture of most of presented works was client-
     visitor’s computer, strategies for work distribution and se-      server.
     curity of the framework. At the end of the work, the ex-             Developers of commercial project Computes are trying
     periment results and proposal of improvements are listed.         to create distributed decentralized supercomputer from all
                                                                       kind of devices.
                                                                          There are also several commercial tools for mining alt-
     1    Introduction                                                 coins.
                                                                          Published works are usually just proof of concept and
     Nowadays, web technologies and web services are an in-
                                                                       authors don’t deal with every aspect of systems. For in-
     separable part of human life. We are using web browser
                                                                       stance security is often omitted. The main contribution of
     for communication, entertainment, shopping and a many
                                                                       this work is to create complex framework that could be
     other activities. A lot of web users have powerful de-
                                                                       deployed.
     vices 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          3 Analysis
     computing power.
        In section 2 there is a summarization of previous works        The web has several major characteristics. One of them is
     and current project in the field of distributed computation       diversity. Web users are using various browsers of various
     in web browsers. Analysis of web environment and frame-           versions. Each user has different device, different connec-
     work requirements are content of section 3. Section 4 is          tion speed etc.
     focused on design of the framework. Finally, experiment              Another strong aspect of the Web is dynamics. Web
     results are presented in section 5.                               technologies are still evolving and continuously new tech-
                                                                       nologies are emerging. Also web browsing is very dy-
                                                                       namic. According to [18] users often stay on a page just
     2    Related works                                                for 10-20 seconds.
     Utilizing idle power via the Internet to create distributed          The Web is free and open. Everyone can join and pub-
     computer is not a new idea. According to [1] the first            lish and consume data.
     project about this topic was Great Internet Mersenne                 And the last but not least aspect is its’ enormous size.
     Prime Search [2] that started in 1996. A few years later          [19] and [20] states that the Web has more than 3.7 billions
     projects SETI@Home [3] that was focused on the Search             users and this number is getting bigger every year.
     for Extraterrestrial Intelligence and Folding@home [4]
     that was using computers of volunteers for medical re-              These aspects of the Web have impact on the frame-
     search was launched. After that BOINC (Berkeley Open              work requirements. Dynamic browsing will cause fre-
     Infrastructure for Network Computing) [5] was created. It         quent computing node failures. The framework have to be
     is probably the biggest and the best known platform for           able to detect failure and solve the situation. The frame-
     volunteer computing. All of mentioned projects are still          work also should be able to work with computing nodes
     alive. In order to join a computation in these projects a         of different performance. Security mechanisms should be
     volunteer have to install some additional software.               involved on server side and on client side as well. Frame-
        Since 2007 several works related to utilizing computa-         work also have to ensure correctness and reliability of
     tion power using web browser have been published. They            tasks results.
162                                                                                                         Jakub Šiller and Jaroslav Kuchař

      4     Design                                                      The framework utilizes replication and majority voting in
                                                                       order to ensure correctness and reliability of works results.
      4.1   Computational model                                        User can for each task specify the replication factor. In
      The framework is focused on types of tasks in which server       each work object server holds information that indicates
      sends work to client, client processes the work and sends        to how many more clients the work should be distributed
      the result back to the server. There is no communication         in order to reach the replication factor. This information is
      between clients and no communication between client and          in attribute remaining.
      server regarding the computation but distributing works
      and receiving results. Framework user can define divid-            In order to compute a task a user sends data and id of
      ing and merging functions. In case that a task has too big       task prototype to the server. Server insert the task to the
      data the framework will use dividing function in order to        task queue. The server holds collection of works that are
      automatically recursively divide the data and create partial     currently being distributed to clients. If there is enough
      subtasks called works. Works are then distributed to the         place for more works server prepare another task from
      client. Results of works from clients are then merged by         the queue for distribution. Preparation of a task for dis-
      framework using merging function. Described model is             tribution consists mainly of dividing task’s data. When a
      shown in figure 1.                                               client sends work request the server response with several
         In order to compute a tasks there will be a lot of mes-       works. Works that are returned to the client have attribute
      sages between clients and the server. Speed of commu-            remaining greater then zero. After assigning a work to a
      nication depends on connection quality. It might be time         client the attribute is decremented. Number of works that
      consuming. Therefore, the framework is more suitable for         are returned to the client depends on strategy that is used.
      computing intensive tasks rather than data intensive tasks.      Strategies implemented in the framework are described in
                                                                       following section. When a client receives works it starts to
      4.2   Users                                                      process them. The client doesn’t wait until all works are
      Users of the framework are divided into two groups. Users        done but each result is sent back to the server as soon as it
      from the first group are creators of task prototypes. A task     is available. This is shown in figure 3.
      prototype consists of definition of code that should be ex-         When the server received results from all works it merge
      ecuted in client and optional dividing and merging func-         them to the result of the task. The task’s result is stored in
      tion. This group of users should know the framework -            database. When the user send request for the result to the
      its’ advantages, disadvantages and some technical details        server it responds with the result from the database.
      in order to create effective code for the framework.                When a client processes all assigned works it sends new
         The second group are common users. They use frame-            work request to the server.
      work for computations. They don’t need to know anything
      about the framework but the id of task prototype they want       Strategies for work distribution There are several strate-
      to use.                                                          gies in the framework for determining number of works
         This division has several reasons. The first of them is       that should be returned to a client.
      security. We can assume that number of task prototypes              The most easy one is a strategy that returns fixed num-
      creators will be much smaller than number of other users.        ber of works.
      Therefore it might be relatively easy to make sure that cre-        Another strategy is based on fixed sum of works sizes.
      ators of task prototypes are trustworthy. And then we can        The framework uses statistics to estimate maximum num-
      assume that their code is probably trustworthy as well. An-      ber of works so that sum of their sizes is less then config-
      other reason for the division is quality of code. If there are   ured threshold.
      users who are focusing on creating code for the frame-              The most complex strategy uses time elapsed from start
      work there is high probability that the code will be effi-       of a client session. According to [18] a distribution of ses-
      cient, without bugs and there will be no task prototypes         sion duration follows Weibull distribution with negative
      for tasks that are not suitable for the framework. More-         aging. That means that at the begging of a web page visit
      over common users don’t need to know anything about the          the probability that user will leave the page is very high
      framework.                                                       and it decrease over time. Therefore this strategy increase
                                                                       number of works that are sent to the client accordingly to
      4.3   Framework in a nutshell                                    the session duration.
      Basic architecture of the framework is client-server. The
      server consists of two main parts - ProgrammerServer             Modes of work distribution Work distribution can run
      and VolunteerServer. ProgrammerServer is responsible             in two modes. In the first mode data with full work code
      for communication with users of the framework. Volun-            are sent to the client. In the second mode data along code
      teerServer is the main part of the framework. It is respon-      identifier are sent. In this mode client have to make an-
      sible for communication with clients, processing tasks,          other request to the server in order to get the code. How-
      distributing works to clients and processing results.            ever, in this mode it is possible to cache the code in the
Framework for Distributed Computing on the Web                                                                                    163




                                                                                (b) Receiving and merging phase
                    (a) Dividing and distributing phase

                                Figure 1: Visual example of the computation model of the framework


                                                                   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 per-
                                                                   forming tasks of a single or a few task prototypes. In other
                                                                   cases it might be inefficient because of more requests.


                                                                   4.4 Computing node failure

                                                                   In order to detect computing node failure the framework
                                                                   holds in each session object time of last access. It is up-
                                                                   dated with each request from the session. During compu-
                                                                   tation 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.
            Figure 2: Base architecture of the framework.             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 con-
                                                                   figured threshold. When a session die the framework in-
                                                                   crements attribute remaining of all unprocessed works that
                                                                   were assigned to the session. So the work will be assigned
                                                                   again to some session.


                                                                   4.5 Slow computing node

                                                                   Because of different performance of web user devices, dif-
                                                                   ferent connection speed and different utilization of the de-
                                                                   vice 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
     Figure 3: Simplified process of distributing works to the
                                                                   the work again to another client.
     client and subsequent sending results back to the server.
                                                                      The framework’s module LongRunningSessionCollec-
     During computation of a work heartbeats are sent to the
                                                                   tor periodically checks whether there is a slow client for
     server.
                                                                   some work. A client is considered too slow for a work if
164                                                                                                        Jakub Šiller and Jaroslav Kuchař

      the time elapsed since the work was assigned to the client       4.8 Security
      is several times longer than average time of computation
      of the work on other clients. If a client is marked as slow      The framework contains several security mechanisms. The
      for a work the framework increment attribute remaining of        server accepts user request only with valid API keys. List
      the work.                                                        of API keys is in configuration of the framework. If a re-
                                                                       quest doesn’t contain valid API key the server responds
                                                                       with HTTP code 403 forbidden.
      4.6 Client side                                                     The framework executes user code on server-side and
                                                                       also on client-side. The framework must ensure that the
      At client side the framework is using Web Worker technol-        code will cause no harm to server or client’s device. There-
      ogy [21]. A web browser create new thread for each Web           fore, user code is executed in a sandbox. At the server-side
      Worker object. Therefore experience of browsing a web            VM2 module [25] is used. At the client-side a sandbox is
      page should not be affected by the framework. The frame-         implemented as a white-list of allowed function and ob-
      work creates several Web Worker objects in which works           jects. Every other function or object is disallowed.
      are processed. When a client receive works it put them in           Communication between a client and the server is en-
      a queue. The Web Worker objects are taking objects from          crypted. This decrease probability that content of mes-
      the queue and processing them. As soon as a Web Worker           sages is changed by malicious third-party.
      object computes a work the result is sent to the server. This       As was mentioned earlier in order to ensure correctness
      is shown in figure 4.                                            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%.
                                                                          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 comput-
                                                                       ing on encrypted data. There are mathematical models that
                                                                       enables it. Some of them are described in [26]. There is
                                                                       no need to change the framework in order to compute on
                                                                       encrypted data - it is responsibility of task prototypes im-
                                                                       plementation. Computing on encrypted data can also en-
                                                                       sure 100% probability that result is correct excluding bugs
      Figure 4: Illustration of processing works assigned to a
                                                                       in the task prototype.
      client on multiple Web Worker objects

         For computation of a work the framework is able to            5 Experiments
      use new client-side web technologies asm.js [22] and We-
      bAsembly [23] instead of JavaScript [24]. The creator of
                                                                       Experiments were performed on 60 computers in class-
      task prototype can implement working function in C++
                                                                       rooms at FIT CTU. Configuration of computers is in table
      which is then at the server compiled into asm.js and We-
                                                                       1. Test task was naive algorithm for computing determi-
      bAssembly modules.
                                                                       nant 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.
      4.7   Controlling of client utilization
                                                                        Classroom      CPU Model                       size of RAM
      There are two ways how the framework is able to control
                                                                                       Intel® Core™ i5-6500
      stressing of client’s device. The first one is controlling the      T9-350                                          16 GB
                                                                                       CPU @ 3.20GHz
      number of Web Workers that are used. The second option
                                                                                       Intel® Core™ i5-3470
      is throttling. JavaScript code can not control stressing of         T9-351                                           8 GB
                                                                                       CPU @ 3.20GHz
      CPU at particular time but it is possible to control stressing
                                                                                       Intel® Core™ i5-3470
      from long-term view. For instance if x seconds is processor         T9-303                                           8 GB
                                                                                       CPU @ 3.20GHz
      fully stressed by the framework and then x seconds is idle
      we can say that the framework stressed CPU by 50% dur-                           Intel® Core™ i5-4570S
                                                                          T9-349                                           8 GB
      ing 2x seconds. The configuration attribute throttleFactor                       CPU @ 2.90GHz
      holds information how many times the duration of the last                        Intel® Core™i5-2410M
                                                                           server                                          6 GB
      computation the server has to wait before it could again as-                     CPU @ 2.30GHz
      sign a work to a client. In other words it is inverted value
      to the desired CPU usage.                                                Table 1: Configuration of test computers
Framework for Distributed Computing on the Web                                                                                    165

         Tests were performed in the mode in which just iden-
     tifier 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.

                        Parameter          Value
                     deadSessionCollector:
                          interval         2 sec
                         deadTime          10 sec                 Figure 6: Influence of number of clients to average number
                     LongRunningSessionCollector:                 of sessions to which one work was assigned
                          interval         5 sec
                           factor            5
                     Other framework settings:
                       throttleFactor        0
                     heartBeatInterval     5 sec
                     test environment settings:
                       maxDuration          960 sec

           Table 2: Test setting of mentioned parameters

        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
                                                                  Figure 7: Statistics of a computation time of one matrix at
     can see that with increasing number of clients computa-
                                                                  client-side. For each number of client on axis X mean and
     tion time is decreasing. During tests in classrooms T9-
                                                                  mean ± standard deviation of computation time at client-
     350, T9-351 and T9-303 speeding up stops around number
                                                                  side is shown
     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    implemented in C++ using OpenMP [27] in order to uti-
     assign one work to more clients that was necessary. This     lize all CPU cores of a computer. Local computation was
     is shown in figure 6. Also there was a mistake in the con-   executed on the server’s computer. In figure 8 we can see
     figuration. Interval of sending heartbeat was equal to the   that for small matrices the local computation was more ef-
     time after which a session was considered as dead. After     ficient but for big matrices it was more efficient to use the
     some changes in configuration the computation becomes        framework.
     again a little bit faster.




                                                                  Figure 8: Influence of matrix size to computation time
     Figure 5: Influence of number of clients to computation      from user point of view.
     time from user point of view.
                                                                    The third experiment tests influence of throttleFactor on
        The second experiment tests how size of a matrix would    the computation time from user point of view. In figure
     affect computation time from user point of view. It also     9 we can see that there is linear dependency. This test
     compares computation time of the task using framework        prove that influence of throttleFactor is expected and pre-
     and computation time using local computation that was        dictable.
166                                                                                                        Jakub Šiller and Jaroslav Kuchař

                                                                    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.
                                                                       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   Conclusion
      Figure 9: Influence of attribute throttleFactor to computa-   In this work a framework for distributed computation us-
      tion time from user point of view.                            ing web browsers is presented. It contains mechanisms
                                                                    that solve computing node failure and reaction to a slow
                                                                    computing node. It describes strategies for distributing
         The last experiments tests how computation time from       works within clients and modes in which the distribution
      user point of view is changing when maximal session du-       can be done. The work deals with controlling of client’s
      ration is changing. In figure 10 we can see that with in-     device stressing. Security mechanisms are described as
      creasing session duration computation time is decreasing      well. Experiment results that are presented have shown
      as it was expected.                                           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.


                                                                    Acknowledgments
                                                                    This research was supported by Faculty of Informatics,
                                                                    Czech Technical University in Prague.


                                                                    References
                                                                     [1] Miller, D. M.: The Online Community Grid Volunteer
      Figure 10: Influence of maximal session duration (at-              Grid Computing with the Web Browser. Georgia Institute
      tribute maxDuration of test environment) to computation            of Technology, 2008. Available on: https://smartech.
      time from user point of view.                                      gatech.edu/handle/1853/33477
                                                                     [2] Mersenne Research, Inc.: Great Internet Mersenne Prime
                                                                         Search. [cit. 30.4.2018]. Available on: https://www.
                                                                         mersenne.org
      6   Future work                                                [3] University of California : About SETI@home. [cit.
                                                                         30.4.2018]. Available on:         https://setiathome.
                                                                         berkeley.edu/sah_about.php
      Experiments have shown that framework is useful and it
      may be deployed. However there are still some limits and       [4] Pande Lab: Folding@home. [cit. 30.4.2018]. Available on:
                                                                         http://folding.stanford.edu
      drawbacks of the implementation that should be solved.
      For instance database queries can be optimized or new          [5] Anderson, D. P.: BOINC: a system for public-resource
                                                                         computing and storage. In Fifth IEEE/ACM International
      strategies for distributing works can be implemented.
                                                                         Workshop on Grid Computing, Nov 2004, ISSN 1550-
         The framework can be also extended in several ways.             5510, s. 4–10, doi:10.1109/GRID.2004.14.
      For instance GUI and monitoring extension would be very
                                                                     [6] Merelo, J. J.; García, A. M.; Laredo, J. L. J.; aj.: Browser-
      practical. There might be client, user and web sites ad-           based Distributed Evolutionary Computation: Performance
      ministration. Extensions of the framework may lead to              and Scaling Behavior. In Proceedings of the 9th An-
      computing platform with market that would act similar as           nual Conference Companion on Genetic and Evolution-
      application markets.                                               ary Computation, GECCO ’07, New York, NY, USA:
                                                                         ACM, 2007, ISBN 978-1-59593-698-1, s. 2851–2858, doi:
                                                                         10.1145/1274000.1274083. Available on: http://doi.
      7   Motivation for joining computations                            acm.org/10.1145/1274000.1274083
                                                                     [7] Klein, J.; Spector, L.: Unwitting Distributed Genetic Pro-
      There can be several reasons for a web user to join the            gramming via Asynchronous JavaScript and XML. In Pro-
      framework but probably the most likely situation is this:          ceedings of the 9th Annual Conference on Genetic and
Framework for Distributed Computing on the Web                                                                                           167

          Evolutionary Computation, GECCO ’07, New York, NY,              [19] Liedke, L.:          100+ Internet Stats and Facts
          USA: ACM, 2007, ISBN 978-1-59593-697-4, s. 1628–                     for    2018.      [cit.   30.4.2018].  Available    on:
          1635, doi:10.1145/1276958.1277282. Available on: http:               https://www.websitehostingrating.com/
          //doi.acm.org/10.1145/1276958.1277282                                internet-statistics-facts-2018/
      [8] Merelo-Guervos, J. J.; Castillo, P. A.; Laredo, J. L. J.;       [20] Stevens, J.: Internet Stats & Facts for 2017. [cit.
          aj.: Asynchronous distributed genetic algorithms with                30.4.2018]. Available on: https://hostingfacts.com/
          Javascript and JSON. In 2008 IEEE Congress on Evolution-             internet-facts-stats-2016/
          ary Computation (IEEE World Congress on Computational           [21] Mozilla and individual contributors: MDN web docs:
          Intelligence), June 2008, ISSN 1089-778X, s. 1372–1379,              Using Web Workers. [cit. 30.4.2018]. Available on:
          doi:10.1109/CEC.2008.4630973.                                        https://developer.mozilla.org/en-US/docs/
      [9] Duda, J.; Dlubacz, W.:              Distributed Evolutionary         Web/API/Web_Workers_API/Using_web_workers
          Computing System Based on Web Browsers with                     [22] Herman, D.; Wagner, L.; Zakai, A.: asm.js: Working
          Javascript. In Proceedings of the 11th International                 Draft. [cit. 30.4.2018]. Available on: http://asmjs.
          Conference on Applied Parallel and Scientific Com-                   org/spec/latest/
          puting, PARA’12, Berlin, Heidelberg: Springer-Verlag,           [23] WebAssembly. [cit. 30.4.2018]. Available on: http://
          2013, ISBN 978-3-642-36802-8, s. 183–191, doi:10.1007/               webassembly.org/
          978-3-642-36803-5_13. Available on: http://dx.doi.
                                                                          [24] Mozilla and individual contributors: MDN web docs:
          org/10.1007/978-3-642-36803-5_13
                                                                               JavaScript reference. [cit. 30.4.2018]. Available on:
     [10] Zorrilla, M.; Martin, A.; Tamayo, I.; aj.: Web Browser-              https://developer.mozilla.org/en-US/docs/
          Based Social Distributed Computing Platform Applied                  Web/JavaScript/Reference
          to Image Analysis. In 2013 International Conference on
                                                                          [25] Šimek, P.: VM2. [cit. 30.4.2018]. Available on: https:
          Cloud and Green Computing, Sept 2013, s. 389–396, doi:
                                                                               //www.npmjs.com/package/vm2
          10.1109/CGC.2013.68.
                                                                          [26] Vaikuntanathan, V.: How to Compute on Encrypted Data.
     [11] Meeds, E.; Hendriks, R.; al Faraby, S.; aj.: ML-
                                                                               In Progress in Cryptology - INDOCRYPT 2012, editace
          itB: Machine Learning in the Browser. CoRR, ročník
                                                                               S. Galbraith; M. Nandi, Berlin, Heidelberg: Springer
          abs/1412.2432, 2014, 1412.2432. Available on: http:
                                                                               Berlin Heidelberg, 2012, ISBN 978-3-642-34931-7, s. 1–
          //arxiv.org/abs/1412.2432
                                                                               15.
     [12] Turek, W.; Nawarecki, E.; Dobrowolski, G.; aj.: WEB
                                                                          [27] OpenMP ARB: OpenMP. [cit. 30.4.2018]. Available on:
          PAGES CONTENT ANALYSIS USING BROWSER-
                                                                               http://www.openmp.org/
          BASED VOLUNTEER COMPUTING. Computer Science,
          ročník 14, č. 2, 2013: str. 215, ISSN 2300-7036. Available
          on: https://journals.agh.edu.pl/csci/article/
          view/278
     [13] Pan, Y.; White, J.; Sun, Y.; aj.: Gray Computing: An Anal-
          ysis of Computing with Background JavaScript Tasks. In
          2015 IEEE/ACM 37th IEEE International Conference on
          Software Engineering, ročník 1, May 2015, ISSN 0270-
          5257, s. 167–177, doi:10.1109/ICSE.2015.38.
     [14] Ryza, S.; Wall, T.: MRJS: A JavaScript MapRe-
          duce Framework for Web Browsers. 2010. Avail-
          able on: http://static.cs.brown.edu/courses/
          csci2950-u/f11/papers/mrjs.pdf
     [15] Cushing, R.; Putra, G. H. H.; Koulouzis, S.; aj.: Distributed
          Computing on an Ensemble of Browsers. IEEE Internet
          Computing, ročník 17, č. 5, Sept 2013: s. 54–61, ISSN
          1089-7801, doi:10.1109/MIC.2013.3.
     [16] Wilkinson, S. R.; Almeida, J. S.: QMachine: commod-
          ity supercomputing in web browsers. BMC Bioinformatics,
          ročník 15, č. 1, Jun 2014: str. 176, ISSN 1471-2105, doi:
          10.1186/1471-2105-15-176. Available on: https://doi.
          org/10.1186/1471-2105-15-176
     [17] Fabisiak, T.; Danilecki, A.: Browser-based Harness-
          ing of Voluntary Computational Power. ročník 42,
          03 2017. Available on: https://www.degruyter.
          com/downloadpdf/j/fcds.2017.42.issue-1/
          fcds-2017-0001/fcds-2017-0001.pdf
     [18] Nielsen, J.:          How Long Do Users Stay on
          Web      Pages?               [cit.  30.4.2018].   Available
          on:                https://www.nngroup.com/articles/
          how-long-do-users-stay-on-web-pages/