Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
“Рецепт Счастья” — увлекательная игра в жанре «соедини предметы»! Помогите Эмили раскрыть тайны пропавшего родственника, найти сокровища и восстановить её любимое кафе.

Рецепт Счастья

Казуальные, Головоломки, Новеллы

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

IT + Windows

С этим тегом используют

Программирование IT юмор Программист Юмор Работа Картинка с текстом Разработка Компьютер Компьютерная помощь Linux Microsoft Windows 10 Программа Все
656 постов сначала свежее
2
mcnikirikitiki
4 месяца назад
Новости

Компания «Яндекс» объявила о своем решении свернуть работу над технологией «Турбо»⁠⁠

Компания «Яндекс» объявила о своем решении свернуть работу над технологией «Турбо» IT, Яндекс, Новости, Программирование, Windows, Длиннопост

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

Что такое "Турбо"?

Начнем с того, что технология "Турбо" появилась в 2017 году. Она была создана для ускорения загрузки страниц в мобильных браузерах. Представь себе: ты находишься где-то в метро или на даче, интернет там тормозит, а тебе нужно быстро найти какую-то информацию. Вот тут-то и пригодились бы Турбо-страницы. Они работали так: "Яндекс" брал оригинальный сайт, вырезал из него все "тяжелые" элементы (например, огромные картинки, видео, сложные скрипты) и делал легкую версию страницы, которая грузилась намного быстрее. Особенно это было полезно для тех, у кого медленный мобильный интернет.

Кроме того, Турбо-страницы помогали владельцам сайтов. Например, если сайт был не очень хорошо оптимизирован для мобильных устройств, то через "Турбо" он мог показываться пользователям в более удобном формате. Это повышало шансы, что люди останутся на сайте и будут взаимодействовать с контентом.

Почему "Яндекс" решил отказаться от "Турбо"?

А теперь самое интересное — почему же они решили закрыть этот проект? Всё дело в том, что мир меняется. Если в 2017 году мобильный интернет был еще довольно медленным, особенно в регионах, то сейчас ситуация кардинально изменилась. Скорость мобильного интернета выросла в разы, и многие сайты уже научились адаптироваться под смартфоны. То есть, владельцы сайтов стали делать специальные мобильные версии своих ресурсов, которые грузятся быстро и выглядят красиво.

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

Что будет дальше?

"Яндекс" официально объявил, что поддержка "Турбо" прекратится в апреле 2025 года. Но не переживай — у владельцев сайтов есть два месяца, чтобы подготовиться. За это время они могут адаптировать свои сайты так, чтобы они нормально работали без Турбо-страниц. Компания заверила, что отключение технологии никак не повлияет на распределение трафика. То есть, если ваш сайт раньше получал много посетителей через Турбо-страницы, то после их отключения ничего страшного не произойдет.

Еще один важный момент: раздел "Турбо-страницы" в Вебмастере (это инструмент для владельцев сайтов) тоже будет закрыт. Но фиды (специальные файлы, которые передают информацию о страницах сайта) можно оставить как есть. Поисковый робот "Яндекса" продолжит их использовать, чтобы узнавать о новых страницах на сайте. Если вы хотите полностью прекратить отправку таких данных, то можете удалить фиды или ограничить доступ к ним через файл robots.txt.

Куда пойдут ресурсы команды "Турбо"?

В "Яндексе" отметили, что команда, которая занималась "Турбо", теперь сосредоточится на других проектах. Их усилия будут направлены на разработку новых решений для поддержки бизнеса и медиа в поиске. То есть, компания хочет сфокусироваться на более актуальных задачах, которые принесут больше пользы пользователям и владельцам сайтов.

Итог

В общем, это логичный шаг со стороны "Яндекса". Технология "Турбо" была полезной в свое время, но сейчас она уже не так востребована. Мобильный интернет стал быстрее, сайты — лучше, а приложения — удобнее. Поэтому "Яндекс" решил перенаправить свои силы на другие проекты, которые помогут развивать экосистему интернета дальше.

