Мой скрипт для очистки системы Linux Ubuntu 16.04

Привет всем, в этой супер короткой, но очень полезной заметке я расскажу, как чищу свою Ubuntu от лишних пакетов, устаревших зависимостей и прочего мусора, который появляется после установки и удаления пакетов.

На Windows для этой задачи пришлось бы установить какой нибудь CCleaner, или ему подобную программу. Кроме того, винда засоряется во много раз быстрее, реестр можно чистить хоть каждый день. Утром проснулся и пошел чистить. А программу очистки системы Linux можно заменить всего тремя командами в консоли. Для простоты и удобства я объединил их в один bash-скрипт, который запускаю раз в две-три недели и живу спокойно.

Создаем новый документ и пишем туда три волшебные команды.

#!/bin/bash

sudo apt-get install -f
sudo apt-get autoclean
sudo apt-get autoremove

Они почистят нам все оборванные зависимости и очистят кеш.

Делаем его исполняемым следующей командой

chmod +x fileName

Где «fileName» соответственно имя файла со скриптом.

Повторюсь, при запуске в системе починятся все поломанные пакеты, почиститься кеш и удалятся ненужные пакеты из устаревших зависимостей. Все быстро, просто и эффективно. Спасибо за внимание!

Реализация загрузчика PE файлов в Windows

Продолжается погружение в запутанный мир системного программирования. Это вторая вторая часть и сегодня мы реализуем загрузчик исполняемых файлов Windows в точности по этому алгоритму.

Так как я сам являюсь гордым пользователем Linux Ubuntu, вся работа выполнена с помощью виртуальной машины. И вообще говоря, если вы занимаетесь системным программированием или разработкой драйверов, никогда не тестируйте свой код на реальной машине. Думаю тут без комментариев все понятно. Итак, виртуальная машина с win, язык низкого уровня и полный запас энтузиазма, поехали.

Система: Windows XP SP2
Язык программирования: C

читать далее «Реализация загрузчика PE файлов в Windows»

Реализация топологической сортировки и поиск компонент сильной связности графа

Приветствую вас, друзья мои. В прошлых статьях я поделился своей реализацией поиска в ширину и поиска в длину на графе. Рассмотрел задачи, решаемые с помощью поиска в ширину. Теперь пришло время реализовать две задачи на поиск в глубину: топологическая сортировка и поиск компонент сильной связности. Реализовывать будем по прежнему на C++.

Топологическая сортировка

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

Реализация топологической сортировки на c++ с использованием стека

читать далее «Реализация топологической сортировки и поиск компонент сильной связности графа»

Реализация алгоритма поиска в глубину на графе

Краткое описание алгоритма поиска в глубину

Алгоритм, как и при поиске в ширину, ищет кратчайший путь от заданной вершины до всех остальных. При этом обход осуществляется «в глубину» графа, то есть мы прыгаем на потомка, потом на следующего и так далее, пока есть куда углубляться. Как только достигнут «конец» возвращаемся на один уровень и опять углубляемся. Другими словами, мы не задерживаемся на одном уровне, а перемещаемся вверх и вниз.

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

Моя реализация поиска в глубину на c++

читать далее «Реализация алгоритма поиска в глубину на графе»

Реализация алгоритма поиска в ширину на графе

Краткое описание алгоритма поиска в ширину

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

Моя реализация поиска в ширину на c++

Граф представлен следующим образом. Массив(vector c++) из n элементов, где n — число вершин в графе. Каждый элемент массива соответствует вершине графа и содержит вложенный массив — список вершин, смежных с данной.


typedef vector< vector<int> > graphNotWeighted;

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

Исходный код алгоритма поиска в ширину на c++

читать далее «Реализация алгоритма поиска в ширину на графе»