ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

Программистика

Программистика

关闭频道

Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager

显示更多
5 759
订阅者
-924 小时
-367 天
-9130 天
帖子存档
К сожалению, сегодня поста не будет, загонялся по учëбе, и не успел подготовить интересный контент! 🌫

Хотели бы вы видеть статьи по самым основам(что такое функции, типы данных, основы ООП и так далее)
Anonymous voting

Что такое foo и bar? Если вы читали учебные пособия по программированию, то могли в некоторых видеть, как применяются такие слова, как foo и bar, и сегодня я вам расскажу о них, и для чего они используются. foo и bar - это общепринятые заглушки или обозначения, которые часто используются в качестве примеров или иллюстраций кода. Они не имеют никакого специального значения для компилятора, а используются исключительно в качестве примеров. Часто вы их можете увидеть в учебниках, учебных пособиях и статьях на различных сервисах. Пример:
def foo(a):
  return a + 48

def bar(b):
  return b + 44

print(bar(67) * foo(78))
Честно, я не люблю использовать эти заглушки в коде, ведь, как мне кажется, переменные, функции, массивы и так далее должны называться осмысленно, даже в учебных пособиях. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Оператор goto в C++ Сегодня я вам расскажу об очень интересном операторе в языке C++ goto предоставляет возможность передвигаться в коде программы от одной метки к другой. Однако использовать этот оператор все не торопятся, ведь его использование ухудшает читаемость кода.
C++
#include <iostream>

int main()
{
    int i = 0;
    
start_loop://Метка

    if (i < 5){
        std::cout << i << " ";
        i++;
        goto start_loop;
    }
    
    std::cout << std::endl;
}
Вывод: 0 1 2 3 4 5
Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Стили именования структур в коде Сегодня я вам расскажу о нескольких стилях, которые приняты в сообществе программистов, для именования переменных, функций, массивов, классов и так далее. CamelCase - этот стиль подразумевает использовать строчные буквы для первого слова и заглавные для каждого последующего слова. Пример: completeInt Snake case - в этом стиле слова разделяются символом подчёркивания "_", все буквы пишутся в нижнем регистре. Пример: complete_int PascalCase - Каждое слово начинается с буквы верхнего регистра. Пример: CompleteInt Hungarian Notation- в этом стиле к основной части названия добавляется префикс, который может указывать на тип данных или другой добавочной информации. Пример: intNumber Kebab case - Слова разделяются дефисом. Обычно применяется к URL и именах файлов. Пример: complete-int Screaming Snake Case - Все буквы написаны в верхнем регистре и слова разделяются символами: "_". Обычно используется для обозначения констант. Пример: COMPLETE_INT Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Функциональная компоновка в C# Язык C# сам по себе не поддерживает функциональную компоновку, что создает семантические проблемы. Но такую функциональность можно легко ввести. Рассмотрим простой случай на C# для определения двух функций с использованием лямбда-выражения.
C#
Func<coffee_beans, coffee_ground> Grind_coffee = Coffee_Beans => new coffee_ground(Coffee_Beans);
/* Функция высшего порядка Grind_coffee возвращает делегат Func, который принимает coffee_beans
в качастве аргумента, а затем возвращает объект coffee_ground.*/ 
Func<coffee_ground, latte> Complete_coffee = Coffe_Ground => new latte(Coffee_Ground);
/*Функция высшего порядка Complete_coffee возвращает объект latte и принимает
в качестве параметра объект coffee_ground.*/
Первая функция, Grind_coffee, принимает в качестве параметра объект coffee_beans и возвращает новый экземпляр класса coffee_ground. Вторая функция, Complete_coffee, принимает в качестве параметра объект coffee_ground и возвращает новый экземпляр latte. Цель функций — создать объект класса latte, объединив ингредиенты, получаемые в результате вычислений. Как скомпоновать эти функции? В C# есть возможность выполнять их последовательно, передавая результат первой функции во вторую по цепочке
//Компоновка функций(неудачный вариант)
coffee_ground Coffee_Ground = Grind_coffe(Coffe_Beans);
latte Latte = Complete_coffee(Coffee_Ground);