Если ты владелец сайта, который использовал Турбо-страницы, не паникуй! У тебя есть два месяца, чтобы подготовиться. А если ты обычный пользователь, то, скорее всего, ты даже не заметишь разницы — всё будет работать как прежде, только немного иначе "под капотом".

Источник: https://webmaster.yandex.ru/blog/yandex-stops-supporting-tur...

Показать полностью 1
[моё] IT Яндекс Новости Программирование Windows Длиннопост
10
3
mcnikirikitiki
4 месяца назад
Лига программистов

Основы программирования на C++: функции, шаблоны⁠⁠

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

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

Здравствуйте, мои маленькие любители программирования!

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

Основные концепции функций

  1. Что такое функция? Функция — это блок кода, который выполняет определенную задачу. Она может принимать входные данные (аргументы), обрабатывать их и возвращать результат. В языке C++ каждая программа начинается с выполнения функции main(), которая является точкой входа в программу.

    int main() {

    // Код программы

    return 0;

    }

    • int перед main() указывает, что функция возвращает целое число.

    • return 0; означает успешное завершение программы.

  2. Создание простой функции

    Рассмотрим пример функции, которая складывает два числа:

    int Sum(int a, int b) {

    return a + b;

    }

    • int перед именем функции указывает, что функция возвращает значение типа int.

    • Sum — это имя функции.

    • (int a, int b) — это параметры функции, то есть значения, которые передаются в функцию при её вызове.

    Пример использования функции Sum:

    int main() {

    int x = 17, y = 42;

    int z = Sum(x, y); // Вызов функции Sum

    std::cout << "Сумма: " << z << "\n"; // Выведет 59

    }

  3. Функции без возвращаемого значения

    Если функция не должна возвращать результат, её можно объявить как void. Это означает, что функция просто выполняет какие-то действия, но не возвращает никаких данных.

    void DoSomething(double d, char c) {

    std::cout << "Число: " << d << ", Символ: " << c << "\n";

    }

    Пример использования:

    int main() {

    DoSomething(3.14, '@'); // Выведет: Число: 3.14, Символ: @

    }

  4. Рекурсивные функции

    Рекурсия — это когда функция вызывает саму себя. Это полезно для решения задач, которые могут быть разделены на подзадачи того же типа. Например, вычисление факториала числа:

    #include <cstdint> // Для uint64_t

    std::uint64_t Factorial(std::uint64_t n) {

    if (n == 0) {

    return 1; // Базовый случай

    }

    return n * Factorial(n - 1); // Рекурсивный вызов

    }

    Пример использования:

    int main() {

    std::cout << "Факториал 5: " << Factorial(5) << "\n"; // Выведет 120

    }

    Важно: При использовании рекурсии нужно быть осторожным, чтобы не создать бесконечный цикл вызовов, что может привести к переполнению стека.


Аргументы функций

  1. Передача аргументов по значению

    По умолчанию аргументы передаются "по значению", то есть функция работает с копиями переменных. Любые изменения внутри функции не влияют на исходные переменные.

    void f(int x, int y) {

    x = 10; // Изменение x не повлияет на внешнюю переменную

    y = 20; // Изменение y не повлияет на внешнюю переменную

    }

    int main() {

    int a = 1, b = 2;

    f(a, b);

    std::cout << "a: " << a << ", b: " << b << "\n"; // Выведет: a: 1, b: 2

    }

  2. Передача аргументов по ссылке

    Чтобы изменять исходные переменные внутри функции, используются ссылки (&). Это позволяет функции работать с оригинальными переменными, а не с их копиями.

    void Swap(int& x, int& y) { // Передача по ссылке

    int temp = x;

    x = y;

    y = temp;

    }

    int main() {

    int a = 1, b = 2;

    Swap(a, b);

    std::cout << "a: " << a << ", b: " << b << "\n"; // Выведет: a: 2, b: 1

    }

  3. Константные ссылки

    Для сложных типов данных (например, векторов или строк) лучше передавать аргументы по константной ссылке (const &). Это позволяет избежать лишнего копирования данных и защищает их от случайного изменения внутри функции.

    void PrintVector(const std::vector<int>& vec) {

    for (int num : vec) {

    std::cout << num << " ";

    }

    std::cout << "\n";

    }

    int main() {

    std::vector<int> numbers = {1, 2, 3, 4, 5};

    PrintVector(numbers); // Выведет: 1 2 3 4 5

    }


