Computer Science @cscience1 Channel on Telegram

Computer Science

@cscience1


По всем вопросам: @altmainf

Уважаемый менеджер: @altaiface

Computer Science (Russian)

Канал "Computer Science" - это идеальное место для всех, кто увлечен компьютерными науками. Здесь вы найдете самую актуальную информацию о разработке программного обеспечения, искусственном интеллекте, кибербезопасности и многом другом. Наши эксперты делятся своими знаниями и опытом, чтобы помочь вам расширить свои навыки в области компьютерных технологий. Подписавшись на канал, вы будете в курсе всех последних тенденций в мире IT и сможете участвовать в обсуждениях с единомышленниками. Если у вас возникнут вопросы, не стесняйтесь обращаться к администраторам канала по контактам: @altmainf и @altaiface. Присоединяйтесь к сообществу Computer Science и откройте для себя увлекательный мир компьютерных наук!

Computer Science

17 Feb, 10:04


Статические и динамические структуры данных

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

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

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

Computer Science

13 Feb, 09:33


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

Основные особенности квантовых компьютеров:

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

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

• Квантовая интерференция: Квантовые компьютеры могут использовать интерференцию для усиления правильных ответов и подавления неправильных при выполнении вычислений.

• Квантовая надежность: Квантовые компьютеры имеют потенциал для решения определенных задач, таких как факторизация больших чисел или оптимизация, гораздо более эффективно, чем классические компьютеры.

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

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

Computer Science

13 Feb, 07:32


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

🔐 infosec — ламповое сообщество, которое публикует редкую литературу, курсы и полезный контент для ИБ специалистов любого уровня и направления.

😈 Social Engineering — самый крупный ресурс в Telegram, посвященный этичному Хакингу, OSINT и социальной инженерии.

💬 Вакансии в ИБ — актуальные предложения от самых крупных работодателей и лидеров рынка в сфере информационной безопасности.

Computer Science

03 Feb, 13:35


Свободное программное обеспечение в высшей школе

В начале февраля состоится ХХ конференция «Свободное программное обеспечение в высшей школе». Организаторы: компания «Базальт СПО» и Институт системного программирования РАН.

В рамках мероприятия преподаватели МГУ имени М. В. Ломоносова, СПбГУ, МФТИ, НИУ ВШЭ и других вузов страны, разработчики, системные администраторы и не только выступят с докладами о:

• Научных проектах, связанных с разработкой и использованием свободного программного обеспечения;
• Проблемах и решениях внедрения СПО в инфраструктуру образовательной организации;
• Социальных и экономико-правовых особенностях применения свободного программного обеспечения в высшей школе;
• Студенческих проектах разработки СПО.

Дата и место проведения:

7–9 февраля 2025 года
ИПС РАН, Ярославская область, Переславский район, с. Веськово, улица Петра Первого, д. 4А

Регистрация:

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

Реклама. ООО «Базальт СПО»
ИНН 7714350892 erid: 2VtzqvTUsyN

Computer Science

31 Jan, 13:30


Удаление мёртвого кода

Удаление мертвого кода важно, чтобы поддерживать код базы проекта в чистоте и упростить его чтение и понимание.

Процесс включает в себя несколько шагов:

1. Поиск кода, не выполняющего никакой полезной работы. Это может быть код, который не используется в любом месте проекта или код, который не имеет никакого влияния на результаты работы проекта.

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

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

Computer Science

31 Jan, 10:35


Что такое мёртвый код?

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

Мертвый код может иметь влияние на производительность программы, поскольку он увеличивает время компиляции и усложняет чтение исходного кода. Кроме того, мертвый код может занимать дополнительное место в памяти и усложнять обслуживание программы.

Чтобы избежать мертвого кода, следует регулярно проверять исходный код и удалять неиспользуемый код. Это также помогает сохранить исходный код более организованным и читаемым. Кроме того, код можно комментировать, чтобы сохранить его для будущих использований, если это необходимо.

Computer Science

29 Jan, 07:29


Система реального времени

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

Под реальным временем понимается количественная характеристика, которая может быть измерена реальными физическими часами.

События реального времени могут относиться к одной из трёх категорий:

1) Асинхронные события — полностью непредсказуемые события. Например, вызов абонента телефонной станции.

2) Синхронные события — предсказуемые события, случающиеся с определённой регулярностью. Например, вывод аудио и видео.

3) Изохронные события — регулярные события (разновидность асинхронных), случающиеся в течение интервала времени. Например, в мультимедийном приложении данные аудиопотока должны прийти за время прихода соответствующей части потока видео.

Computer Science

25 Jan, 11:04


Алгоритм динамического программирования

Динамическое программирование (ДП) — это метод оптимизации, который используется для решения задач, которые могут быть разбиты на подзадачи, решаемые независимо друг от друга.

Пример из комбинаторики:

• Задача: Найти наибольшую сумму чисел в последовательности, не выбирая два подряд идущих числа.
• Решение: Метод динамического программирования позволяет решить эту задачу, строя решение поэтапно: для каждого числа решается, лучше ли добавить его к предыдущей сумме или начать новую сумму с этого числа.

Как это работает?

1. Разбиваем задачу на подзадачи.
2. Решаем подзадачи и сохраняем их результаты.
3. Используем сохраненные результаты для решения более крупных подзадач.
4. Финальное решение получается из решения самых больших подзадач.

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

Computer Science

25 Jan, 08:59


📚 Коллекция книг для ИБ специалистов.

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

- Сети глазами хакера;
- Linux глазами хакера. 7-е издание;
- Веб-сервер глазами хакера. 4-е изд;
- Реагирование на инциденты на основе аналитических данных. 2-е издание;
- Контролируемый взлом. Библия социальной инженерии. 2-е издание;
- Linux. От новичка к профессионалу. 9 изд.

• Каждый победитель получит сразу весь пул книг в бумажном варианте, которые перечислены выше. Принять участие можно тут: https://t.me/it_secur/2635

S.E. ▪️ infosec.work ▪️ VT

Computer Science

23 Jan, 07:29


Эволюционные алгоритмы

Эволюционные алгоритмы — это методы оптимизации, вдохновленные процессами естественного отбора и эволюции. Они применяются для решения задач, где традиционные методы (например, линейное программирование) не дают хороших результатов.

Пример из инженерии:

• Задача: Разработка оптимальной формы крыла самолета для минимизации аэродинамического сопротивления.

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

Как это работает?

1. Генерация случайной популяции решений.
2. Оценка качества каждого решения с помощью функции приспособленности.
3. Выбор лучших решений, их «скрещивание» и «мутация».
4. Повторение процесса до достижения оптимума.

Эти алгоритмы хорошо работают в сложных и многозадачных пространствах, где другие методы не дают точных решений.

Computer Science

22 Jan, 07:29


Метод градиентного спуска

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

Пример из машинного обучения:

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

Как это работает?

1. Мы начинаем с произвольного значения параметров.
2. Затем вычисляем градиент функции (направление наибольшего роста).
3. Параметры обновляются в направлении противоположном градиенту (по сути, шаги делаются по наибольшему спаду).
4. Этот процесс повторяется до тех пор, пока не достигнут минимум.

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

Computer Science

20 Jan, 08:49


Линейное программирование

Линейное программирование (ЛП) — это метод оптимизации, который используется для решения задач, где целевая функция и ограничения являются линейными.

Пример из логистики:

• Задача: Компания занимается доставкой товаров в разные города. Нужно минимизировать стоимость доставки при условии, что определенные объемы товаров должны быть доставлены в каждый город.
• Решение: ЛП позволяет найти оптимальное количество товаров, которые нужно отправить через каждый маршрут, чтобы минимизировать затраты.

Как работает ЛП?

1. Формулируется целевая функция (например, минимизация затрат).
2. Определяются ограничения (например, максимальное количество товаров для каждой точки назначения).
3. Используется алгоритм (например, симплекс-метод) для поиска оптимального решения.

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

Computer Science

18 Jan, 07:32


Введение в методы оптимизации

Методы оптимизации — это техники, направленные на поиск наилучших решений для различных задач. Эти методы применяются в математике, бизнесе, инженерии и даже в повседневной жизни.

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

Пример из бизнеса:

• Задача: Как оптимизировать рекламную кампанию для максимизации продаж при ограниченном бюджете?

• Решение: Можно использовать методы оптимизации для нахождения наилучшего распределения бюджета между различными рекламными каналами (например, Google Ads, соцсети, телевизионная реклама).

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

Computer Science

15 Jan, 07:00


5. Канал с шумом и теорема Шеннона

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

Пример: при передаче данных через интернет канал может иметь предел пропускной способности, например, 10 Мбит/с. Если на канале имеется шум, то из-за ошибок, которые могут возникнуть в процессе передачи, эффективная скорость передачи может быть ниже этого предела.

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

Computer Science

13 Jan, 14:12


4. Код Шеннона-Фано и Хаффмана

Одним из способов эффективного кодирования является использование алгоритмов Шеннона-Фано и Хаффмана, которые создают префиксные коды для символов с учётом их вероятности.

