Домашние задания, выполненные на 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 functional standard library for Python.

Toolz A set of utility functions for iterators, functions, and dictionaries. See the PyToolz documentation at https://toolz.readthedocs.io LICENSE New

4.1k Jan 04, 2023
Nateve transpiler developed with python.

Adam Adam is a Nateve Programming Language transpiler developed using Python. Nateve Nateve is a new general domain programming language open source i

Nateve 7 Jan 15, 2022
Code for the manim-generated scenes used in 3blue1brown videos

This project contains the code used to generate the explanatory math videos found on 3Blue1Brown. This almost entirely consists of scenes generated us

Grant Sanderson 4.1k Jan 02, 2023
Fiber implements an proof-of-concept Python decorator that rewrites a function

Fiber implements an proof-of-concept Python decorator that rewrites a function so that it can be paused and resumed (by moving stack variables to a heap frame and adding if statements to simulate jum

Tyler Hou 225 Dec 13, 2022
Create or join a private chatroom without any third-party middlemen in less than 30 seconds, available through an AES encrypted password protected link.

PY-CHAT Create or join a private chatroom without any third-party middlemen in less than 30 seconds, available through an AES encrypted password prote

1 Nov 24, 2021
Team Curie is a group of people working together to achieve a common aim

Team Curie is a group of people working together to achieve a common aim. We are enthusiasts!.... We are setting the pace!.... We offer encouragement and motivation....And we believe TeamWork makes t

4 Aug 07, 2021
Credit Card Fraud Detection

Credit Card Fraud Detection For this project, I used the datasets from the kaggle competition called IEEE-CIS Fraud Detection. The competition aims to

RayWu 4 Jun 21, 2022
hey, this repo is the backend of the sociio project

sociio backend Hey, this repository is a part of sociio project , In this repo we are working to create an independent server for everything you can i

2 Jun 09, 2022
Paimon is a pixie (or script) who was made for anyone from {EPITECH} who are struggling with the Coding Style.

Paimon Paimon is a pixie (or script) who was made for anyone from {EPITECH} who are struggling with the Coding Style. Her goal is to assist you in you

Lyy 2 Oct 17, 2021
*考研学习利器,玩电脑控制不住自己时,可以使用该程序定日期锁屏,同时有精美壁纸锁屏显示,也不会枯燥。

LockscreenbyTime_win10 A python program in win10. You can set the time to lock the computer(by setting year, month, day), Fullscreen pictures will sho

PixianDouban 4 Jul 10, 2022
Python project setup, updater, and launcher

Launcher Python project setup, updater, and launcher Purpose: Increase project productivity and provide features easily. Once installed as a git submo

DAAV, LLC 1 Jan 07, 2022
Sodium is a general purpose programming language which is instruction-oriented (a new programming concept that we are developing and devising) [Still developing...]

Sodium Programming Language Sodium is a general purpose programming language which is instruction-oriented (a new programming concept that we are deve

Instruction Oriented Programming 22 Jan 11, 2022
Tips that improve your life in one way or another

Tips that improve your life in one way or another. This software downloads life tips from reddit.com/r/LifeProTips and tweet the most upvoted tips on Twitter.

Burak Tokman 2 Aug 04, 2022
Age of Empires II recorded game parsing and summarization in Python 3.

mgz Age of Empires II recorded game parsing and summarization in Python 3. Supported Versions Age of Kings (.mgl) The Conquerors (.mgx) Userpatch 1.4

148 Dec 11, 2022
Automatic certificate unpinning for Android apps

What is this? Script used to perform automatic certificate unpinning of an APK by adding a custom network security configuration that permits user-add

Antoine Neuenschwander 5 Jul 28, 2021
[arXiv 2020] Video Representation Learning with Visual Tempo Consistency

Video Representation Learning with Visual Tempo Consistency [Paper] [Project Page] News Full codebae is coming soon Pretained Models For now, we provi

DeciForce: Crossroads of Machine Perception and Autonomy 24 Nov 23, 2022
InverterApi - This project has been designed to take monitoring data from Voltronic, Axpert, Mppsolar PIP, Voltacon, Effekta

InverterApi - This project has been designed to take monitoring data from Voltronic, Axpert, Mppsolar PIP, Voltacon, Effekta

Josep Escobar 2 Sep 03, 2022
Module for working with the site dnevnik.ru with python

dnevnikru Module for working with the site dnevnik.ru with python Dnevnik object accepts login and password from the dnevnik.ru account Methods: homew

Aleksandr 21 Nov 21, 2022
A tool for fixing inconsistent timestamp metadata (atime, ctime, and mtime).

Mtime Fixer Mtime Fixer is a tool for fixing inconsistent timestamp metadata (atime, ctime, and mtime). Sometimes timestamp metadata of folders are in

Halit Şimşek 2 Jan 11, 2022
Python API for HotBits random data generator

HotBits Python API Python API for HotBits random data generator. Description This project is random data generator. It uses is HotBits API web service

Filip Š 2 Sep 11, 2020