Возвращаемые значения функций

  1. Возврат простых типов

    Функция может возвращать любые типы данных, такие как int, double, char и т.д. Например:

    double Divide(double a, double b) {

    return a / b;

    }

    int main() {

    double result = Divide(10.0, 2.0);

    std::cout << "Результат деления: " << result << "\n"; // Выведет: 5.0

    }

  2. Возврат сложных типов

    Возврат сложных типов данных (например, векторов или строк) также возможен. Компилятор автоматически оптимизирует процесс копирования таких объектов.

    std::string Concatenate(const std::vector<std::string>& parts) {

    std::string result;

    for (const auto& part : parts) {

    result += part;

    }

    return result;

    }

    int main() {

    std::vector<std::string> words = {"Hello", " ", "World", "!"};

    std::cout << Concatenate(words) << "\n"; // Выведет: Hello World!

    }

  3. Опасность возврата ссылок на локальные переменные

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

    int& GetLocalVariable() {

    int x = 10;

    return x; // Ошибка! x будет уничтожен после завершения функции

    }


Лямбда-функции

Лямбда-функции — это анонимные функции, которые можно определять непосредственно в месте использования. Они особенно полезны для коротких операций, например, для сортировки.

#include <algorithm>

#include <vector>

int main() {

std::vector<int> numbers = {5, 2, 8, 1, 9};

// Сортировка в обратном порядке с помощью лямбда-функции

std::sort(numbers.begin(), numbers.end(), [](int a, int b) {

return a > b; // Сравнение в обратном порядке

});

for (int num : numbers) {

std::cout << num << " "; // Выведет: 9 8 5 2 1

}

}


Шаблоны

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

  1. Шаблонные функции

    Шаблонная функция позволяет работать с разными типами данных без необходимости писать отдельные версии для каждого типа.

    template<typename T>

    T Max(T a, T b) {

    return (a > b) ? a : b;

    }

    int main() {

    std::cout << "Максимум: " << Max(10, 20) << "\n"; // Выведет: 20

    std::cout << "Максимум: " << Max(3.14, 2.71) << "\n"; // Выведет: 3.14

    std::cout << "Максимум: " << Max("apple", "banana") << "\n"; // Выведет: banana

    }

  2. Шаблонные структуры

    Шаблоны также можно использовать для создания универсальных структур данных. Например, структура Triple, которая хранит три значения разных типов:

    template<typename T1, typename T2, typename T3>

    struct Triple {

    T1 first;

    T2 second;

    T3 third;

    };

    int main() {

    Triple<int, double, std::string> data = {1, 3.14, "Hello"};

    std::cout << "First: " << data.first << ", Second: " << data.second

    << ", Third: " << data.third << "\n";

    }


Это основные концепции работы с функциями и шаблонами в C++. Теперь вы знаете, как создавать и использовать функции, передавать аргументы, возвращать значения и работать с шаблонами.

Задачи на функции

1. Простые функции

  1. Функция "Приветствие"
    Напишите функцию void Greet(const std::string& name), которая выводит приветствие в формате:
    "Привет, [имя]!".
    Пример:

    Greet("Анна"); // Вывод: Привет, Анна!

  2. Вычисление площади прямоугольника
    Напишите функцию double CalculateRectangleArea(double width, double height), которая принимает ширину и высоту прямоугольника и возвращает его площадь.
    Пример:

    double area = CalculateRectangleArea(5.0, 3.0); // Результат: 15.0

  3. Проверка числа на четность
    Напишите функцию bool IsEven(int number), которая возвращает true, если число четное, и false — если нечетное.
    Пример:

    bool result = IsEven(4); // Результат: true