Код Шеннона-Фано: этот алгоритм делит набор символов на две группы таким образом, чтобы сумма вероятностей в каждой группе была как можно более равной. Каждой группе присваиваются соответствующие префиксные коды.

Код Хаффмана: алгоритм строит дерево, где более вероятные символы размещаются ближе к корню, а менее вероятные — дальше. Этот метод всегда даёт оптимальное решение с точки зрения минимизации средней длины кода.

Пример: Если у вас есть текст, в котором часто встречаются символы «a» и «b», и реже «c», код Хаффмана присвоит символу «a» более короткий код, а символу «c» — более длинный.

Computer Science

08 Jan, 10:35


Пример Энтропии, как меры неопределенности: Если мы подбрасываем честную монету, вероятность выпадения орел или решка равна 50%. Энтропия будет максимальной, так как оба исхода одинаково вероятны.

2. Канал передачи информации

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

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

Computer Science

04 Jan, 12:59


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

Здесь и далее будет приведено несколько ключевых понятий и аспектов теории информации:

1. Информация и энтропия

Информация — то, что уменьшает неопределенность. В контексте теории информации информация измеряется в битах.

Энтропия (H) — мера неопределенности или неопределенности системы. В информационном контексте энтропия определяет, сколько информации нужно для того, чтобы описать выбор одного из возможных исходов. Чем больше возможных исходов, тем выше энтропия.

Энтропия для дискретного случайного события 𝑋 с вероятностями 𝑝₁, 𝑝₂, ..., 𝑝𝑛 вычисляется по формуле:
H(X) = −Σ [𝑛, ᵢ₌₁] (pᵢ log₂(pᵢ))

где 𝑝𝑖 — вероятность 𝑖-го исхода, а сумма берется по всем возможным исходам.

Энтропия измеряется в битах, если логарифм вычисляется по основанию 2. Это связано с тем, что каждый бит представляет собой двоичный выбор между двумя возможными состояниями.

Computer Science

30 Dec, 10:44


Библиотеки и фреймворки для ИИ в Linux

Linux предлагает широкий выбор библиотек и фреймворков для разработки ИИ:

1. TensorFlow
Один из самых популярных фреймворков для машинного обучения. Он используется для создания, тренировки и развертывания моделей ИИ, включая нейронные сети.

2. PyTorch
Используется для научных исследований и разработки ИИ-приложений. PyTorch отличается гибкостью и удобством, особенно для проектов, требующих высокой кастомизации.

3. Keras
Высокоуровневый API для нейронных сетей, работающий поверх TensorFlow, который делает разработку моделей ИИ более доступной и понятной.

4. OpenCV
Библиотека для компьютерного зрения. Используется для обработки изображений и видео в реальном времени, а также для распознавания объектов и лиц.

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

Computer Science

26 Dec, 10:35


Аппликативный порядок вычислений

Аппликативный порядок вычислений - это порядок вычислений, при котором аргументы функции вычисляются перед самой функцией. Он также называется "строгим" порядком вычислений.

Например, если есть выражение:

f(x) + g(x)

то при аппликативном порядке вычислений сначала вычисляются значения x, а затем функции f и g, после чего производится сложение. То есть, сначала выполняется f(x), затем g(x), и только после этого выполняется сложение.

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

Computer Science

26 Dec, 08:31


infosec - один из самых ламповых каналов по информационной безопасности, где говорят об истории ИТ, публикуют актуальные новости и пишут технический материал по разным темам:

- Как зарождалась Флибуста?
- Сервисы для обеспечения безопасности в сети;
- Каким образом "компьютерные мастера" обманывают своих клиентов?
- Бесплатный бот, который проверит файлы на предмет угроз более чем 70 антивирусами одновременно.

А еще у нас часто проходят розыгрыши самых актуальных и новых книг по ИБ. Так что присоединяйся, у нас интересно!

Computer Science

25 Dec, 11:01


Алгоритмы сортировок

Самая частая тема, которую спрашивают на собеседованиях. Рассмотрим, какие есть и их сложность по времени. Подробно как они работают, по ссылкам в соответствующих постах.

 1. Сортировка пузырьком 
Худшее время - O(n^2) | Лучшее время - O(n)

2. Сортировка выбором
Лучшее время O(n^2) | В cреднем - O(n^2) | Худшее время - O(n^2)

3. Сортировка подсчётом
Сложность оценивается как O(n + k), где n — количество элементов, k — диапазон значений.

4. Поразрядная сортировка
В лучшем случаи: O(n) | В худшем: O(n*k)

5. Bucket sort
Наименьшая и средняя сложность (O(n))

6.
Сортировка Шелла
В лучшем случаи: O(n) | В cреднем: O(n (logn)^2) | В худшем: O(n log^2n)

7.
Tim Sort
В лучшем случаи: O(n) | В cреднем: O(n logn) | В худшем: O(n logn)

8. Блинная сортировка
Лучший случай: O(n) | Средний случай: O(n²) | Худший случай: O(n²)

9.
Сортировка перемешиванием 
Худшее время - O(n^2) | Лучшее время - O(n)

10. Gnome Sort
В лучшем: O(n) | В худшем: O(n^2)

11. Odd-Even Sort
В лучшем: O(n)
В худшем: O(n^2)

12. Сортировка расческой 
Худшее время - O(n^2) | Лучшее время - O(n log n)

13. Сортировка вставками 
Худшее время - O(n^2) | Лучшее время - O(n) или O(1)

14. Голубиная сортировка
Время: O(n+range)

15. Циклическая сортировка
Время: O(n^2)

16. Нитевидная сортировка
В лучшем: O(n) | В худшем: O(n^2)

17. Битоническая сортировка
Время: O(log^2n)

18. Stooge Sort
Время: O(n^(log3/log1.5))

19. Бисерная сортировка
Время: O(n^2)

20. Топологическая сортировка
Время: O(V + E)

21. Быстрая сортировка 
Худшее время - O(n^2) | Лучшее время - O(n log n) 

22. Сортировка слиянием 
Худшее время - O(n log n) | Лучшее время - O(n log n) 

23. Пирамидальная сортировка 
Худшее время - O(n log n) | Лучшее время - O(n log n) или O(n)

Computer Science

23 Dec, 09:59


Инструменты для управления политиками безопасности

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

• OPA (Open Policy Agent): Открытый агент для управления политиками, который можно интегрировать в разные этапы DevOps-пайплайнов.

• Kubernetes RBAC: Управление доступом на основе ролей (Role-Based Access Control) в Kubernetes для контроля безопасности.

Эти инструменты ([1], [2], [3], [4], [5], [6], [7], [8], [9]), в сочетании с процессами DevOps и практиками безопасности, помогают создавать безопасные и надежные программные решения, снижая риски и улучшая общую безопасность на всех этапах разработки и эксплуатации.

Computer Science

22 Dec, 14:02


Инструменты для управления уязвимостями

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


• Snyk: Платформа для мониторинга уязвимостей в зависимостях и контейнерах, а также в инфраструктуре как код.

• Dependabot: Инструмент от GitHub, который автоматически создает pull-запросы для обновления зависимостей, когда обнаруживаются уязвимости.

• WhiteSource: Платформа для управления безопасностью open-source компонентов, включая их уязвимости и лицензионные проблемы.

Computer Science

18 Dec, 11:29


Инструменты для управления "секретами" и идентификацией

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

• HashiCorp Vault: Решение для управления секретами и чувствительными данными, позволяющее безопасно хранить и контролировать доступ к ключам и конфиденциальной информации.

• CyberArk: Платформа для управления привилегированными доступами и секретами.

• AWS Secrets Manager: Сервис для управления и автоматической смены секретов, таких как API-ключи и пароли в AWS.

Computer Science

16 Dec, 10:31


Инструменты для автоматизации CI/CD с учетом безопасности

Эти инструменты интегрируют безопасность в процесс CI/CD, автоматически выявляя и устраняя уязвимости на всех этапах разработки.

• Jenkins (с плагинами безопасности): Популярный инструмент для автоматизации CI/CD, который поддерживает различные плагины для тестирования безопасности.

• GitLab CI/CD (с интеграцией безопасности): Платформа для DevOps, которая позволяет интегрировать процессы безопасности в пайплайны.

• CircleCI: Платформа для автоматизации CI/CD, которая может быть настроена для выполнения проверок безопасности.

• GitHub Actions: Инструмент для автоматизации рабочих процессов на GitHub, поддерживает интеграцию с инструментами безопасности.

Computer Science

13 Dec, 07:29


Инструменты для сканирования уязвимостей контейнеров и образов

В DevSecOps важен контроль за безопасностью контейнеров и образов, так как они широко используются в процессе CI/CD.

• Aqua Security: Платформа для безопасности контейнеров, Kubernetes и облачной инфраструктуры.

• Anchore: Инструмент для анализа и проверки Docker-образов на наличие уязвимостей.

• Trivy: Инструмент для сканирования контейнеров и облачных сервисов на наличие уязвимостей.

• Clair: Проект с открытым исходным кодом для анализа безопасности Docker-образов.

Computer Science

12 Dec, 13:59


Инструменты для мониторинга безопасности

