Computer Science @cscience1 Channel on Telegram

Computer Science

@cscience1


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

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

Computer Science (Russian)

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

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

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 включает больше информации о типах данных и секциях, что упрощает работу компиляторов и отладчиков.