2. Функции с передачей по ссылке

  1. Увеличение значения на 1
    Напишите функцию void Increment(int& value), которая увеличивает переданное значение на 1.
    Пример:

    int x = 5;

    Increment(x);

    std::cout << x; // Вывод: 6

  2. Обмен значений двух переменных
    Реализуйте функцию void Swap(int& a, int& b), которая меняет значения двух переменных местами.
    Пример:

    int x = 10, y = 20;

    Swap(x, y);

    std::cout << x << " " << y; // Вывод: 20 10


3. Рекурсивные функции

  1. Числа Фибоначчи
    Напишите рекурсивную функцию int Fibonacci(int n), которая возвращает n-е число Фибоначчи.
    Пример:

    int result = Fibonacci(7); // Результат: 13

  2. Степень числа
    Напишите рекурсивную функцию int Power(int base, int exponent), которая возводит число base в степень exponent.
    Пример:

    int result = Power(2, 3); // Результат: 8


Задачи на шаблоны

4. Шаблонные функции

  1. Минимум двух чисел
    Напишите шаблонную функцию T Min(T a, T b), которая возвращает минимальное из двух значений.
    Пример:

    int result1 = Min(10, 20); // Результат: 10

    double result2 = Min(3.14, 2.71); // Результат: 2.71

  2. Сравнение строк
    Напишите шаблонную функцию bool AreEqual(T a, T b), которая возвращает true, если два значения равны, и false — если нет.
    Пример:

    bool result1 = AreEqual(5, 5); // Результат: true

    bool result2 = AreEqual("hello", "world"); // Результат: false

  3. Сумма элементов массива
    Напишите шаблонную функцию T SumArray(const std::vector<T>& arr), которая вычисляет сумму всех элементов вектора.
    Пример:

    std::vector<int> numbers = {1, 2, 3, 4};

    int result = SumArray(numbers); // Результат: 10


5. Шаблонные структуры

  1. Шаблонная структура "Точка"
    Создайте шаблонную структуру Point<T>, которая хранит координаты точки в двумерном пространстве. Добавьте метод void Print(), который выводит координаты точки.
    Пример:

    Point<int> p1 = {3, 4};

    p1.Print(); // Вывод: (3, 4)

  2. Шаблонная структура "Пара"
    Создайте шаблонную структуру Pair<T1, T2>, которая хранит два значения разных типов. Добавьте метод void Print(), который выводит значения пары.
    Пример:

    Pair<int, std::string> pair = {42, "Ответ"};

    pair.Print(); // Вывод: (42, Ответ)


Задачи на лямбда-функции

6. Лямбда-выражения

  1. Фильтрация чисел
    Используя лямбда-функцию, напишите программу, которая фильтрует числа из вектора, оставляя только четные.
    Пример:

    std::vector<int> numbers = {1, 2, 3, 4, 5, 6};

    std::vector<int> evenNumbers;

    std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(evenNumbers), [](int x) {

    return x % 2 == 0;

    });

    // Результат: evenNumbers = {2, 4, 6}

  2. Сортировка строк по длине
    Используя лямбда-функцию, отсортируйте вектор строк по их длине.
    Пример:

    std::vector<std::string> words = {"apple", "banana", "kiwi"};

    std::sort(words.begin(), words.end(), [](const std::string& a, const std::string& b) {

    return a.size() < b.size();

    });

    // Результат: words = {"kiwi", "apple", "banana"}


Дополнительные задачи

7. Комбинированные задачи

  1. Калькулятор
    Напишите шаблонную функцию T Calculator(T a, T b, char operation), которая выполняет одну из операций (+, -, *, /) над двумя числами.
    Пример:

    int result = Calculator(10, 5, '+'); // Результат: 15

    double result2 = Calculator(10.0, 2.0, '/'); // Результат: 5.0

  2. Поиск максимального элемента в массиве
    Напишите шаблонную функцию T FindMax(const std::vector<T>& arr), которая возвращает максимальный элемент вектора.
    Пример:

    std::vector<int> numbers = {3, 1, 4, 1, 5, 9};

    int max = FindMax(numbers); // Результат: 9

  3. Подсчет слов в строке
    Напишите функцию int CountWords(const std::string& text), которая подсчитывает количество слов в строке. Слова разделены пробелами.
    Пример:

    int count = CountWords("Hello world!"); // Результат: 2