Эти инструменты помогают отслеживать угрозы безопасности в реальном времени, а также анализировать логи и события.

• Splunk: Платформа для анализа данных и мониторинга безопасности, которая может обрабатывать огромные объемы логов в реальном времени.

• Prometheus + Grafana: Используются для мониторинга состояния приложений и инфраструктуры, включая выявление аномалий.

• ELK Stack (Elasticsearch, Logstash, Kibana): Система для сбора, хранения, анализа и визуализации логов, что помогает выявлять проблемы с безопасностью.

• Datadog: Обеспечивает мониторинг приложений и инфраструктуры, включая управление безопасностью и анализ логов.

Computer Science

12 Dec, 07:31


Инструменты для анализа инфраструктуры как кода (IaC)

Эти инструменты позволяют проверять конфигурации инфраструктуры на наличие уязвимостей до её развертывания.

• Terraform (с плагином Terraform Sentinel): Инструмент для управления инфраструктурой как кодом с возможностью интеграции политик безопасности.

• CloudFormation (с CloudFormation Guard): Инструмент AWS для работы с IaC, который позволяет проверять безопасность конфигураций.

• Checkov: Открытый инструмент для проверки безопасности конфигураций в Terraform, CloudFormation и других IaC шаблонах.

• Kics (Keeping Infrastructure as Code Secure): Открытый инструмент для сканирования шаблонов IaC на наличие уязвимостей.

Computer Science

09 Dec, 10:30


Инструменты для динамического анализа приложений (DAST)

Эти инструменты проверяют приложение в рабочем состоянии, имитируя атаки, чтобы выявить уязвимости.

• OWASP ZAP (Zed Attack Proxy): Один из самых популярных инструментов для динамического тестирования безопасности веб-приложений.

• Burp Suite: Мощный инструмент для тестирования безопасности веб-приложений, включая перехват запросов и сканирование на уязвимости.

• Acunetix: Инструмент для автоматического сканирования веб-приложений на наличие уязвимостей, таких как XSS или SQL-инъекции.

Computer Science

06 Dec, 07:30


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

Здесь, (и далее в постах) основные категории инструментов, применяемые в DevSecOps:

Инструменты для статического анализа кода (SAST)

Эти инструменты анализируют исходный код программы на наличие уязвимостей до его компиляции или выполнения.

• SonarQube: Анализирует качество кода, находит ошибки, уязвимости и плохие практики программирования.

• Checkmarx: Проводит статический анализ для выявления уязвимостей на уровне исходного кода.

• Fortify: Инструмент для анализа безопасности на разных уровнях разработки, включая статический анализ кода.

• Veracode: Обеспечивает анализ безопасности на уровне исходного кода, а также на уровне скомпилированных приложений.

Computer Science

03 Dec, 09:10


Применение формальных языков и грамматик

• Программирование: Формальные грамматики используются для определения синтаксиса языков программирования. Например, грамматика Python или C++ определяет, какие конструкции допустимы в этих языках.

• Обработка естественного языка: Формальные языки применяются в лингвистике для анализа и синтаксического разбора предложений.

• Автоматы: Формальные языки тесно связаны с теориями автоматов, такими как конечные автоматы и стековые автоматы.

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

Computer Science

02 Dec, 14:00


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

• Регулярные языки: Их можно описать с помощью регулярных выражений или конечных автоматов. Пример: язык всех строк, содержащих хотя бы одну букву "a".

• Контекстно-свободные языки: Их можно описать с помощью контекстно-свободных грамматик. Пример: язык правильно сбалансированных скобок.

• Контекстно-зависимые языки: Языки, которые требуют контекста для замены символов в строках. Эти языки могут быть описаны с помощью контекстно-зависимых грамматик.

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

Computer Science

30 Nov, 11:29


Системы контроля версий

1. Git

Тип: Распределённая система контроля версий (DVCS).
Особенности:
• Очень популярна среди разработчиков.
• Каждый разработчик имеет полную копию репозитория, что позволяет работать автономно и эффективно.
• Поддерживает ветвление (branching) и слияние (merging), что позволяет работать над несколькими функциями или исправлениями одновременно.
• Часто используется с сервисами для хостинга репозиториев, такими как GitHub, GitLab и Bitbucket.
• Инструмент командной строки, но также существует множество графических интерфейсов и интеграций с IDE.
Популярные инструменты и сервисы:
- GitHub: Онлайн-платформа для хостинга репозиториев, совместной работы и обмена кодом.
- GitLab: Платформа для разработки и хостинга репозиториев с дополнительными функциями CI/CD.
- Bitbucket: Платформа для хостинга репозиториев, разработанная компанией Atlassian, часто используется в связке с JIRA.

2. Subversion (SVN)
Тип: Централизованная система контроля версий.
Особенности:
• Все изменения хранятся на центральном сервере, и доступ к репозиторию осуществляется через этот сервер.
• Поддерживает создание веток и слияние изменений, но не так гибко, как Git.
• Простой в освоении, поэтому используется в более традиционных и крупных компаниях для сохранения простоты процесса разработки.
• Может быть полезен для проектов, где важен строгий контроль над версионностью и доступом.
Популярные инструменты:
- Apache Subversion: Основной сервер для работы с SVN.
- TortoiseSVN: Популярный клиент для SVN на Windows, который интегрируется с проводником Windows.

3. Mercurial (Hg)
Тип: Распределённая система контроля версий.
Особенности:
• Принципиально схож с Git, но интерфейс проще и более интуитивно понятен.
• Подходит для проектов, где требуется более простая настройка и меньшее количество команд, чем в Git.
• Используется в меньших командах и для меньших проектов, однако всё ещё поддерживает ветвление и слияние.
Популярные инструменты:
- Bitbucket (также поддерживает Mercurial, хотя сейчас он больше ориентирован на Git).
- TortoiseHg: Графический клиент для Mercurial.

4. CVS (Concurrent Versions System)
Тип: Централизованная система контроля версий.
Особенности:
• Одна из старейших систем контроля версий, в настоящее время используется реже из-за своей ограниченности по сравнению с более современными СКВ.
• Хранит все данные на центральном сервере, и доступ к изменениям осуществляется через него.
• Меньше поддерживает сложные операции с ветвлением и слиянием по сравнению с Git или SVN.

5. Perforce (Helix Core)
Тип: Централизованная система контроля версий.
Особенности:
• Применяется в больших проектах с большим количеством данных, таких как видеоигры или большие программные продукты.
• Быстрая и масштабируемая, поддерживает работу с большими бинарными файлами, что делает её популярной в индустрии разработки игр.
• Предоставляет возможности для централизованного контроля версий с высокой производительностью.

6. Bazaar (bzr)
Тип: Распределённая система контроля версий.
Особенности:
• Разработана компанией Canonical (создатель Ubuntu) для работы с проектами с открытым исходным кодом.
• Поддерживает как распределённый, так и централизованный режим работы.
• Хотя она менее популярна, чем Git, её можно интегрировать с другими системами контроля версий.

7. Fossil
Тип: Распределённая система контроля версий.
Особенности:
• Меньше известна, но обладает встроенной поддержкой веб-интерфейса, отслеживания ошибок, обсуждений и управления проектом.
• Простота и гибкость делают её интересной для небольших проектов и команд.

Computer Science

29 Nov, 13:59


7. Проверка строки на наличие только цифр
Регулярное выражение: ^\d+$
Объяснение:
^ — начало строки.
\d+ — одна или более цифр.
$ — конец строки.
Пример:
let regex = /^\d+$/;
let str = "12345";
console.log(regex.test(str)); // true


8. Поиск всех URL в тексте
Регулярное выражение: \bhttps?:\/\/\S+\b
Объяснение:
https? — соответствует "http" или "https".
:\/\/ — соответствует "://".
\S+ — соответствует одному или более не пробельным символам (весь URL).
Пример:
let regex = /\bhttps?:\/\/\S+\b/g;
let text = "Посетите сайт https://example.com или http://test.com";
console.log(text.match(regex)); // ["https://example.com", "http://test.com"]

Computer Science

29 Nov, 10:00


4. Замена всех пробелов на дефисы
Регулярное выражение: \s+
Объяснение:
\s — соответствует любому пробельному символу (пробел, табуляция, новая строка и т.д.).
+ — означает "один или более".
Пример:
let regex = /\s+/g;
let text = "Этот текст с пробелами";
let result = text.replace(regex, "-");
console.log(result); // "Этот-текст-с-пробелами"


5. Проверка строки на пустое значение
Регулярное выражение: ^\s*$
Объяснение:
^ — начало строки.
\s* — соответствует нулю или более пробельным символам.
$ — конец строки.
Пример:
let regex = /^\s*$/;
let str = " "; // строка из пробелов
console.log(regex.test(str)); // true


6. Поиск даты в формате "дд/мм/гггг"
Регулярное выражение: \b\d{2}/\d{2}/\d{4}\b
Объяснение:
\b — граница слова.
\d{2} — точно 2 цифры (для дня и месяца).
/ — слэш между числами.
\d{4} — точно 4 цифры для года.
\b — граница слова.
Пример:
let regex = /\b\d{2}\/\d{2}\/\d{4}\b/;
let str = "Дата рождения: 25/12/1999.";
console.log(str.match(regex)); // ["25/12/1999"]

