Скоро приближаются вторые оценки, и я не могу дождаться, чтобы показать своим наставникам, что их поразит! Как обычно, это была неделя, полная проблем: мне нужно не только беспокоиться о своей работе в GSoC, у меня есть школьные принадлежности, а также некоторые общественные работы, которые нужно делать.

Расписание - один из ключевых факторов при участии в Google Summer of Codes. Неправильное использование времени может быть фатальным и может принести вам отрицательную оценку во время оценки. Имея возможность справиться с этим благодаря моей компетенции, я работал над сценарием bash, который скоро появится в следующем посте.

Я также работал над тем, что я называю активизацией игры. Я называю это так, потому что на самом деле это заставило меня мыслить нестандартно и до сих пор было самой крутой частью моего проекта. Текущая процедура установки LibreHealth имеет ряд недостатков, связанных с моим заголовком проекта Улучшения установки для LibreEHR. Одна из задач, которые я выполнила, заключалась в том, чтобы показать страницу загрузки, пока сценарий установки обменивается данными с сервером. AJAX, который идеально подходил для этого, был как раз тем инструментом, который мне нужен.

AJAX позволяет обновлять веб-страницы асинхронно, негласно обмениваясь небольшими объемами данных с сервером. Это означает, что можно обновлять части веб-страницы без перезагрузки всей страницы. Классические веб-страницы (которые не используют AJAX) должны перезагружать всю страницу, если содержимое должно измениться. Вкратце, эта превосходная технология помогла мне эффективно взаимодействовать с сервером и получать обновления статуса на каждом этапе установки. Это во многом помогает, поскольку создает у конечного пользователя впечатление, что какие-то действия выполняются, а также возвращает сообщения об ошибках в случае, если любой. Демонстрация того, как я этого добился, так и есть.

Я создал 2 файла (database.php и ajaxprocess.php). Database.php - это сценарий, который взаимодействует с сервером (backend-код). Этот сценарий записывает в текстовый файл (ajaxprosess.txt) вывод на каждом этапе программы. Это каждая функция, которую он выполняет, например, подключение к базе данных, создание базы данных или клонирование и т. Д. Затем ajaxproccess.php отвечает за чтение файла в интервале 1000 мс (1 сек). Очевидно, вы заметили что databse.php записывает в этот файл часто, потому что он продолжает работать и обновляет найденные там данные. Фрагмент этого кода можно найти здесь. Полный код можно найти в моем PR здесь бесплатно. Не стесняйтесь оставлять свои комментарии.

setup.js

database.php

ajaxprocess.php

Призыв к проверке этого файла с интервалом в 1 с показан ниже.

// The function to refresh the progress bar.
function refreshAjaxProgress() {
    // We use Ajax again to check the progress by calling the ajaxprocess script.
    // Also pass the session id to read the file because the file which storing the progress is placed in a file per session.
    // If the call was success, display the progress bar.
    $.ajax({
        url: "ajaxprocess.php",
        success:function(data){
            console.log(data);
            if(data.status === 400){
                $("#libreehrProgress").attr({
                    "style" : "width:"+data.percentage+"%",
                    "aria-valuenow" : ""+data.percentage+""
                }).html(data.message).removeClass("progress-bar-success progress-bar-striped active").addClass("progress-bar-danger");
                $("#ajaxAlert").removeClass("hidden alert-success").addClass("alert-danger");
                $("#ajaxResponse").html(data.message);
                $(".ajaxLoader").addClass("hidden");
                window.clearInterval(timer);
                timer = window.setInterval(errorComplete(data.message), 1000);
            }
            else {
                $("#libreehrProgress").attr("style","width:"+data.percentage+"%").html(data.message).removeClass("progress-bar-danger").addClass("progress-bar-success progress-bar-striped active");
                $("#ajaxAlert").removeClass("hidden alert-danger").addClass("alert-success");
                $("#ajaxResponse").html(data.message);
                $(".ajaxLoader").addClass("hidden");
            }

            // // If the process is had errors, we should stop the checking process.


            // // If the process is completed, we should stop the checking process.
             if (data.percentage === 100 ) {
                window.clearInterval(timer);
                 timer = window.setInterval(completed, 1000);
             }
        }
    });
}

Это называется так

timer = window.setInterval(refreshAjaxProgress, 1000);

И по завершении он вызывает следующую функцию

// function to clear the timer if process has completed to a hundred percent
function completed() {
    $("#ajaxAlert").removeClass("hidden alert-danger").addClass("alert-success");
    $("#ajaxResponse").html("Completed");
    $("#submitStep4").removeAttr("disabled").css("cursor","pointer");
    $("#backStep4").removeAttr("disabled").removeClass("btnDisabled").css("cursor","pointer");

    window.clearInterval(timer);
}

Короче говоря, я добился того, что хотел, и теперь в хорошем темпе, чтобы закончить свой сценарий. Я бы не перестал благодарить Google, LibreHealth за предоставленную мне возможность продемонстрировать свои навыки. А также моим замечательным товарищам по команде Навину, Абхинаву Сингху, Апурву Чубей, Тигпезеге Родриджу и замечательным наставникам Прияншу, Тони Маккормик, Терри Хилл, с которым я всегда был на связи, чтобы исправить ошибки, общие для системы librehealth или до выполнения нашей задачи GSoC.

Вот демонстрация того, чего я добился.

Теперь я собираюсь написать сценарий bash, который автоматизирует установку различных зависимостей, следите за обновлениями;)