Скоро приближаются вторые оценки, и я не могу дождаться, чтобы показать своим наставникам, что их поразит! Как обычно, это была неделя, полная проблем: мне нужно не только беспокоиться о своей работе в 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, который автоматизирует установку различных зависимостей, следите за обновлениями;)