Computer Science

28 Nov, 10:59


Несколько примеров регулярных выражений (RegExp) для различных задач:

1. Поиск чисел в строке
Регулярное выражение: \d+
Объяснение: \d означает "цифра", а + — означает "одна или более цифры".
Пример:
let regex = /\d+/;
let str = "В этом тексте есть числа 123 и 456.";
console.log(str.match(regex)); // ["123"]

Это регулярное выражение найдет первое число в строке.

2. Поиск адреса электронной почты
Регулярное выражение: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Объяснение:
^ и $ означают начало и конец строки соответственно.
[a-zA-Z0-9._%+-] соответствует допустимым символам в части до знака @.
[a-zA-Z0-9.-] соответствует символам в доменной части (после знака @).
\. соответствует точке (не забудьте экранировать точку).
{2,} — обозначает, что доменная зона (например, .com) должна состоять как минимум из двух символов.
Пример:
let regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
let email = "[email protected]";
console.log(regex.test(email)); // true


3. Поиск всех слов, начинающихся с буквы "a" (или "A")
Регулярное выражение: \b[aA]\w*\b
Объяснение:
\b — граница слова.
[aA] — соответствует либо букве "a", либо "A".
\w* — соответствует нулю или более буквенно-цифровым символам.
\b — снова граница слова.
Пример:
let regex = /\b[aA]\w*\b/g;
let text = "Апельсин и ананас - оба фрукты.";
console.log(text.match(regex)); // ["Апельсин", "ананас"]

Computer Science

28 Nov, 08:59


Erid: 2VtzqubHjSF
⚡️Всероссийский Хакатон ФИЦ 2024

🚀Попробуйте себя в одном из предложенных кейсов:

Кейс №2. Выявление трендов в сфере бухгалтерского учета, поиск «болей» бухгалтера: разработать алгоритм для поиска новых трендов и проблем бухгалтера.

Кейс №8. Формирование фото и видео контента с использованием нейросетей на основе биографии и фото персоны.

Кейс №10. Цифровая карта подземных коммуникаций с использованием Cesium.

Кейс №12. Цифровой сервис для ведения реестра зеленых насаждений города Москвы.

Кейс №17. Стартовый (профилактический) комплаенс: предотвращение рисков с помощью AI.

Кейс №19. Parallax-scroll лендинг для сайта Insidium.

И другие 19 кейсов смотрите на сайте: https://фиц2024.рф/hackathon

Хакатон пройдет в 2 этапа: Отборочный этап в Онлайн, Финал в Офлайн.

🏆Призовой фонд: 6 000 000 руб.
🔥Дедлайн регистрации: 28 ноября, 23:59
📅Даты отборочного этапа: 29 ноября - 2 декабря
🦾Даты финала: 3 - 4 декабря

Зарегистрируйтесь для участия в хакатоне: https://фиц2024.рф/hackathon

Реклама: ООО «Акселератор Возможностей» ИНН: 9704005146

Computer Science

28 Nov, 07:30


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

Системное ПО: Это программное обеспечение, которое обеспечивает основную функциональность компьютерной системы. К нему относятся операционные системы (Windows, macOS, Linux), драйверы, виртуальные машины и т.д.

Прикладное ПО: Это программное обеспечение, разработанное для выполнения определенных задач или решения конкретных проблем. Например, текстовые редакторы, графические редакторы, бухгалтерские программы и т.д.

Бизнес-приложения: Это программное обеспечение, разработанное для автоматизации бизнес-процессов и управления организацией. Включает в себя системы управления клиентскими отношениями (CRM), системы управления проектами (Project Management System), системы управления ресурсами предприятия (ERP) и т.д.

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

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

Open-source (с открытым исходным кодом): Это программное обеспечение, исходный код которого доступен для общественности. Оно позволяет пользователям просматривать, изменять и распространять программу согласно лицензии.

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

Computer Science

27 Nov, 13:00


Продолжая о Методах кодирования символов

EBCDIC (Extended Binary Coded Decimal Interchange Code)
Это старый кодировочный стандарт, используемый в основном на мейнфреймах IBM. Он отличается от ASCII, используя 8 бит для представления символа. EBCDIC широко использовался на старых компьютерах, но в современном мире его применяют редко.

Shift JIS (для японского языка)
Это кодировка, используемая для японских текстов, которая сочетает в себе элементы ASCII и двухбайтовое кодирование для японских символов. Shift JIS эффективен для представления японских кандзи и кана, но может вызвать проблемы с совместимостью с другими кодировками.

KOI8-R (для русского языка)
Это кодировка, широко используемая в России для представления символов кириллицы. Она использует 8 бит для кодирования символов и включает в себя все буквы русского алфавита, а также некоторые специальные символы.
Широко использовалась в советское время и в России до появления Unicode.

Windows-1251 (для русского языка)
Это кодировка, разработанная Microsoft для представления кириллицы в операционных системах Windows. Она является расширением ASCII и использует 8 бит для кодирования символов, включающих буквы русского алфавита и другие символы.

Computer Science

26 Nov, 08:36


Методы кодирования символов указывают на способы представления символов в компьютерных системах.

Некоторые из наиболее распространенных:

ASCII (American Standard Code for Information Interchange): Это стандартное кодирование символов для компьютеров, основанное на английском алфавите. Он представляет каждый символ одним байтом (8 битами) и может быть использован для представления 128 различных символов.

Unicode: Это международный стандарт для кодирования символов. Unicode расширяет ASCII, чтобы включить символы различных языков и символы, которые не входят в английский алфавит. Unicode может быть представлен различными способами, такими как UTF-8, UTF-16 и UTF-32, которые используют разное количество байтов для кодирования символов.

UTF-8 (Unicode Transformation Format 8-bit): Это переменная длина кодирование символов Unicode, которое использует от 1 до 4 байтов для представления символов в зависимости от их кодового значения. UTF-8 обычно используется в Интернете и в большинстве современных компьютерных систем, так как он эффективно представляет широкий набор символов и поддерживает обратную совместимость с ASCII.

UTF-16: Это кодирование символов Unicode с использованием 16-битных блоков данных. Оно может быть использовано для представления всех символов Unicode, но требует больше памяти, чем UTF-8.

ISO-8859: Это набор стандартных кодировок символов, разработанных Международной организацией по стандартизации. Каждая кодировка ISO-8859 предназначена для определенного набора символов, таких как ISO-8859-1 для латинского алфавита.

Computer Science

25 Nov, 07:29


Инструменты для тестирования
Многие ошибки можно выявить с помощью юнит-тестов и тестов интеграции:

• JUnit — фреймворк для написания и выполнения тестов в Java.
• pytest — популярный фреймворк для тестирования на Python.
• Mocha — фреймворк для тестирования в Node.js.

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

• SonarQube — система для статического анализа кода, которая может помогать выявлять ошибки и дефекты в коде на разных этапах разработки.
• Coverity — инструмент для статического анализа кода с возможностями для обнаружения багов и уязвимостей.

Дебаггеры для веб-разработки
Для отладки веб-приложений существуют инструменты, которые помогают анализировать фронтенд и бэкенд:

• Chrome DevTools — встроенные инструменты для отладки веб-страниц в Google Chrome, с возможностью пошагового выполнения JavaScript, анализа DOM, сетевых запросов и работы с памятью.
• Firefox Developer Tools — аналогичные инструменты для браузера Firefox.
• Postman — инструмент для тестирования и отладки API-запросов, используемый для работы с RESTful сервисами.

Computer Science

23 Nov, 14:05


Логирование
Логирование позволяет отслеживать выполнение программы и выявлять ошибки, не останавливая код:

• Log4j — библиотека для логирования в Java, позволяет отслеживать выполнение программы и выводить сообщения об ошибках.
• Python logging — встроенная библиотека для Python, позволяет записывать информацию о работе программы в файл или выводить её в консоль.
• Winston — популярная библиотека для логирования в Node.js.

Профайлеры
Профайлеры помогают анализировать производительность кода и находить узкие места:

• cProfile — профайлер для Python, позволяет анализировать время выполнения функций и находить самые ресурсоёмкие участки.
• gProfiler — используется для анализа производительности кода на C и C++.
• VisualVM — инструмент для анализа производительности приложений на Java.

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

• Valgrind — набор инструментов для анализа памяти и выявления утечек памяти в приложениях на C и C++.
• Memory Profiler — инструмент для анализа использования памяти в Python-программах.

Computer Science

23 Nov, 11:59


Erid: 2Vtzqv6YtFZ

⚡️Всероссийский Хакатон ФИЦ 2024

🚀Попробуйте себя в одном из предложенных кейсов:
1. Система контроля и управления доступом:
- Разработка системы контроля и управления доступом в реальном времени. Система будет включать API для управления сотрудниками, точками доступа и интеграцию с системой видеонаблюдения.

2. Parallax-scroll лендинг для сайта Insidium:
- Разработка одностраничного приложения (SPA) с административной панелью, позволяющей редактировать контент лендинг-страницы.

