Домашние задания, выполненные на 3ем семестре РТУ МИРЭА, по дисциплине

Overview

ДЗ по курсу "Конфигурационное управление" в РТУ МИРЭА

Описание

В данном репозитории находятся домашние задания, выполненные на 3ем семестре РТУ МИРЭА, по дисциплине "Конфигурационное управление".

Хочется выразить большую благодарность Петру Николаевич Советову @true-grue за лекции, практики и интересные задания!

Содержание

  1. Эмулятор консоли
  2. Визуализатор зависимостей пакета
  3. Выдуманный конфигурационный язык
  4. Мини-версия Make

Задания

1. Эмулятор консоли (ConsoleEmulator)

Эмулятор командной строки на языке Python с использованием библиотек zipfile (для работы с zip-архивом), sys (получение адреса архива из командой строки), os.path (работа с адресами), calendar (форматирование даты файла для вывода)

Для тестирования необходимо разместить main.py, archive.py в одном каталоге (для удобства тестируемый архив можно разместить в этом же каталоге, тогда вторым аргументом при запуске main.py передать только имя архива и тип) и запустить main.py

Эмулятор поддерживает команды cd, ls, ls -l, cat, pwd

Структура программы:

  • main.py — содержит функцию main, которая создает объект класса Archive и в бесконечном цикле передает ему аргументы командной строки, обрабатывая их и вызывая соответствующие методы объекта

  • archive.py — содержит описание класса Archive и несколько вспомогательных функций для работы

Демонстрация:

image

2. Визуализатор зависимостей пакета (DependencyGraph)

Визуализатор зависимостей пакетов pypi на языке Python. Возвращает граф в виде кода на языке Graphviz.

Программа состоит из функций:

  • main — начальная точка выполнения программы
  • getDeps — получение зависимостей с помощью запроса - скачивание whl-пакета актуальной версии указанной на pypi и чтении METADATA
  • formatDepsToNestedDicts — форматирование зависимостей и представление их в виде вложенных словарей
  • convertNestedDictsToLinks — конвертирование вложенных словарей в связи между пакетами, возврат строки связей В основе formatDepsToNestedDicts и convertNestedDictsToLinks рекурсивный обход в глубину

Дополнительно использовались библиотеки requests и sys — для отправки запросов и получения аргументов командой строки.

Демонстрация:

image

3. Выдуманный конфигурационный язык (ConfLang)

Синтаксис языка в форме Бэкуса — Наура:

program ::= { statements } object
statements ::= statement | statement statements |
statement ::= NAME ASSIGN value;

object ::= ( assign ) | ( assign, list_assign ) | ( )
list_assign ::= assign list_assign |

assign ::= NAME(list_value)
list_value ::= value list_value |
value ::= object | string | number | &NAME | for(b e s) | for(b e s PATTERN)

Файл моего конфигурационного языка состоит из двух частей:

  • Область объявления переменных;
  • Область описания объектов.

Область объявления переменных обозначается фигурными скобками и состоит из списка "утверждений".

Каждое утверждение отделяется точкой с запятой. Утверждение состоит из имени переменной, знака "равно" и списка значений, который данной переменной присваивается. Если список значений состоит из одного элемента, то это уже не список, а просто значение.

Значением может быть объект, строка, число, разыменованная с помощью & переменная, список полученный из одного из циклов for.

Строка и число это самые простые типы:

  • Строка — набор символов, заключенный в двойные кавычки
  • Число — число из множества натуральных.

Объект заключен в скобки и содержит список соответствий.

Соответствия состоят из имени и значения.

Чтобы извлечь значение объявленное в области переменных, нужно разыменовать переменную с помощью амперсанда &.

Циклы for используются главным образом для генерации массивов.

for(b e s) принимает 3 числа:

  • b — begin
  • e — end
  • s — step

Возвращает массив из чисел

for(b e s PATTERN) принимает также 3 числа и шаблон строковой переменной, внутри которой есть амперсанд &, на место этого амперсанда вставляются числа и из данного цикла for возвращается массив из строковых переменных.

Демонстрация

image

4. Мини-версия Make (MiniMake)

Проект разбит на 3 файла:

  • maker.py (главный файл, содержит вызовы функций из остальных файлов)
  • analyzer.py (анализатор содержимого makefile с помощью SLY, решена проблема с отступами)
  • top_sort.py (алгоритм топологической сортировки, получает граф зависимостей в виде словаря, возвращает массив узлов)

Для того, чтобы повторные задачи не выполнялись, используется хранение хэшей в файле memory.json.

