Домашние задания, выполненные на 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
A simple program to run through inputs for a 3n+1 problem

Author Tyler Windemuth Collatz_Conjecture A simple program to run through inputs for a 3n+1 problem Purpose: doesn't really have a purpose, did this t

0 Apr 22, 2022
Terrible python code from the "bubble that breaks maths" video.

Terrible python code from the "bubble that breaks maths" video.

Stand-up Maths 12 Oct 25, 2022
Data repo for one-among.us

Our Data Data repo for one-among.us File Structure Directory /people/userid/: Data for a specific person info.json5: Profile information page.md: Pr

Hykilpikonna 55 Dec 30, 2022
Custom component to calculate estimated power consumption of lights and other appliances

Custom component to calculate estimated power consumption of lights and other appliances. Provides easy configuration to get virtual power consumption sensors in Home Assistant for all your devices w

Bram Gerritsen 552 Dec 28, 2022
Agora-token-helper - Some help tools for AgoraToken

Agora Token Helper Support AgoraToken version 001 - 006. But for security reason

Coderslab Workshop Projects

Workshop Coderslab workshop projects that include: Guessing Game Lotto simulator Guessing Game vol.2 Guessing Game vol.3 Dice 2001 Game Technologies P

Szymon Połczyński 1 Nov 06, 2021
Provides guideline on how to configure pre-commit hooks in your own python project

Pre-commit Configuration Guide The main aim of this repository is to act as a guide on how to configure the pre-commit hooks in your existing python p

Faraz Ahmed Khan 2 Mar 31, 2022
SHF TEST BACKEND

➰ SHF TEST BACKEND ➿ 🐙 Goals Dada una matriz de números enteros. Obtenga el elemento máximo en la matriz que produce la suma más pequeña al agregar t

Wilmer Rodríguez S 1 Dec 19, 2021
Customizable-menu-python - User customizable menu in Python

Menu personalizável pelo usuário em Python A minha ideia com esse projeto pessoa

Renan Barbosa 4 Oct 28, 2022
CEI Natural Disaster Tracking Portal

CEI Natural Disaster Tracking Portal (cc) Climatic Eye of ISCI We are an initiative that conducts studies in the field of Space Science, publishes pro

Baris Dincer 7 Dec 24, 2022
Hacktoberfest 2021 contribution repository✨

🎃 HacktoberFest-2021 🎃 Repository for Hacktoberfest Note: Although, We are actively focusing on Machine Learning, Data Science and Tricky Python pro

Manjunatha Sai Uppu 42 Dec 11, 2022
Flow control is the order in which statements or blocks of code are executed at runtime based on a condition. Learn Conditional statements, Iterative statements, and Transfer statements

03_Python_Flow_Control Introduction 👋 The control flow statements are an essential part of the Python programming language. A control flow statement

Milaan Parmar / Милан пармар / _米兰 帕尔马 209 Oct 31, 2022
A small Blender addon for changing an object's local orientation while in edit mode

A small Blender addon for changing an object's local orientation while in edit mode.

Jonathan Lampel 50 Jan 06, 2023
An event-based script that is designed to improve your aim

Aim-Trainer Info: This is an event-based script that is designed to improve a user's aim. It was built using Python Turtle and the Random library. Ins

Ethan Francolla 4 Feb 17, 2022
This script is written with Python for selling steam community items automatically.

SteamCommunityItemAutoSell Description This script is written with Python for selling steam community items automatically. Install git clone https://g

14 Oct 26, 2022
UUID_ApiGenerator - This an API that will return a key-value pair of randomly generated UUID

This an API that will return a key-value pair of randomly generated UUID. Key will be a timestamp and value will be UUID. While the

1 Jan 28, 2022
Developing and Comparing Vision-based Algorithms for Vision-based Agile Flight

DodgeDrone: Vision-based Agile Drone Flight (ICRA 2022 Competition) Would you like to push the boundaries of drone navigation? Then participate in the

Robotics and Perception Group 115 Dec 10, 2022
This is a Python program I wrote to simulate the solar system with 79 lines of code.

Solar System With Python This is a Python program I wrote to simulate the solar system with 79 lines of code. Required modules tkinter, math, time Why

Mehmet Aydoğmuş 1 Oct 26, 2021
Скрипт позволяет заводить задачи в Панель мониторинга YouTrack на основе парсинга сайта safe-surf.ru

Скрипт позволяет заводить задачи в Панель мониторинга YouTrack на основе парсинга сайта safe-surf.ru

Bad_karma 3 Feb 12, 2022
Procedural modeling of fruit and sandstorm in Blender (bpy).

SandFruit Procedural modelling of fruit and sandstorm. Created by Adriana Arcia and Maya Boateng. Last updated December 19, 2020 Goal & Inspiration Ou

Adriana Arcia 2 Mar 20, 2022