3. Цифровой сервис для ведения реестра зеленых насаждений города Москвы:
- Разработать сервис по работе с панорамами города Москва c возможностью разметки и подключению существующих open-source моделей для решения задач.

4. Цифровой помощник юриста:
- Разработка веб-сервиса для автоматической генерации различных типовых юридических документов на основе данных, введенных пользователем, с возможностью последующей правки сгенерированного документа.

И другие 19 кейсов смотрите на сайте: https://фиц2024.рф/hackathon

Хакатон пройдет в 2 этапа: Отборочный этап в Онлайн, Финал в Офлайн.

🏆Призовой фонд: 6 000 000 руб.
🔥Дедлайн регистрации: 26 ноября, 23:59
📅Даты отборочного этапа: 29 ноября - 2 декабря
🦾Даты финала: 3 - 4 декабря

Зарегистрируйтесь для участия в хакатоне: https://фиц2024.рф/hackathon

Реклама: ООО «Акселератор Возможностей» ИНН: 9704005146

Computer Science

22 Nov, 10:29


Интегрированные средства отладки
Многие современные интегрированные среды разработки включают встроенные инструменты для отладки:

Visual Studioпозволяет шагать по коду, просматривать значения переменных, управлять точками останова и отслеживать выполнение программы.
IntelliJ IDEAпопулярная IDE для Java и других языков, с мощными средствами отладки, включая поддержку работы с удалёнными приложениями.
PyCharmIDE для Python с мощной системой отладки, включая графический интерфейс для пошагового выполнения кода.
Eclipse — поддерживает отладку для Java и других языков, предлагает возможность анализа переменных и профилирования кода.

Xcodeинструмент отладки для разработки под macOS и iOS, с поддержкой анализа производительности и памяти.

Отладчики командной строки
Некоторые языки программирования предоставляют отладчики, которые работают в командной строке:

• GDB (GNU Debugger) — отладчик для C/C++ и других языков, позволяет пошагово выполнять код, управлять точками останова, анализировать переменные.
• PDB — встроенный отладчик для Python, который позволяет запускать код пошагово, проверять значения переменных, выполнять выражения.

Инструменты для удаленной отладки
Иногда код выполняется на удалённой машине или в контейнере, и для таких случаев существуют инструменты удалённой отладки:

• VSCode Remote Debugging позволяет подключиться к удалённым серверам и отлаживать код, работающий на этих серверах.
• Docker + Visual Studio позволяет отлаживать приложения, работающие внутри контейнеров Docker.

Computer Science

21 Nov, 14:01


Типы API

В архитектуре приложений используются различные типы API:

‒ WebAPI. Предназначены для предоставления функциональных возможностей веб-сервисов через Интернет, позволяя разработчикам получать доступ к таким сервисам, как данные о погоде, карты, платформы социальных сетей и многое другое, и использовать их в своих проектах;

‒ Библиотечные, или API фреймворков. Предоставляются языками программирования, фреймворками или библиотеками и предлагают готовые функции и классы для упрощения разработки программного обеспечения.
Примеры включают стандартную библиотеку Python, Java API, jQuery API и т. д.;

‒ API операционной системы. Позволяют разработчикам взаимодействовать с базовой ОС, получая доступ к системным ресурсам, управлению файлами, сетевым операциям и многому другому;

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

Computer Science

21 Nov, 11:02


Causal inference (причинно-следственный анализ) — область статистики и науки о данных, направленная на определение причинно-следственных связей между переменными. В отличие от корреляции, которая лишь описывает взаимосвязь между переменными, причинно-следственный анализ пытается понять, как одно явление (причина) влияет на другое (следствие).

Ключевые аспекты causal inference:

1. Причинность vs. Корреляция: Корреляция может указывать на то, что две переменные изменяются вместе, но не обязательно одна вызывает изменение другой. Например, между количеством мороженого, продаваемого летом, и количеством утоплений существует сильная корреляция, но это не означает, что продажа мороженого вызывает утопления. Причинно-следственный анализ, напротив, пытается установить, действительно ли одна переменная оказывает влияние на другую.

2. Методы:
Рандомизированные контролируемые исследования: Золотой стандарт причинно-следственного анализа. В таких исследованиях случайным образом распределяются участники между группами (например, контрольной и экспериментальной), чтобы исключить влияние других переменных.
• Наблюдательные исследования: В реальной жизни невозможно всегда проводить рандомизированные исследования. Поэтому в наблюдательных данных исследуются статистические методы, такие как:
- Модели регрессии (например, линейная регрессия),
- Инструментальные переменные (метод для учета скрытых факторов),
- Разница в разницах (differences-in-differences),
- Сетевые модели (например, методы на графах).
• Рамки контрфактических результатов (Potential Outcomes Framework): Эта концепция была предложена Дональдом Рубином и является основой для анализа причинности. Здесь рассматриваются контрфактические исходы — то, что бы случилось, если бы события развивались по-другому.

3. Основные проблемы:
• Скрытые переменные (confounding): Когда неучтенные переменные влияют и на причину, и на следствие, что приводит к ложным выводам о причинности.
• Обратная причинность: Ситуация, когда кажется, что одна переменная влияет на другую, но на самом деле связь происходит в обратном порядке.
• Предсказуемость: Даже если мы понимаем причинность, предсказать будущие события всегда сложно, особенно в сложных системах.

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

Computer Science

19 Nov, 10:00


Флэш-память — тип энергонезависимой памяти, которая позволяет записывать и стирать данные в блоках. Используется в различных устройствах, таких как USB-накопители, карты памяти, SSD-диски и многие другие.

Принцип работы флэш-памяти

Типы флэш-памяти:
• NAND: Более распространенная и используемая в современных устройствах (например, в SSD, смартфонах, флэш-картах). Отличается высокой плотностью хранения данных и быстрым временем записи.
• NOR: Используется реже, имеет более высокую скорость чтения и прямой доступ к данным, что делает её подходящей для использования в устройствах с потребностью в частом чтении данных (например, в прошивках устройств).

Технология хранения:
• Флэш-память использует клетки, которые хранят информацию в виде зарядов. Каждая клетка представляет собой транзистор, и наличие или отсутствие заряда в ячейке определяет, хранится ли в ней "0" или "1".
• В отличие от традиционных жестких дисков, в которых данные записываются на вращающиеся пластины, флэш-память не имеет движущихся частей и использует электрический заряд для записи и хранения данных.

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

Ограничения по циклам записи: Флэш-память имеет ограничение по количеству циклов записи и стирания на каждую ячейку (обычно несколько тысяч циклов). Это связано с тем, что процесс стирания и записи вызывает износ ячеек.

Computer Science

18 Nov, 10:29


Оптимизация со стороны компилятора — процесс улучшения производительности программы путём преобразования её исходного кода, что позволяет ускорить выполнение, снизить потребление памяти и уменьшить размер программы.

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

Виды оптимизаций:

1. Удаление неиспользуемого кода (Dead Code Elimination): Компилятор может удалить части программы, которые не влияют на результат или не используются, что позволяет уменьшить размер и повысить производительность.
Пример: До:
int x = 5;
int y = 10;
y = y + 2;
После: Компилятор удаляет переменную x, так как она не используется в программе.

2. Инлайнинг функций (Function Inlining): Компилятор заменяет вызовы коротких функций на их тело, что устраняет накладные расходы на вызов и может ускорить выполнение.
Пример: До:
int add(int a, int b) { return a + b; }
int result = add(2, 3);
После: Компилятор заменяет вызов add(2, 3) на 2 + 3.

3. Оптимизация циклов (Loop Optimizations): Компилятор может переместить вычисления, которые не изменяются в теле цикла, за пределы цикла, или применить другие методы, чтобы улучшить производительность.
Пример: До:
for (int i = 0; i < n; i++) {
int x = 5;
printf("%d\n", x + i);
}
После: Компилятор выносит int x = 5; за пределы цикла, так как x не меняется в ходе выполнения цикла.

4. Константные выражения (Constant Folding): Компилятор вычисляет значения константных выражений на этапе компиляции, чтобы избежать их повторных вычислений во время исполнения программы.
Пример: До:
int result = 2 * 3 + 5;
После: Компилятор заменяет 2 * 3 + 5 на 11 на этапе компиляции.

5. Реорганизация инструкций (Instruction Scheduling): На уровне машинного кода компилятор может реорганизовать инструкции для оптимизации работы процессора и уменьшения задержек, связанных с зависимостями между инструкциями.
Пример: До:
LOAD R1, 0 ; R1 = 0
ADD R1, R2 ; R1 = R1 + R2
STORE R1, 0
После: Компилятор может реорганизовать инструкции, чтобы минимизировать время ожидания данных и повысить общую производительность.
_______________________________
Инструменты оптимизации:
Многие современные компиляторы предоставляют различные флаги для активации оптимизаций. Например, в GCC и Clang есть следующие уровни оптимизаций:
-O1: Базовые оптимизации, направленные на улучшение производительности без значительных затрат на время компиляции.
-O2: Более агрессивные оптимизации, включая улучшения в производительности и уменьшение размера.
-O3: Максимальная агрессивность оптимизаций, включая распараллеливание и инлайнинг.
-Os: Оптимизация под размер программы, что полезно для встроенных систем.
-Ofast: Включает все возможные оптимизации, но может использовать небезопасные подходы (например, позволяет нарушать стандартные гарантии).