Также программа может выводить зависимости задач в коде graphviz, данную функцию можно включить ключом -v

Демонстрация работы

Для демонстрации создал 4 файла: factorial.cpp, hello.cpp, main.cpp, functions.h

Написал соответствующий makefile с выводом в консоль с помощью еcho выполненной задачи:

all: hello

hello: main.o factorial.o hello.o
 g++ main.o factorial.o hello.o -o hello
 echo "Компоновка исполняемого файла"
 
main.o: main.cpp
 g++ -c main.cpp
 echo "Компиляция main.cpp"

factorial.o: factorial.cpp
 g++ -c factorial.cpp
 echo "Компиляция factorial.cpp"

hello.o: hello.cpp
 g++ -c hello.cpp
 echo "Компиляция hello.cpp"
  1. Команда и результат первого вызова.
"hello"; "hello" -> "main.o"; "hello" -> "factorial.o"; "hello" -> "hello.o"; "main.o" -> "main.cpp"; "factorial.o" -> "factorial.cpp"; "hello.o" -> "hello.cpp"; "Компиляция main.cpp" "Компиляция factorial.cpp" "Компиляция hello.cpp" "Компоновка исполняемого файла" Содержимое memory.json: { "hello.o": "e0f717132a90c2b86fc54cdadf85cd23", "main.cpp": "fd7833700807dac1ea9f357df37b39f3", "factorial.cpp": "7d4f51c6a8061dc5224a0424bde06c14", "hello.cpp": "4d1b492da8ddeff3755d9ad44b6c5f3b", "main.o": "028a389da0c91e444f1aeb004a12eecb", "factorial.o": "d761f9cfe52f2c4c78375414cb9e3f58" }">
Input:
maker.py -v makefile

Output:
"all" -> "hello";
"hello" -> "main.o";
"hello" -> "factorial.o";
"hello" -> "hello.o";
"main.o" -> "main.cpp";
"factorial.o" -> "factorial.cpp";
"hello.o" -> "hello.cpp";

"Компиляция main.cpp"
"Компиляция factorial.cpp"
"Компиляция hello.cpp"
"Компоновка исполняемого файла"

Содержимое memory.json:
{
  "hello.o": "e0f717132a90c2b86fc54cdadf85cd23",
  "main.cpp": "fd7833700807dac1ea9f357df37b39f3",
  "factorial.cpp": "7d4f51c6a8061dc5224a0424bde06c14",
  "hello.cpp": "4d1b492da8ddeff3755d9ad44b6c5f3b",
  "main.o": "028a389da0c91e444f1aeb004a12eecb",
  "factorial.o": "d761f9cfe52f2c4c78375414cb9e3f58"
}
  1. Повторный вызов без ключа.
Input:
maker.py makefile

Output:
"Компоновка исполняемого файла"

Содержимое memory.json:
{
  "hello.o": "e0f717132a90c2b86fc54cdadf85cd23",
  "main.cpp": "fd7833700807dac1ea9f357df37b39f3",
  "factorial.cpp": "7d4f51c6a8061dc5224a0424bde06c14",
  "hello.cpp": "4d1b492da8ddeff3755d9ad44b6c5f3b",
  "main.o": "028a389da0c91e444f1aeb004a12eecb",
  "factorial.o": "d761f9cfe52f2c4c78375414cb9e3f58"
}
  1. Повторный вызов после изменения файла hello.cpp.
Input:
maker.py makefile

Output:
"Компиляция hello.cpp"
"Компоновка исполняемого файла"

Содержимое memory.json:
{
  "hello.o": "e0f717132a90c2b86fc54cdadf85cd23",
  "main.cpp": "fd7833700807dac1ea9f357df37b39f3",
  "factorial.cpp": "7d4f51c6a8061dc5224a0424bde06c14",
  "hello.cpp": "e84d9058224c1f362554b5fd15c2b64b",
  "main.o": "028a389da0c91e444f1aeb004a12eecb",
  "factorial.o": "d761f9cfe52f2c4c78375414cb9e3f58"
}

Как видно при втором запуске изменилось хэш-значение только файла hello.cpp, хотя после отработки makefile изменится и файл hello.o.

Owner
Semyon Esaev
Semyon Esaev
Semyon Esaev
CMPE 204 Modelling Project