Эти задачи помогут вам закрепить основные концепции работы с функциями, шаблонами и лямбда-выражениями в C++. Вы можете начать с простых задач и постепенно переходить к более сложным. Удачи!

Показать полностью
[моё] Программирование Гайд IT C++ Windows Длиннопост
48
2
mcnikirikitiki
4 месяца назад
Лига программистов

Сборка проектов на C/C++: от базовых принципов к продвинутым решениям. Часть II - Инструменты автоматизации сборки⁠⁠

1. Почему важно правильно настраивать сборку?

Правильная настройка сборки — это не просто удобство для разработчиков, но и ключ к успешному развитию проекта. Вот несколько причин:

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

  • Переносимость: Проекты часто запускаются на разных платформах (Linux, Windows, macOS). Хорошая система сборки гарантирует, что код будет работать везде.

  • Совместная работа: Когда в команде несколько разработчиков, автоматизированная сборка помогает избежать проблем с конфигурацией окружения.

  • CI/CD: Современные системы непрерывной интеграции и доставки (CI/CD) требуют четко настроенной сборки. Это ускоряет тестирование и деплой.


2. Универсальные Makefile'ы

В примере выше мы рассмотрели базовый Makefile. Теперь давайте сделаем его более универсальным, чтобы он мог обрабатывать любое количество исходных файлов:

# Имя исполняемого файла

TARGET = program

# Компилятор и флаги

CXX = g++

CXXFLAGS = -Wall -std=c++17

LDFLAGS =

# Список исходных файлов

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp=.o)

# Основная цель

all: $(TARGET)

# Как собирать программу

$(TARGET): $(OBJS)

$(CXX) $(OBJS) $(LDFLAGS) -o $(TARGET)

# Правило для объектных файлов

%.o: %.cpp

$(CXX) $(CXXFLAGS) -c $< -o $@

# Очистка

clean:

rm -f $(OBJS) $(TARGET)

Здесь используется функция wildcard, которая автоматически находит все .cpp файлы в директории. Это делает Makefile более гибким.


3. Работа с зависимостями

3.1. Установка библиотек через пакетный менеджер

Это самый простой способ, но он имеет ограничения:

  • Разные дистрибутивы Linux могут использовать разные пакетные менеджеры (apt, yum, pacman).

  • Версии библиотек в репозиториях могут быть устаревшими.

Пример установки libcurl:

sudo apt-get install libcurl4-openssl-dev

3.2. Локальная компиляция библиотек

Если вы хотите избежать проблем с версиями библиотек, лучше скомпилировать их локально. Например, для libcurl:

wget https://curl.se/download/curl-8.11.1.tar.bz2

tar -jxf curl-8.11.1.tar.bz2

cd curl-8.11.1

./configure --with-openssl

make

Теперь используйте локальные пути при компиляции:

g++ curlexample.cpp -o curlexample \

-I ./curl-8.11.1/include \

-L ./curl-8.11.1/lib/.libs \

-l curl


4. Продвинутые инструменты сборки

4.1. CMake

CMake — это мощный инструмент, который поддерживает кроссплатформенную сборку. Вот пример CMakeLists.txt для проекта с зависимостью от libcurl:

cmake_minimum_required(VERSION 3.10)