Computer Science

15 Nov, 10:45


ext (Extended File System) — семейство файловых систем, используемых в ОС Linux. Оно включает несколько версий, каждая из которых улучшала предыдущую в плане производительности и функциональности.

Основные версии:


ext2 — выпущенная в 1993 году. Не поддерживала журналирование, что означало, что при сбое системы было сложно восстановить данные. Использовалась в основном на старых системах.

ext3 — улучшенная версия ext2, появившаяся в 2001 году. Добавила поддержку журналирования, что значительно повысило устойчивость к сбоям и улучшило время восстановления после ошибок.

ext4 — самая современная и популярная версия, выпущенная в 2008 году. Она улучшила производительность, поддерживает большие объемы данных (до 1 эксабайта) и файлы до 16 терабайт, а также предлагает улучшенные механизмы распределения пространства и улучшенную проверку на наличие ошибок.

Особенности:
• Поддержка больших томов и файлов (особенно в ext4).
• Журналирование (начиная с ext3), что позволяет эффективно восстанавливать данные после сбоя.
• Хорошая совместимость с Linux и стабильность работы на различных устройствах.
• Широко используется в большинстве дистрибутивов Linux.

ext4 является наиболее часто используемой файловой системой для Linux-систем на сегодняшний день.

Computer Science

14 Nov, 09:10


XFS — высокопроизводительная журналируемая файловая система, изначально разработанная для операционной системы IRIX, а затем портированная на Linux. Предназначена для работы с большими объемами данных и большими файлами.

Основные особенности:
• Отлично работает с большими файлами и большими томами.
• Повышает надежность, предотвращая повреждения данных при сбоях.
• Поддержка файловых систем до 8 эксабайт.
• Используется для экономии места на диске.
• Подходит для серверных решений и высокопроизводительных вычислений.

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

Преимущества:
• Высокая скорость при работе с большими объемами данных.
• Надежность благодаря журналированию.
• Хорошая масштабируемость и эффективность при параллельных операциях.

Computer Science

13 Nov, 12:00


Что такое сборщик мусора в программировании?

Когда мы пишем код, мы постоянно объявляем новые переменные, под которые выделяется кусок памяти.

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

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

Автоматический режим называется сборкой мусора. Это такая отдельная мини-программа внутри основной программы, которая периодически пробегает по объектам и переменным в коде и смотрит, нужны они или нет. Если нет — сборщик мусора сам удаляет переменную и освобождает память.

Computer Science

12 Nov, 14:30


NTFS (New Technology File System) — файловая система, разработанная Microsoft для ОС Windows. Была представлена в 1993 году с Windows NT и до сих пор используется в современных версиях Windows.

Особенности NTFS:

• Позволяет работать с большими разделами и файлами (до 16 эксабайт).
• Поддерживает разрешения на доступ к файлам и папкам, шифрование (EFS), а также журналирование для восстановления данных в случае сбоя системы.
• Оптимизирована для работы с большими объемами данных и обеспечивает высокую скорость чтения/записи.
• Позволяет хранить дополнительные данные о файлах (например, версии, атрибуты и т. д.).
• Позволяет ограничивать пространство для пользователей и групп.

Computer Science

12 Nov, 10:02


exFAT (Extended File Allocation Table) — файловая система, разработанная компанией Microsoft в 2006 году, как улучшенная версия FAT32, с поддержкой больших объёмов хранения и более крупных файлов. Была предназначена для использования на съёмных носителях (например, флешках, внешних жёстких дисках и картах памяти), обеспечивая большую совместимость между операционными системами.

Основные особенности exFAT:

1. exFAT может работать с файлами размером более 4 ГБ, в отличие от FAT32, которая ограничена этим пределом. Это делает exFAT удобной для хранения видеофайлов высокой четкости, больших баз данных и других крупных объектов.

2. exFAT может работать с устройствами объёмом до 128 ПБ (петабайт), что значительно превышает ограничения FAT32 (до 2 ТБ).

3. exFAT поддерживается множеством операционных систем, включая:
• Windows (начиная с Windows XP, с дополнением для более ранних версий).
• macOS (начиная с Mac OS X 10.6.5).
• Множество устройств и электроники, таких как камеры, игровые приставки, телевизоры и др.

4. exFAT оптимизирована для использования на флеш-накопителях и других устройствах хранения с высокой производительностью.

5. В отличие от NTFS и других более сложных файловых систем, exFAT не использует журналирование (то есть запись изменений данных перед их реальным выполнением), что делает её проще, но в то же время менее защищённой от сбоев при внезапном отключении питания или других проблемах.

6. exFAT использует меньшие системные ресурсы по сравнению с более сложными файловыми системами, (например NTFS), что может быть полезно для ограниченных устройств или для операционных систем с небольшим объёмом оперативной памяти.

Computer Science

30 Oct, 13:59


Группы, кольца, поля и булевы алгебры — это основные структуры в абстрактной алгебре.

Кратко про каждую из них:

Группа
Это множество 𝐺 с операцией , которая удовлетворяет четырем аксиомам:
1. Замкнутость: 𝑎, 𝑏 ∈ 𝐺 ⇒ 𝑎∗𝑏 ∈ 𝐺
2. Ассоциативность: (𝑎∗𝑏)∗𝑐 = 𝑎∗(𝑏∗𝑐) для всех 𝑎, 𝑏, 𝑐 ∈ 𝐺
3. Наличие единичного элемента: существует элемент 𝑒 ∈ 𝐺, такой что 𝑒∗𝑎 = 𝑎∗𝑒 = 𝑎 для всех 𝑎 ∈ 𝐺
4. Наличие обратного элемента: для каждого 𝑎 ∈ 𝐺 существует 𝑏 ∈ 𝐺 такой, что 𝑎∗𝑏 = 𝑏∗𝑎 = 𝑒

Кольцо
Это множество 𝑅 с двумя операциями + и , которые удовлетворяют следующим условиям:
1. (𝑅,+) — абелева группа.
2. Умножение ассоциативно: 𝑎⋅(𝑏⋅𝑐) = (𝑎⋅𝑏)⋅𝑐.
3. Умножение дистрибутивно относительно сложения: 𝑎⋅(𝑏+𝑐) = 𝑎⋅𝑏 + 𝑎⋅𝑐 и (𝑎+𝑏) ⋅ 𝑐 = 𝑎⋅𝑐+𝑏⋅𝑐.
Некоторые кольца имеют единичный элемент (не нулевой), а некоторые могут быть коммутативными (где 𝑎⋅𝑏 = 𝑏⋅𝑎).

Поле
Поле — это кольцо 𝐹 с дополнительными свойствами:
1. (𝐹∖{0},⋅) — абелева группа (каждый ненулевой элемент имеет обратный).
2. Умножение в поле коммутативно.
3. Все элементы поля, кроме нуля, имеют мультипликативный обратный.
Примеры полей: рациональные числа, действительные числа, комплексные числа.

Булевы алгебры
Булева алгебра — это структура, состоящая из множества 𝐵, элементов которого можно интерпретировать как логические значения (истина и ложь), и операций (конъюнкция), (дизъюнкция) и ¬ (отрицание), которые удовлетворяют следующим аксиомам:
1. Ассоциативность: 𝑎∧(𝑏∧𝑐) = (𝑎∧𝑏)∧𝑐 и аналогично для .
2. Коммутативность: 𝑎∧𝑏 = 𝑏∧𝑎 и аналогично для .
3. Дистрибутивность: 𝑎∧(𝑏∨𝑐) = (𝑎∧𝑏) ∨ (𝑎∧𝑐).
4. Наличие нейтральных элементов: существуют элементы 0 и 1, такие что 𝑎∧1 = 𝑎 и 𝑎∨0 = 𝑎.
5. Закон исключенного третьего: для любого 𝑎 a выполняется 𝑎∨¬𝑎 = 1.

Computer Science

22 Oct, 11:01


Типы портов

1. Физические порты: Это реальные разъемы на компьютере, такие как USB, HDMI, Ethernet и т. д. Они используются для подключения устройств.

2. Логические порты: Это виртуальные интерфейсы, используемые для связи между программами. Они представляют собой номера в диапазоне от 0 до 65535 и классифицируются следующим образом:

• Порты 0 - 1023: Зарезервированные порты (well-known ports). Используются для стандартных протоколов, таких как HTTP (80), HTTPS (443), FTP (21) и другие.
• Порты 1024 - 49151: Региональные порты (registered ports). Используются для приложений, которые не входят в список стандартных, но все же распространены.
• Порты 49152 - 65535: Динамические или частные порты. Обычно используются для временных подключений, когда приложения назначают порты динамически.

Примеры использования
• HTTP и HTTPS: Порты 80 и 443 соответственно используются для веб-трафика.
• FTP: Порт 21 используется для передачи файлов.
• SSH: Порт 22 используется для безопасного удаленного доступа к серверам.
• SMTP: Порт 25 используется для отправки электронной почты.

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