latte Latte = Complete_coffe(Grind_coffee(Coffee_Beans));
/*Неудачный пример компоновки функций, где чтение данных выполняется задом наперёд.*/
Сначала выполняется функция Grind_coffee, которой передается параметр Coffee_Beans, затем результат Coffee_Ground передается в функцию Complete_coffee. Второй вариант, который даст тот же результат, — объединить выполнение Grind_coffee и Complete_coffee, что позволит реализовать основную идею функциональной компоновки. Но с точки зрения удобства чтения это неудачный шаблон, поскольку он заставляет читать код справа налево, что не является естественным. Было бы неплохо читать код логически слева направо. Лучшим решением было бы создать параметризованный, специализированный метод расширения, который можно было бы использовать для компоновки любых двух функций с одним или несколькими параметризованными входными аргументами. Ниже определена функция Compose и выполнен рефакторинг предыдущего примера. (Параметризованные аргументы выделены жирным шрифтом.)
static Func<A, C> Compose<A, B, C>(this Func<A, B> f, Func<B, C> g) => (n) => g(f(n)
/*Создаёт параметризованный метод расширения для любого параметризованного делегата Func<A, B>, который принимает в качестве входного аргумента параметризованный делегат Func<B, C> и возвращает объединённую функцию  Func<A, C>.*/

Func<coffe_beans,latte> makeLatte = Grind_coffe.Compose(Complete_coffe);
latte Latte = makeLatte(Coffe_Beans)
функция высшего порядка Compose составляет цепоч- ку из функций Grind_coffe и Complete_coffe, создавая новую функцию makeLatte, которая принимает аргумент coffe_beans и выполняет coffe_beans (Grind_coffe (Coffe_Beans)). Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Так разве среднее не находится по этой формуле: middle=(left+right)/2
Большое спасибо подписчику, который заметил ошибку в моëм коде, которая мешала корректной работе всего алгоритма, но уже в статье всë исправлено Большое спасибо, что помогаете, спрашиваете и указываете на ошибки, это позволяет нам всем учиться быстрее и эффективнее❤️

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

Бинарный поиск Сегодня я вам расскажу о том, что такое бинарный поиск, о том как он работает и в чём он лучше обычного поиска. Давайте сперва рассмотрим обычный поиск, допустим перед нами стоит задача выяснить индекс определённого элемента массива, и мы воспользуемся следующим методом его нахождения:
def search(items, number):
  import random
  i = 0
  for element in items:
    if element == number:
      return f"В массиве присутствует цифра 7 под индексом: {i}"
    i += 1
items = [1, 2, 5, 6, 7, 90, 180]
print(search(items, 7))
С помощью этой функции мы узнали, что в массива items цифра 7 имеет индекс: 4 Но если бы нам был дан массив из тысячи или даже намного большего числа элементов, то проверять поочерёдно каждый элемент массива было слишком долго. И именно в таких ситуациях необходим бинарный поиск, который проделает эту работу гораздо быстрее, ведь он не проверяет все элементы массива поочерёдно. Но при этом его алгоритм довольно прост: Он берёт массив(обязательно отсортированный, иначе алгоритм не сработает) и при каждой итерации делит его пополам, проверяет равен ли элемент массива, стоящий по середине этого самого списка или может даже таблицы, с искомым элементом, если элемент больше искомого, то алгоритм отбрасывает все элементы, стоящие до среднего, а если средний элемент меньше искомого, то алгоритм отбрасывает все элементы, стоящие после среднего, и после этого алгоритм начинает всё сначала, но только уже с оставшимися элементами списка Сейчас разберём это на примере:
def bynary_search(items, number):
  low = 0 #Индекс самого маленького элемента массива
  high = len(items) - 1 #Индекс самого большого элемента массива

  while low <= high:
    mider = low + high #Индекс среднего элемента массива
    numb = items[mider] #Средний элемент массива
    if numb == number: #Действие при равенстве среднего и искомого элементов
      return mider
    elif numb > number: #Действие, если средний элемент больше искомого
      high = mider - 1
    elif numb < number: #Действие, если средний элемент меньше искомого
      high = mider + 1
  return None #функция вернёт None, если искомого элемента нет в массиве

items = [1, 2, 5, 6, 7, 90, 180]
print(bynary_search(items, 7))
А если вы хотите произвести поиск по массиву или таблице, состоящей из строковых элементов, то лучше сортировать массив по алфавиту и проводить практически тоже самое. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Хеш-функции Сегодня я вам расскажу, что такое Хеш-функции и чем они полезны. Давайте сперва дадим определение этому термину. Хеш-функция - это функцию, которая получает строку и возвращает число. Допустим, что код получат входными данными слово: сыр, а на выводе мы получим число: 4. Примерно так работают Хеш-функции. При этом любая Хэш-функция должна соответствовать некоторым требованиям: 1.Она должна быть последовательной. Допустим, вы передали ей строку "сыр" и получили 4. Это значит, что каждый раз в будущем, передавая ей строку "сыр", вы будете получать 4. Без этого хеш-функция бесполезна. 2.Разным словам должны соответствовать разные числа. Например, хеш функция, которая возвращает 2 для каждого полученного слова, никуда не годится. В идеале каждое входное слово должно отображаться на свое число. Таким образом, хеш-функция связывает строки с числами, но вы, наверное, спросите, зачем это нужно. А сейчас я представлю пример кода и на нём разберём ситуацию, в которой хеш-функция необходима.
'''Создадим программу, которая будет получать на вход продукт,
а выводить в консоль цену за этот продукт, это и будет хеш-функцие'''
def price_product():
  price = {"сыр": 250, "молоко": 140, "яблоки": 80} #Создаёи словарь
  product = input("Введите интересующий вас продукт: ") #Вводимый пользователем продукт
  return price[product]

print(price_product())
Хеш-таблица состоит из ключей и значений. В хеше price имена продуктов являются ключами, а цены - значениями. Хеш-таблица связывает ключи со значениями. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Безопасность в Сети Сегодня я вам расскажу о том, как обеспечивается безопасность персональных данных в интернете. Интернет спроектирован так, что кто угодно может легко подключиться к нему и начать передавать трафик. Открытая архитектура не только стимулировала волну инноваций, но и сделала интернет платформой для атак неслыханного масштаба и размаха. Одна из самых распространенных и разрушительных атак - DDoS (Distributed Denial of Service - •отказ в обслуживании•), при которой мно­жество компьютеров в сети посылают трафик на компьютер-жертву в попытке истощить ее ресурсы. Существует множество различных видов DDoS-aтaк. Простейшая форма DDоS-атаки представляет собой отправку трафика большим числом компьютеров (в совокупности называемых ботнетом) на компьютер­ жертву. DDоS-атаки обычно проводятся со взломанных компьютеров (например, ноутбуков или серверов), но изобилие плохо защищенных устройств IoT привело к возникновению совершенно нового вектора DDoS-aтaк. Может ли скоординированная атака миллиона подключенных к интернету «умных» тостеров обрушить Google? К сожалению, IоТ-производители не слишком озабочены безопасностью программного обеспечения. На сегодняшний день защита от атак со стороны крайне плохо защищенных IоТ-устройств ложится на плечи сетевых операторов. Чтобы отбить у пользователей охоту подключать к сети ненадежные устройства, необходимы новые стимулы или нормативная база. В целом многие проблемы безопасности в интернете сводятся к наличию/ отсутствию мотивации. Спам (нежелательные сообщения) сегодня составляет более 90 % всего трафика электронной почты, поскольку спамеры накопили базы из миллионов адресов, а горе-маркетологи могут без особых затрат рассылать по ним сгенерированные сообщения. К счастью, существует ПО для фильтрации таких писем, способное анализировать и отбрасывать созданный другими компьютерами спам. Ранние варианты фильтрующего ПО отличали спам от настоящих писем в основном по содержанию сообщений. Однако спамеры быстро научились обходить эти фильтры. Зато проверка IР-адресов отправителей и получателей, а также шаблонов отправки электронной почты оказалась намного эффективнее. Чаще всего спам в электронной почте просто раздражает. Но порой такие сообщения могут оказаться частью мошеннической схемы или попыткой украсть персональные данные - пароли или информацию о банковских счетах. Фишинговые (phishing) сообщения маскируются под письма от надежного ис­точника (например, банка). С их помощью злоумышленники пытаются обманом заставить пользователя раскрыть конфиденциальную информацию (к примеру, номера банковских карт). Хищение персональных данных становится серьезной проблемой, если мошенники собирают достаточно данных для оформления кредитных карт и других документов на имя жертвы обмана. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica

Полезные инструменты для программиста(разработчика ПО) Инструменты сравнения файлов. Инструмент сравнения, или инструмент diff, — это программа, которая сравнивает две версии текстового файла и определяет, что между ними изменилось. Различия обычно рассчитываются построчно, хотя современные diff-средства могут показывать и диапазон измененных символов на измененной строке. Большинство систем контроля версий поставляются с инструментом сравнения Трехсторонние инструменты слияния. Когда два человека редактируют один и тот же файл, генерируются два независимых набора различий. Инструмент, который может объединить их в окончательную версию файла, содержащую изменения, внесенные обоими участниками, называется инструментом трехстороннего слияния. Название «трехсторонний» обусловлено тем, что задействованы три версии файла: оригинал, версия пользователя A и версия пользователя B. Многие инструменты слияния поставляются со связанным инструментом сравнения. Популярные инструменты слияния — AraxisMerge (www.araxis.com) и WinMerge (winmerge.org). Perforce также поставляется с отличным инструментом трехстороннего слияния Шестнадцатеричные редакторы. Шестнадцатеричный редактор (hex-редактор) — это программа, используемая для проверки и изменения содержимого двоичных файлов. Данные обычно отображаются в виде целых чисел в шестнадцатеричном формате, отсюда и название. Большинство хороших шестнадцатеричных редакторов могут выводить данные в виде целых чисел от 1 до 16 байтов каждый, в 32- и 64-битном формате с плавающей запятой и в виде текста ASCII. Hex-редакторы особенно полезны при отслеживании проблем с бинарными файловыми форматами или обратном инжиниринге неизвестного бинарного формата.

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

Общие параметры сборки Сегодня мы разберём некоторые из наиболее распространенных параметров, которыми вы можете управлять с помощью конфигураций сборки. Это я буду объяснять на примере языка программирования C++ Настройки препроцессора При подготовке программного кода к компиляции препроцессор C++ добавляет содержимое произвольных файлов (#include), а также определяет и заменяет макросы (#define). Чрезвычайно мощная особенность всех современных препроцессоров C++ — возможность определять макросы препроцессора с помощью параметров командной строки. Макросы, определенные таким образом, действуют так, как если бы они были записаны в исходный код с применением инструкции #define. В большинстве компиляторов для этого используется параметр командной строки -D или /D, причем может быть использовано любое количество этих директив. Эта особенность позволяет передавать различные параметры сборки для вашего кода, не изменяя сам исходный код. В качестве распространенного примера: символ _DEBUG всегда определяет отладочную сборку, в то время как сборки без отладочной информации характеризуются символом NDEBUG. Исходный код проверяет эти флаги и так узнает, собирается он в режиме отладки или без нее. Настройки компилятора Один из наиболее распространенных параметров компилятора определяет, должен ли компилятор включать отладочную информацию в создаваемые им объектные файлы. Эта информация используется отладчиками для просмотра вашего кода, отображения значений переменных и т. д. Отладочная информация увеличивает размер исполняемых файлов на диске и позволяет хакерам выполнить обратный инжиниринг вашего кода, поэтому ее всегда удаляют из окончательной версии исполняемого файла. Однако во время разработки отладочная информация неоценима и всегда должна включаться в сборки. Так же у компилятора есть множество других полезных функции, которые вы можете задействовать при своём желании. Настройки компоновщика Компоновщик также предоставляет ряд опций. Вы можете контролировать тип выходного файла — исполняемый файл или DLL. А еще указать внешние библиотеки, которые должны быть связаны с исполняемым файлом, и путь до папок, в которых стоит их искать. Обычная практика — связь с отладочными библиотеками при сборке исполняемого файла отладки и с оптимизированными библиотеками при сборке в режиме без отладки. Параметры компоновщика также управляют такими вещами, как размер стека, предпочтительный базовый адрес вашей программы в памяти, тип компьютера, на котором будет выполняться код (для оптимизации под конкретное устройство), включена ли глобальная (во время компоновки) оптимизация, и некоторыми другими мелочами, которыми мы здесь не будем заниматься. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica // #Статья #Основы #Общие_параметры_сборки

Добрый день! Помогите бустануть канал, чтобы мы могли создавать для наших статей более привлекательный внешний вид: https://t.me/boost/programistica Спасибо за внимание! 🔥

Исходные файлы, заголовки и единицы компиляции Сегодня я вам расскажу, что такое Исходные файлы, заголовки и единицы компиляции и как их представляет компьютер на примере языка программирования C++, но это и не сильно отличается в других ЯП. Программа, написанная на C++(но и на других ЯП), состоит из исходных файлов (source). Обычно они имеют расширение .c, .cc, .cxx или .cpp(это от языка к языку может отличаться) и содержат основную часть исходного кода вашей программы. Исходные файлы известны также как единицы компиляции, потому что компилятор переводит один исходный файл за раз из C++ в машинный код. Специальный вид исходного файла, известный как заголовочный файл (header),часто используется для того, чтобы единицы компиляции обменивались между собой информацией, такой как объявление типов и прототипов функций. Файлы заголовков не видны компилятору. Вместо этого препроцессор C++ заменяет каждое утверждение #include содержимым соответствующего заголовочного файла перед отправкой единицы компиляции в компилятор. Это тонкое, но очень важное различие. Заголовочные файлы существуют как отдельные файлы с точки зрения программиста, но благодаря расширению для обработки заголовочных файлов препроцессора все, что видит компилятор, — это единицы компиляции. Спасибо за внимание, ставьте реакции, если понравился пост🔥 @programistica // #Статья #Основы #Исходные_файлы_заголовки_и_единицы_компиляции

Простая реляционная схема реализации домашней страницы X(в прошлом: Twitter)
Простая реляционная схема реализации домашней страницы X(в прошлом: Twitter)

Самые распрасраненные системы контроля версий. Сегодня я вам расскажу о самых известных системах контроля версий и их особенностях 1.SCCS и RCS. Source Code Control System (SCCS) и Revision Control System (RCS) — две самые старые системы контроля версий. Обе используют интерфейс командной строки. Они распространены в основном на платформах UNIX. 2.Concurrent Version System (CVS) — это высокопроизводительная система управления исходным кодом профессионального уровня на основе командной строки, изначально построенная на основе RCS (теперь реализована как само- стоятельный инструмент). CVS распространена в системах UNIX, доступна и на других платформах разработки, таких как Microsoft Windows. Имеет открытый исходный код. 3.CVSNT — это реализация для Windows, которая основана на CVS и совместима с ней. Subversion. Система контроля версий с открытым исходным кодом, призванная заменить и улучшить CVS. 4.Git. Система контроля версий с открытым исходным кодом, которая исполь- зовалась во многих легендарных проектах, включая ядро Linux. В модели разработки Git программист вносит изменения в файлы и фиксирует перемены в ветке. Затем он может быстро и легко объединить свои изменения в любую другую ветку кода, потому что Git знает, как перемотать последовательность изменений и повторно применить их к новой базовой ревизии. 5.Perforce. Система контроля версий профессионального уровня с текстовыми и графическими интерфейсами. Она известна прежде всего своей концепцией списка изменений (changelist). Любое исправление в репозитории однозначно определяется пронумерованным значением changelist, включающим в себя изменения файлов (одного или нескольких тысяч). Поэтому вносимые изменения применяются или для всех файлов из списка, или ни для одного. Perforce используется многими игровыми компаниями, включая Naughty Dog и Electronic Arts. Спасибо за внимание, ставьте реакции, если понравился пост🔥