CISC/CMPE 204 Modelling Project Welcome to the major project for CISC/CMPE 204 (Fall 2021)! Change this README.md file to summarize your project (few

totallyrin 2 May 16, 2022
SimilarWeb for Team ACT v.0.0.1

SimilarWeb for Team ACT v.0.0.1 This module has been built to provide a better environment specifically for Similarweb in Team ACT. This module itself

Sunkyeong Lee 0 Dec 29, 2021
Automatic and platform-independent unpacker for Windows binaries based on emulation

_ _ __ _ __ _ | | | | / / (_) \ \ | | | | | |_ __ | | _ | | _ __ __ _ ___| | _____ _ __

514 Dec 21, 2022
Example applications, dashboards, scripts, notebooks, and other utilities built using Polygon.io

Polygon.io Examples Example applications, dashboards, scripts, notebooks, and other utilities built using Polygon.io. Examples Preview Name Type Langu

Tim Paine 4 Jun 01, 2022
Pengenalan para anggota KOMPETEGRAM

Pengenalan Anggota KOMPETEGRAM Apa isi repositori ini ? 💬 Repositori ini berisi pengenalan nama anggota KOMPETEGRAM dari seluruh angkatan atau Batch.

Repositori KOMPETEGRAM 7 Sep 17, 2022
A good Tool to comment on xmw

A good Tool to comment on xmw

1 Feb 10, 2022
An ultra fast cross-platform multiple screenshots module in pure Python using ctypes.

Python MSS from mss import mss # The simplest use, save a screen shot of the 1st monitor with mss() as sct: sct.shot() An ultra fast cross-platfo

Mickaël Schoentgen 799 Dec 30, 2022
This is a calculator of strike price distance for options.

Calculator-of-strike-price-distance-for-options This is a calculator of strike price distance for options. Options are a type of derivative. One strat

André Luís Lopes da Silva 4 Dec 30, 2022
This is a simple python script for checking A/L Examination results of srilankan students

AL-Result-Checker This is a simple python script for checking A/L Examination results of srilankan students INSTALLATION [Termux] [Linux] : apt-get up

Razor Kenway 8 Oct 24, 2022
pyRTOS is a real-time operating system (RTOS), written in Python.

pyRTOS Introduction pyRTOS is a real-time operating system (RTOS), written in Python. The primary goal of pyRTOS is to provide a pure Python RTOS that

Ben Williams 96 Dec 30, 2022
Project Interface For nextcord-ext

Project Interface For nextcord-ext

nextcord-ext 1 Nov 13, 2021
Chat meetup

FLiP-Meetup-Chat Chat meetup create function bin/pulsar-admin functions create --auto-ack true --jar pulsardjlexample-1.0.jar --classname "dev.pulsarf

Timothy Spann 1 Dec 09, 2021
Simple macOS StatusBar app to remind you to unplug your laptop when sufficiently charged

ChargeMon Simple macOS StatusBar app to monitor battery charge status and remind you to unplug your Mac when the battery is sufficiently charged Overv

Rhet Turnbull 5 Jan 25, 2022
Block the annoying Token Grabbers on your discord

General We have seen that in the last time many discord servers are infected by fake discord nitro links we want to put an end to this and have develo

BadTiger Network 2 Jul 16, 2022
Gerador de dafaces

🎴 DefaceGenerator Obs: esse script foi criado com a intenção de ajudar pessoas iniciantes no hacking que ainda não conseguem criar suas próprias defa

LordShinigami 3 Jan 09, 2022
Script that creates graphical representations of Julia an Mandelbrot sets.

Julia and Mandelbrot Picture Maker This simple functions create simple plots of the Julia and Mandelbrot sets. The Julia set require the important par

Juan Riera Gomez 1 Jan 10, 2022
Modelling and Implementation of Cable Driven Parallel Manipulator System with Tension Control

Cable Driven Parallel Robots (CDPR) is also known as Cable-Suspended Robots are the emerging and flexible end effector manipulation system. Cable-driven parallel robots (CDPRs) are categorized as a t

Siddharth U 0 Jul 19, 2022
Check broken access control exists in the Java web application

javaEeAccessControlCheck Check broken access control exists in the Java web application. 检查 Java Web 应用程序中是否存在访问控制绕过问题。 使用 python3 javaEeAccessControl

kw0ng 3 May 04, 2022
An useful scripts for Misskey

misskey-scripts This place storing useful scripts which made by me. icon-repair Repair broken remote user's icon.

CyberRex 5 Sep 09, 2022
Collection of Python scripts to perform Eikonal Tomography

Collection of Python scripts to perform Eikonal Tomography

Emanuel Kästle 10 Nov 04, 2022