Защита портов
Это можно сделать с помощью:
• Фаерволов: Они помогают контролировать доступ к определенным портам.
• Настройки маршрутизатора: Чтобы ограничить доступ к определенным портам извне.
• VPN: Шифрование трафика и скрытие активности.

Computer Science

17 Oct, 11:04


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

Основные стандарты, такие как UPC (Universal Product Code) и EAN (European Article Number), позволяют однозначно идентифицировать продукт. Когда штрих-код сканируется, лазерный сканер считывает отражение света, преобразуя его в последовательность нулей и единиц. Эти данные отправляются в базу, где происходит сопоставление с информацией о товаре, такой как цена и описание.

Стандарты штрих-кодов различаются по формату, области применения и количеству закодированной информации. UPC, например, используется в основном в США и Канаде и состоит из 12 цифр, в то время как EAN, более распространенный в Европе, может иметь 13 цифр. ISBN (International Standard Book Number) применяется для книг и имеет уникальный формат. QR-коды, хотя и не являются традиционными штрих-кодами, могут содержать гораздо больше данных, включая ссылки и текст.

Computer Science

17 Oct, 08:59


Хотите узнать, как реализовать идеальную хэш-таблицу, которая работает за О(L) время?

Ждем вас на открытом вебинаре 21 октября в 20:00 мск, где мы разберем:

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

👨‍💻🛠👨🏻‍💻 Урок для Junior-разработчиков на любых языках программирования.

🚀 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

🆓 Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение!

🔴 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/AZZbx/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Computer Science

09 Oct, 12:01


EXE (Windows Executable)

Структура:
• DOS Header: Первые 64 байта, служат для обратной совместимости с DOS. Содержит метку "MZ".
• PE Header: Заголовок Portable Executable, содержащий информацию о типе файла, секциях, размерах, точках входа и т. д.
• Секции:
.text: Код программы.
.data: Глобальные и статические переменные.
.rsrc: Ресурсы, такие как изображения и строки.
• Import Table: Содержит список используемых внешних функций и библиотек.

Использование:
• EXE файлы запускаются через двойной щелчок или через командную строку Windows.
• Поддерживает графические интерфейсы и консольные приложения.


ELF (Executable and Linkable Format)

Структура:
• ELF Header: Содержит информацию о типе файла (исполняемый, объектный и т. д.), архитектуре, размере заголовка и других метаданных.
• Program Header Table: Описывает сегменты, которые будут загружены в память.
• Section Header Table: Описывает секции файла (например, .text, .data, .bss и другие).
• Секции:
.text: Код программы.
.data: Инициализированные данные.
.bss: Неинициализированные данные.
.dynamic: Динамическая информация для линковщиков.

Использование:
• ELF файлы запускаются через терминал в UNIX-подобных системах или через графические оболочки.
• Поддерживает динамическую линковку, позволяя использовать библиотеки во время выполнения.

Ключевые различия:

• EXE предназначен для Windows, ELF — для Linux и других UNIX-подобных систем.
• ELF более модульный и гибкий, поддерживает динамическую линковку и различные типы секций.
• ELF включает больше информации о типах данных и секциях, что упрощает работу компиляторов и отладчиков.

Computer Science

09 Oct, 09:01


Хотите узнать, как превратить массив в пирамиду и ускорить сортировку данных?

Ждем вас на бесплатном вебинаре 14 октября в 20:00 мск, где мы разберем:

- как реализовать алгоритм сортировки выбором с линейной сложностью;
- как превратить массив в пирамиду (кучу) для быстрого доступа к максимальному элементу;
- как создать алгоритм пирамидальной сортировки с квазилинейной сложностью — О(N log N);
- визуальные примеры работы алгоритма на конкретных числах.

🚀 Спикер Евгений Волосатов — программист баз данных и преподаватель с огромным и разнообразным опытом, автор статей и учебных программ по C#, Java, PHP.

Встречаемся в преддверии старта курса «Алгоритмы и структуры данных». Все участники вебинара получат специальную цену на обучение!

Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://otus.pw/BzCQ/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Computer Science

03 Oct, 12:20


Wi-Fi обычно работает на двух основных частотах: 2.4 ГГц и 5 ГГц.

• 2.4 ГГц
Преимущества: Лучшее покрытие и большая дальность действия.
Недостатки: Более загруженная частота, подвержена помехам от других устройств (например, микроволновок, беспроводных телефонов).

• 5 ГГц
Преимущества: Более высокая скорость передачи данных и меньшее количество помех.
Недостатки: Меньшее покрытие и более слабое проникновение через стены.

Соответственно, если нужна скорость, лучше выбрать 5 ГГц, а для большого покрытия — 2.4 ГГц.

Computer Science

30 Sep, 10:00


HDD vs SSD

Принцип работы HDD и SSD кардинально отличается. Классические HDD состоят из одного или нескольких магнитных дисков и считывающих головок. SSD, наоборот, состоит из большого количества отдельных чипов Flash-памяти, которые встроены в диск по тому же принципу, что и в USB-флешках.

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

Но говорить, что SSD во всем превосходят HDD, тоже неверно. HDD все еще гораздо дешевле SSD, а также жесткие диски предлагают гораздо больше места для хранения данных. Здесь возможны объемы и 10, и 20 Тбайт, в то время как потребительские SSD в большинстве своем пока ограничиваются 8 Тбайт.

Computer Science

29 Sep, 11:10


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

Существует несколько форматов сериализации, каждый со своими сильными и слабыми сторонами:

1. JSON (JavaScript Object Notation)
JSON - легковесный формат, который широко используется в веб-приложениях. Он легко парсится и генерируется. Поддерживается большинством языков программирования.
Пример: {"имя": "Алиса", "возраст": 25}

2. XML (Extensible Markup Language)
XML - это язык разметки, который используется для хранения и передачи данных. Он подробный, но обеспечивает высокую степень гибкости и настройки.
Пример: <person><имя>Алиса</имя><возраст>25</возраст></person>

3. CSV (Comma Separated Values)
CSV - это текстовый формат, который используется для хранения табличных данных. Он прост и легко парсится, но не поддерживает сложные структуры данных.
Пример: имя,возраст\nАлиса,25\n

4. Avro
Бинарный формат сериализации, который используется в больших данных и распределенных системах. Он компактен и эффективен, но требует определения схемы заранее.

5. Protocol Buffers
Бинарный формат сериализации, разработанный Google. Он компактен и эффективен, и обеспечивает высокую степень гибкости и настройки.

6. YAML (YAML Ain't Markup Language)
Человеко-читаемый формат, который используется для конфигурационных файлов и обмена данными. Он легко читается и пишется, но может быть подробным.
Пример: имя: Алиса\nвозраст: 25

7. MessagePack
Бинарный формат сериализации, который подобен JSON, но более компактен и эффективен.

Computer Science

28 Sep, 13:00


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

Bluetooth 1.0: Первый стандарт Bluetooth, выпущенный в 1998 году, который ввел основные принципы технологии Bluetooth.

Bluetooth 1.1: 2001 год. Стандарт улучшил скорость передачи данных и добавил поддержку нешифрованной передачи данных.

Bluetooth 1.2: 2003 год. Стандарт ввел адаптивное скачкообразное хоппинг, которое улучшило устойчивость к радиопомехам.

Bluetooth 2.0: 2004 год. Стандарт ввел Улучшенный режим передачи данных (EDR), который увеличил скорость передачи данных до 3 Мбит/с.

Bluetooth 2.1: 2007 год. Стандарт ввел Безопасное простое спаривание, которое улучшило процесс спаривания между устройствами.

Bluetooth 3.0: 2009 год. Стандарт ввел Высокоскоростную передачу данных (HS), которая позволила передавать данные со скоростью до 24 Мбит/с.

Bluetooth 4.0: 2010 год. Стандарт ввел Технологию низкого энергопотребления (LE), которая уменьшила потребление энергии и позволила устройствам работать в течение лет на одном аккумуляторе.

Bluetooth 4.1: 2013 год. Стандарт улучшил скорость передачи данных и ввел поддержку устройств Bluetooth Smart и Smart Ready.

Bluetooth 4.2: 2014 год. Стандарт ввел Подключение к интернету по протоколу IP, которое позволило устройствам подключаться напрямую к интернету.

Bluetooth 5.0: 2016 год. Стандарт учетверил диапазон устройств Bluetooth, удвоил скорость и увеличил емкость вещания.

Bluetooth 5.1: 2020 год. Стандарт ввел улучшения в направлении нахождения и услугах определения местоположения.

Computer Science

27 Sep, 15:10


Краткие характеристики сетевых протоколов

TCP (Transmission Control Protocol):
• Обеспечивает надежную передачу данных через сетевые протоколы.
• Устанавливает соединение (TCP handshake) перед передачей данных.
• Гарантирует доставку данных в правильном порядке и без ошибок.
• Используется для передачи данных в приложениях, требующих надежности, таких как веб-браузеры и клиенты электронной почты.

UDP (User Datagram Protocol):
• Протокол без соединения, не гарантирует доставку данных.
• Быстрый и легкий протокол, используемый для передачи небольших пакетов данных.
• Часто используется в приложениях, требующих быстрой передачи данных, таких как потоковая передача видео и аудио.

HTTP (Hypertext Transfer Protocol):
• Протокол передачи гипертекста, используемый для передачи данных между веб-сервером и веб-клиентом (браузером).
• Работает поверх TCP и использует порт 80 по умолчанию.
• Использует методы GET и POST для получения и отправки данных.

HTTPS (HTTP Secure):
• Защищенная версия HTTP, использующая протокол SSL/TLS для шифрования данных.
• Используется для обеспечения безопасности передачи данных между веб-сервером и клиентом.
• Работает поверх TCP и использует порт 443 по умолчанию.

FTP (File Transfer Protocol):
• Протокол передачи файлов, используемый для передачи файлов между клиентом и сервером.
• Работает поверх TCP и использует порты 20 (для данных) и 21 (для управления) по умолчанию.
• FTP не шифрует данные, поэтому для защиты конфиденциальных данных рекомендуется использовать FTP через SSL (FTPS) или SFTP.

SMTP (Simple Mail Transfer Protocol):
• Протокол простой передачи почты, используемый для передачи электронных писем между почтовыми серверами.
• Работает поверх TCP и использует порт 25 по умолчанию.
• SMTP не шифрует данные, поэтому для защиты конфиденциальных данных рекомендуется использовать STARTTLS или SMTPS.

DNS (Domain Name System):
• Протокол, используемый для преобразования доменных имен в IP-адреса.
• Работает поверх UDP и использует порт 53 по умолчанию.
• DNS является распределенной системой имен, состоящей из иерархически организованных серверов.

Computer Science

27 Sep, 12:02


Протокол NTP

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

Он использует алгоритм Марзулло (алгоритм согласования данных, использующийся для выбора более точных источников для оценки точного времени из ряда источников времени, разной степени точности и усреднения времени). Благодаря нему протокол выбирает более точный источник времени. 

NTP работает поверх UDP — поэтому ему удаётся достигать большой скорости передачи данных. Протокол достаточно устойчив к изменениям задержек в сети.

Последняя версия NTPv4 способна достигать точности 10мс в интернете и до 0,2мс в локальных сетях.

Computer Science

26 Sep, 08:30


SSH

Протокол для удалённого управления операционной системой с использованием TCP. В SSH шифруется весь трафик, причём с возможностью выбора алгоритма шифрования. В основном это нужно для передачи паролей и другой важной информации.

Также SSH позволяет обрабатывать любые другие протоколы передачи. Это значит, что кроме удалённого управления компьютером, через протокол можно пропускать любые файлы или даже аудио/видео поток.

SSH часто применяется при работе с хостингами, когда клиент может удалённо подключиться к серверу и работать уже оттуда.

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

Computer Science

25 Sep, 09:59


Обзор протокола HTTP

Изначально протокол передачи HTML-документов. Сейчас же он используется для передачи произвольных данных в интернете. Он является протоколом клиент-серверного взаимодействия без сохранения промежуточного состояния. В роли клиента чаще всего выступает веб-браузер, хотя может быть и, например, поисковый робот. Для обмена информацией протокол HTTP в большинстве случаев использует TCP/IP.

HTTP имеет расширение HTTPS, которое поддерживает шифрование. Данные в нём передаются поверх криптографического протокола TLS.

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

Computer Science

25 Sep, 07:31


Протокол UDP

Один из основных протоколов, расположенных непосредственно над IP.Он предоставляет прикладным процессам транспортные услуги, немногим отличающиеся от услуг протокола IP.

Протокол UDP обеспечивает доставку дейтограмм, но не требует подтверждения их получения. Он не требует соединения с удаленным модулем UDP.

К заголовку IP-пакета UDP добавляет поля порт отправителя и порт получателя, которые обеспечивают мультиплексирование информации между различными прикладными процессами, а также поля длина UDP-дейтограммы и контрольная сумма байт, позволяющие поддерживать целостность данных. 

Таким образом, если на уровне IP для определения места доставки пакета используется адрес, на уровне UDP - номер порта.

Computer Science

24 Sep, 08:10


Протокол TCP

Используется для обеспечения надёжной доставки данных на транспортном уровне. Его две основные задачи: сегментация данных и адресация приложений

Но помимо этого протокол обеспечивает:
 ⁃ Надёжную доставку сегментов
Каждый сегмент маркируется при помощи порядкового номера. После отправки пакетов, протокол ожидает подтверждения от получателя, где находится порядковый номер следующего сегмента. В случае, если такое подтверждение не получено, отправка автоматически повторяется. После некоторого количества неудачных попыток, TCP считает, что адресат не доступен, и сессия разрывается.

 ⁃ Упорядочивание сегментов при получении
Иногда получатель может получить сегменты не в том порядке, в котором они отправлялись.В этом случае, TCP автоматически пересоберёт их в нужном порядке, используя всё то же поле порядковых номеров, и передаст после склейки на уровень приложений.

 ⁃ Работу с сессиями
Перед началом передачи пакетов, когда TCP убеждается в том, что получатель существует и готов принимать данные, тогда открывается сессия. После передачи пакетов, сессия закрывается.

 ⁃ Контроль за скоростью передачи
Благодаря механизму скользящего окна, TCP может корректировать скорость отправки пакетов в зависимости от возможностей получателя.

Computer Science

23 Sep, 14:01


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

Python: Python имеет большое количество библиотек и фреймворков, таких как NumPy, Pandas, Django и Flask. Официальный репозиторий пакетов Python - PyPI (Python Package Index) содержит более 300 000 пакетов.

JavaScript: JavaScript также имеет огромную экосистему библиотек и фреймворков. Некоторые из них включают React, Angular, Vue.js, jQuery и Node.js. Официальный репозиторий пакетов JavaScript - npm (Node Package Manager) содержит более 1 миллиона пакетов.

Java: В языке программирования Java существует множество библиотек и фреймворков, включая Spring, Hibernate, Apache Commons и Guava. В Maven Central Repository, одном из наиболее популярных репозиториев Java, доступно более 500 000 артефактов.

C#: C# имеет ряд популярных библиотек и фреймворков, таких как .NET Core, ASP.NET, Entity Framework и Xamarin. Однако точное количество библиотек и фреймворков для C# неизвестно. (может плохо искал).

Ruby: Ruby также имеет большое количество библиотек и фреймворков, таких как Ruby on Rails, Sinatra и RSpec. Официальный репозиторий пакетов Ruby - RubyGems содержит более 180 000 пакетов.

Computer Science

23 Sep, 08:00


Профилирование в computer science

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

Может быть проведено на уровне процессора, операционной системы или приложения.

1) На уровне процессора - анализ инструкций процессора для выявления узких мест.

2) На уровне операционной системы - анализ системных вызовов, используемых приложением.

3) На уровне приложения - анализ времени выполнения каждого отдельного блока кода и выделение узких мест, вызывающих замедление приложения.

Computer Science

20 Sep, 11:05


RFID (Radio-Frequency Identification) - это технология, которая позволяет беспроводно идентифицировать и отслеживать объекты с помощью радиочастотных сигналов. RFID-метки состоят из маленького микрочипа и антенны, которая обеспечивает коммуникацию с RFID-считывателем.

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

Процесс работы RFID-системы можно разделить на несколько этапов:

- Инициация: RFID-считыватель генерирует радиочастотный сигнал, создавая электромагнитное поле в определенной области.
- Детектирование: Когда RFID-метка находится в поле действия считывателя, электромагнитное поле индуцирует электромагнитный ток в антенне метки. Этот ток питает микрочип в метке, активируя его.
- Коммуникация: Активированный микрочип в RFID-метке начинает передавать данные об объекте или товаре через антенну, используя радиочастотные волны. Эта информация может быть уникальным идентификатором метки, серийным номером или другой полезной информацией.
- Считывание: Антенна RFID-считывателя принимает радиочастотные сигналы от метки, которые затем передаются считывателю для обработки.
- Обработка данных: RFID-считыватель декодирует полученные данные и передает их на дальнейшую обработку или хранение. В зависимости от конкретной системы меток и приложения, считыватель может также записывать данные на метку.

RFID-метки могут быть активными (с собственным источником питания и более высоким радиусом действия) или пассивными (питаются от энергии, передаваемой от считывателя), а также иметь различные рабочие частоты в зависимости от региональных стандартов и требований применения.

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

Computer Science

20 Sep, 07:30


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

Основными преимуществами векторной графики являются:

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

Редактируемость: Векторные изображения легко редактируются. Вы можете изменять цвета, формы, размер и другие атрибуты объектов в изображении без потери качества.

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

Более точное представление: Векторные графики обеспечивают более точное и точное представление форм и линий, чем растровые изображения.

Поддержка прозрачности: Векторные файлы могут содержать прозрачные области, что делает их удобными для создания комплексных изображений с непрямоугольными формами.

Примеры программ, позволяющих создавать и редактировать векторную графику, включают Adobe Illustrator, CorelDRAW, Inkscape, Sketch и Affinity Designer.