project(CurlExample LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(CURL REQUIRED)

add_executable(CurlExample curlexample.cpp)

target_link_libraries(CurlExample PRIVATE CURL::libcurl)

Чтобы собрать проект:

mkdir build

cd build

cmake ..

make

4.2. Meson

Meson — это современный инструмент, который генерирует файлы для Ninja. Пример meson.build:

project('CurlExample', 'cpp')

# Поиск libcurl

dependency('libcurl')

executable('curlexample', 'curlexample.cpp', dependencies: ['libcurl'])

Сборка:

meson setup build

cd build

ninja

4.3. SCons

SCons использует Python для написания рецептов. Пример SConstruct:

env = Environment()

env.Append(LIBS=['curl'])

env.Program(target='curlexample', source='curlexample.cpp')

Сборка:

scons


5. Docker для изоляции сборки

Docker позволяет создавать изолированные контейнеры с нужной версией ОС и библиотек. Это особенно полезно для старых проектов или CI/CD.

Пример Dockerfile:

FROM ubuntu:20.04

RUN apt-get update && apt-get install -y \

build-essential cmake git libcurl4-openssl-dev

WORKDIR /app

COPY . .

RUN mkdir build && cd build && cmake .. && make

Сборка и запуск:

docker build -t myproject .

docker run -it --rm -v $(pwd):/app myproject


6. Советы по оптимизации сборки

  1. Инкрементальная сборка: Не пересобирайте весь проект, если изменился только один файл. Инструменты вроде make и ninja поддерживают это "из коробки".

  2. Параллельная сборка: Используйте флаг -j для ускорения сборки на многоядерных процессорах:

    make -j$(nproc)

  3. Кэширование зависимостей: Если вы используете Docker, сохраняйте зависимости в кэше, чтобы не скачивать их заново при каждой сборке.

  4. Статическая vs Динамическая линковка: Выбирайте подходящий метод в зависимости от ваших целей:

    • Статическая линковка создает автономный исполняемый файл, но увеличивает его размер.

    • Динамическая линковка делает файл меньше, но требует наличия библиотек на целевой системе.


7. Заключение

Настройка сборки проекта — это инвестиция в будущее. Чем раньше вы потратите время на её автоматизацию, тем проще будет развивать проект. Вот несколько рекомендаций:

  • Для небольших проектов используйте Makefile.

  • Для средних и больших проектов выбирайте CMake или Meson.

  • Если вам нужно тестировать сборку в разных окружениях, используйте Docker.

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

Помните: хороший процесс сборки — это залог стабильности и успеха вашего проекта!

Показать полностью
[моё] Программирование Гайд IT Windows C++ Сборка Длиннопост
0
3
noname.001
noname.001
4 месяца назад

Следующий вариант⁠⁠

ну вот еще одна итерация разработки.

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

@SinijTraktorist, уже лучше?

С высоты своего опыта кажется что все достаточно комфортно и удобно. Левой рукой меняешь слои, мышой ставишь точки.. Не даром прошли науки человеко-машинного взаимодействия.

Но теперь самый главный вопрос. Как эти сети вывести. Опыты с DipTrace ни к чему не привели. Софтина кривая и толком так и не смогла принять компоненты которые за рамками существующих библиотек корпусов. Альтиум тоже окозался таким же дерьмом. Собственно он всегда таким и был со времен PCAd. (а пафоса то).

Давайте дальше идеи. Вывод в схему это типично творческая задача. готовых решений тут нет. По крайней мере таких которые могут дать визуально понятное для человека.

ГПТ предлагает Force-Directed Placement но это явно будет какое то машинное произведение.

В общем жду идет от заинтересованных лиц.

Программу и исходники найдете по ссылке https://disk.yandex.ru/d/sBYcaJ2TPVvw_w

ну и на последок:

Показать полностью
[моё] Эксперимент Инженер Программирование Разработка Windows IT Программа Видео Без звука
17
4
mcnikirikitiki
4 месяца назад
Лига программистов

Основы сборки проектов на C/C++⁠⁠

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

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

Здравствуйте, мои маленькие любители программирования!

Давайте разберем основы сборки проектов на Си/Си++ простым языком:

  1. Основные понятия:

  • Программа собирается из множества файлов

  • Есть два типа библиотек:

    • Статические (.a, .lib) - код встраивается в exe-файл

    • Динамические (.so, .dll) - подгружаются при запуске

  1. Этапы сборки:

// hello.cpp

#include <iostream>

void say_hello() {

std::cout << "Hello, world!" << std::endl;

}

// main.cpp

void say_hello();

int main() {

say_hello();

return 0;

}

Компиляция:

# Компилируем каждый файл отдельно

g++ -c hello.cpp -o hello.o

g++ -c main.cpp -o main.o

# Связываем объектные файлы в исполняемый

g++ hello.o main.o -o program

  1. Работа с библиотеками:

Создание статической библиотеки:

# Создаем объектный файл

g++ -c mylib.cpp -o mylib.o

# Архивируем в статическую библиотеку

ar rcs libmylib.a mylib.o

Использование:

g++ main.cpp -L. -lmylib -o program

  1. Особенности C++

Искажение имен (name mangling):

// В исходном коде

void my_function(int a);

// После компиляции

_Z11my_functioni

  1. Управление зависимостями

Пример Makefile:

program: main.o hello.o

g++ main.o hello.o -o program

main.o: main.cpp

g++ -c main.cpp

hello.o: hello.cpp

g++ -c hello.cpp

clean:

rm *.o program

Основные команды:

  • make - собрать проект

  • make clean - очистить скомпилированные файлы

Это базовые принципы, которые помогут начать работать с проектами на Си/Си++. В следующих частях рассмотрим более сложные случаи и современные инструменты сборки.

Показать полностью
[моё] Программирование IT Программист Сборка Linux Windows Гайд Текст
2
11
mcnikirikitiki
4 месяца назад
Лига программистов

Релиз проекта TaskExplorer 1.6.0⁠⁠

Релиз проекта TaskExplorer 1.6.0 IT, Программист, Windows, Длиннопост

Привет, друзья! Хочу рассказать вам о крутой новинке для тех, кто любит держать руку на пульсе своего ПК. Вышла новая версия Task Explorer 1.6.0 — это мощный инструмент, который можно назвать улучшенной версией "Диспетчера задач" для Windows (начиная с Windows 7). И знаете что? Это полностью открытый проект, написанный на C и C++! Код доступен на GitHub под лицензией GNU GPL v3.0. Первую версию этого инструмента выпустили еще в октябре 2019 года, но сейчас он стал намного круче.

Что это за зверь?

Task Explorer работает через библиотеку ProcessHacker и предлагает не просто мониторинг запущенных приложений, а настоящий детектив по выяснению того, чем эти приложения занимаются прямо сейчас. Интерфейс сделан максимально удобным: все важные данные всегда перед глазами, без лишних кликов и окон. Вместо того чтобы открывать кучу вкладок, вы видите нужную информацию прямо в нижней части основной панели. А если хотите углубиться — просто выберите процесс, и дополнительные данные отобразятся мгновенно. Большинство данных обновляются в реальном времени, что помогает отслеживать динамику и понимать, что происходит с вашей системой.

Основные фишки

Вот несколько классных функций, которые делают Task Explorer особенным:

  • Панель потоков: Здесь можно увидеть трассировку стека для каждого потока. Это невероятно полезно, если вы хотите разобраться, почему программа тормозит или виснет. Отлично подходит для отладки проблем с производительностью.

  • Память процессов: Хотите узнать, что именно хранится в памяти программы? Task Explorer предоставляет продвинутый редактор памяти и возможность искать строки. Также есть панель дескрипторов, где можно увидеть все открытые файлы, их размеры и текущие позиции.

  • Панель сокетов: Если вы следите за сетевой активностью, эта панель покажет все открытые соединения и даже скорость передачи данных. Можно настроить отображение UDP-пакетов, чтобы видеть, с какими серверами общается программа.

  • Панель модулей: Здесь отображаются все загруженные DLL и файлы в памяти. Можно не только просматривать их, но и выгружать или внедрять новые DLL.

  • Другие панели: Token, Environment, Windows, GDI, .NET — все это доступно в пару кликов. А если нужно сравнить несколько процессов, просто откройте их в отдельных окнах.

  • Системный монитор: Графики использования CPU, памяти, дисков, сети и даже GPU — все это в красивом и удобном виде. Можно настраивать размер графиков и выбирать, какие данные отображать.

  • Панель системной информации: Здесь можно увидеть все открытые файлы, сокеты и службы системы. Удобно, что эту панель можно свернуть или открыть в отдельном окне, освободив место для других данных.

Что нового в версии 1.6.0?

Эта версия — настоящий прорыв! Вот что добавили:

  • Теперь Task Explorer полностью соответствует современным требованиям, включая функции, которых раньше не хватало в SystemInformer.

  • Впервые драйвер программы полностью подписан, что делает её пригодной для профессионального использования.

  • Добавлены расширенные параметры безопасности и управления процессами, например, заморозка процессов и настройка режимов эффективности.

  • Многие панели (например, память, службы, модули и потоки) получили дополнительные столбцы и подробные данные. Меню стали более удобными.

  • Папка конфигурации теперь находится в C:\Users[User]\AppData\Local\Xanasoft\TaskExplorer, что упрощает интеграцию с другими инструментами Xanasoft.

  • Исправлены старые баги, а компонент PHlib обновлен до версии 3.2.25 011 для лучшей стабильности.

Зачем это нужно?

Если вы системный администратор, разработчик или просто любопытный пользователь, Task Explorer станет вашим надежным помощником. Он позволяет не только следить за процессами, но и глубоко анализировать их поведение. Например, вы можете:

  • Найти утечки памяти.

  • Отследить подозрительные сетевые соединения.

  • Разобраться, почему программа потребляет слишком много ресурсов.

  • Просмотреть все открытые файлы и дескрипторы.

Итог

Task Explorer 1.6.0 — это мощный и гибкий инструмент, который подойдет как профессионалам, так и обычным пользователям. С его помощью вы сможете лучше понимать, что происходит внутри вашей системы, и оперативно решать возникающие проблемы. А то, что он открытый и бесплатный, делает его еще более привлекательным.

Если вам интересно, скачайте его с GitHub и попробуйте сами!

Показать полностью 1
[моё] IT Программист Windows Длиннопост
9
8
itforprof
itforprof
4 месяца назад

Почему Linux не завоевывает российский рынок?⁠⁠

Любопытно следить за регулярно обновляемой статистикой по самым популярным ОС в мире, и особенно в России. По итогам 2024 года, Windows в мире слегка укрепил свои позиции, поднявшись с 72,72% до 73,38%. MacOS более двух процентов пользователей: год назад было 16,38% мирового рынка, сейчас — 14,16%

Казалось бы, на фоне всех наших санкционных приключений Linux начнёт всё активнее отщипывать себе долю пользователей на российском рынке. Но нет. Доля «пингвинов» у нас выросла всего с 2,15% до 2,38%. Притом что в среднем по миру на Linux сидят 4,13% пользователей.

Почему Linux не завоевывает российский рынок? Импортозамещение, IT, Windows, Linux, Mac, Операционная система

А вот Windows у нас продолжает доминировать с внушительными 87,58%, что сильно выше средних значений. И он практически не уступил позиций за год (в 2023 было 87,77%). Даже macOS немного прибавила, достигнув отметки 5,61%.

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

Показать полностью 1
Импортозамещение IT Windows Linux Mac Операционная система
134
TECHLiveHACK
TECHLiveHACK
4 месяца назад

Как зашифровать флешку?⁠⁠

Как зашифровать флешку? Программа, Гайд, Windows, Linux, Инновации, Flash, Карта памяти, Информационная безопасность, Технологии, Программирование, Защита, IT, Telegram (ссылка)

VeraCrypt – это программное обеспечение для шифрования дисков с открытым исходным кодом для Windows, Mac OSX и Linux. Вы можете зашифровать системный диск или же создать зашифрованный локальный диск.

Чтобы зашифровать флешку:

1. В главном окне программы нажмите кнопку «Создать том».

2. Выберите опцию «Зашифровать несистемный раздел/диск» и тапните «Далее».

3. Выберите опцию «Обычный том VeraCrypt».

4. Затем нажмите «Устройство…» для выбора сменного носителя.

5. Отметьте нужную флешку и подтвердите ваш выбор.

6. Активируйте опцию «Создать и отформатировать зашифрованный том» → «Далее».

7. Все данные на накопителе будут удалены и флешка будет полностью отформатирована.

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

Источник: https://t.me/TechLiveHack/849

Показать полностью
Программа Гайд Windows Linux Инновации Flash Карта памяти Информационная безопасность Технологии Программирование Защита IT Telegram (ссылка)
6
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии