logo
0
читателей
Информатика с Натальей Массальской  Трюки и читы информатики от преподавателя и программиста. Excel, Python, дискретная математика, ЕГЭ, ОГЭ. Информатика — это круто!
О проекте Просмотр Уровни подписки Фильтры Статистика Обновления проекта Контакты Поделиться Метки
Все проекты
О проекте

ЧТО ЗДЕСЬ?

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

⭐ КТО Я?

Прежде я работала программистом «широкого профиля» в НПО «Энергомаш», затем много лет разрабатывала веб-сайты. Была выпускающим редактором газеты «Компьютерная Россия». Естественно, готовила к ЕГЭ — со времени его введения. Преподавала на кафедре прикладной и вычислительной математики в МАИ, на курсах дополнительного образования, вела занятия по компьютерной грамотности для специалистов из разных областей. Кое-кто из моих бывших студентов сейчас руководит отделами и собственными софтверными компаниями.
Сейчас я преподаю информатику в «Химкинском лицее». Под моим началом каждый год постигает азы IT примерно 250 человек в 8-11 классах. Старшие — в профильных группах.

⭐ БУДЕТ ИНТЕРЕСНО?

Непременно! И полезно, особенно если вы:
🔹 Школьник, который интересуется информатикой и программированием или собирается сдавать ОГЭ-ЕГЭ.
🔹 Студент, которому грозит курс программирования на Python или просто нужно посчитать курсовую / диплом.
🔹 Специалист в любой области, если вы не очень уверенный пользователь: Excel сейчас нужен буквально везде, а «по-быстрому вычислить» что угодно можно в Python, и некоторые приёмы здорово облегчают жизнь.
🔹 Родитель школьника, которому интересно, над чем это ребёнок часами зависает после уроков информатики.
____________________
Вы также можете подписаться на мои каналы «Информатика с Натальей Массальской»:
💥 в Telegram: IT и жизнь, компьютерные лайфхаки, инфобез, мемы;
💥 на Rutube: учебные видео.

Публикации, доступные бесплатно
Уровни подписки
Единоразовый платёж

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

Помочь проекту
Два в седьмой 128₽ месяц
Доступны сообщения

💗 Спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в восьмой 256₽ месяц
Доступны сообщения

💗 Спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в девятой 512₽ месяц
Доступны сообщения

💗 Большое спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в десятой 1 024₽ месяц
Доступны сообщения

💗 Большое спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в одиннадцатой 2 048₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в двенадцатой 4 096₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе! Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в тринадцатой 8 192₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе и серьёзный вклад в развитие проекта!

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в четырнадцатой 16 384₽ месяц
Доступны сообщения

💗 Огромное спасибо за вашу поддержку на постоянной основе и весомый вклад в развитие проекта!

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Два в пятнадцатой 32 768₽ месяц
Доступны сообщения

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

Этот уровень подписки (как и прочие) не даёт вам никаких привилегий. Все материалы этого проекта публикуются свободно.

Оформить подписку
Фильтры
Статистика
Обновления проекта
Поделиться
Читать: 3+ мин
logo Информатика с Натальей Массальской

Python: выводим слова введённой строки, отсортированные по длине

Словами ‎будем‏ ‎считать ‎последовательности ‎букв, ‎разделённых ‎пробелами.‏ ‎Знаки ‎препинания‏ ‎не‏ ‎являются ‎частью ‎слова.

ПРИМЕР:‏ ‎если ‎мы‏ ‎ввели ‎строку

Моя ‎головная ‎боль:‏ ‎математика,‏ ‎физика, ‎информатика.‏

‎

программа ‎должна‏ ‎вывести:

Моя
‎боль
‎физика
‎головная
‎математика‏
‎информатика‏

‎

1. Вводим ‎строку:

s‏ ‎= ‎input()‏

‎

2. Чтобы ‎разбить ‎строку ‎на ‎элементы,‏ ‎используем‏ ‎метод‏ ‎.split(), причём ‎без‏ ‎аргумента, ‎потому‏ ‎что ‎разбивать‏ ‎будем‏ ‎по ‎пробелу.

wrds‏ ‎= ‎s.split()

‎

Переменная ‎wrds ‎теперь‏ ‎— ‎это‏ ‎список‏ ‎строк. ‎Каждая ‎строка‏ ‎— ‎слово,‏ ‎причём ‎со ‎знаком ‎препинания‏ ‎в‏ ‎конце, ‎если‏ ‎он ‎там‏ ‎был. ‎Например, ‎«физика, ‎„.

3. Давайте ‎удалим‏ ‎последний‏ ‎символ ‎каждой‏ ‎подстроки, ‎если‏ ‎это ‎знак ‎препинания. ‎Конечно, ‎мы‏ ‎могли‏ ‎бы‏ ‎сделать ‎это‏ ‎«в ‎лоб»:

# для‏ ‎всех ‎подстрок‏ ‎списка‏
‎for ‎i‏ ‎in ‎range(len(wrds)):
    ‎# ‎если ‎последний‏ ‎символ ‎—‏ ‎знак‏ ‎препинания
    ‎if ‎wrds[i][-1]‏ ‎in ‎'.,:‏ ‎; ‎-?! ‎':
        ‎#‏ ‎заменяем‏ ‎строку ‎на‏ ‎неё ‎без‏ ‎последнего ‎символа
        ‎# ‎(фактически ‎ДО‏ ‎последнего‏ ‎символа)
        ‎wrds[i]‏ ‎= ‎wrds[i][:‏ ‎-1]

‎

Но ‎во-первых, ‎а ‎вдруг‏ ‎там‏ ‎будет‏ ‎случайно ‎затесавшаяся‏ ‎цифра ‎или‏ ‎мы ‎не‏ ‎все‏ ‎знаки ‎препинания‏ ‎вспомнили ‎(вот ‎скобки, ‎например, ‎ещё‏ ‎могут ‎быть).

А‏ ‎во-вторых,‏ ‎знак ‎может ‎быть‏ ‎и ‎в‏ ‎начале ‎слова ‎— ‎та‏ ‎же‏ ‎скобка.

Используем ‎метод‏ ‎.isalpha(), который ‎возвращает‏ ‎True, ‎если ‎аргумент ‎состоит ‎только‏ ‎из‏ ‎букв. ‎И‏ ‎будем ‎проверять‏ ‎с ‎обоих ‎концов ‎слова:

for ‎i‏ ‎in‏ ‎range(len(wrds)):‏
    ‎if ‎not(wrds[i][0].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][1:]
    ‎if‏ ‎not(wrds[i][-1].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][: ‎-1]

‎

4. Теперь ‎бы ‎надо‏ ‎отсортировать ‎список‏ ‎строк.‏ ‎Но ‎если ‎мы‏ ‎будем ‎делать‏ ‎это ‎запросто:

wrds.sort()

‎

получим ‎(естественно!)‏ ‎сортировку‏ ‎по ‎алфавиту,‏ ‎а ‎это‏ ‎не ‎то, ‎что ‎нам ‎нужно.

Вспомним,‏ ‎что‏ ‎у ‎метода‏ ‎.sort() есть ‎параметр‏ ‎key, позволяющий ‎сортировать ‎элементы ‎списка ‎как‏ ‎угодно:‏ ‎хоть‏ ‎по ‎второму‏ ‎символу ‎строк,‏ ‎хоть ‎по‏ ‎остатку‏ ‎от ‎деления‏ ‎чисел ‎на ‎11.

Причём ‎мы ‎можем‏ ‎функцию-ключ ‎сортировки‏ ‎сделать‏ ‎отдельной ‎функцией, ‎вот‏ ‎так:

def ‎key_func(x):‏
    ‎return ‎len(x)

‎

А ‎можем‏ ‎использовать‏ ‎лямбда-функцию ‎прямо‏ ‎в ‎вызове‏ ‎метода.

Лямбда-функции (напомню) ‎— ‎это ‎крохотные ‎функции‏ ‎без‏ ‎имени, ‎которые‏ ‎реализуются ‎прямо‏ ‎там, ‎где ‎используются.

Наша ‎сортировка ‎по‏ ‎длинам‏ ‎строк‏ ‎будет ‎выглядеть‏ ‎так:

wrds.sort(key=lambda ‎x:‏ ‎len(x))

‎

Параметр‏ ‎лямбда-функции‏ ‎х ‎—‏ ‎это ‎элемент ‎списка, ‎для ‎которого‏ ‎вызывается ‎.sort().‏ ‎То‏ ‎есть ‎в ‎нашем‏ ‎случае ‎—‏ ‎строка.

Что ‎возвращает ‎функция-ключ ‎сортировки‏ ‎—‏ ‎по ‎тому‏ ‎и ‎сортируем.‏ ‎Здесь ‎— ‎по ‎длине ‎строк.

5. Осталось‏ ‎вывести‏ ‎наши ‎строки.‏ ‎Можно, ‎конечно,‏ ‎сделать ‎это ‎попросту:

for ‎x ‎in‏ ‎wrds:‏
    ‎print(x)‏

‎

А ‎можно‏ ‎использовать ‎чуть‏ ‎более ‎мудрёный,‏ ‎но‏ ‎краткий ‎функциональный‏ ‎подход ‎и ‎записать ‎так:

[print(x) ‎for‏ ‎x ‎in‏ ‎wrds]‏

‎

Результат ‎получим ‎один‏ ‎и ‎тот‏ ‎же!

Осталось ‎переписать ‎программу ‎полностью‏ ‎и‏ ‎можно ‎💥‏ ‎сдавать ‎лабу‏ ‎😉

Код ‎программы:

s ‎= ‎input()
‎#‏ ‎разбиваем‏ ‎строку ‎на‏ ‎слова
‎wrds‏ ‎= ‎s.split()

‎# ‎для ‎всех‏ ‎подстрок‏ ‎списка‏
‎for ‎i‏ ‎in ‎range(len(wrds)):‏
    ‎# ‎если‏ ‎последний‏ ‎символ ‎-‏ ‎знак ‎препинания
    ‎if ‎wrds[i][-1] ‎in‏ ‎'.,:;-?!':
        ‎#‏ ‎заменяем‏ ‎строку ‎на ‎неё‏ ‎без ‎последнего‏ ‎символа
        ‎# ‎(фактически ‎ДО‏ ‎последнего‏ ‎символа)
        ‎wrds[i]‏ ‎= ‎wrds[i][:-1]‏

‎# ‎удаляем ‎начальные ‎и ‎конечные‏ ‎знаки‏
‎# ‎препинания‏ ‎из ‎каждого‏ ‎слова
‎for ‎i ‎in ‎range(len(wrds)):‏
    ‎if‏ ‎not(wrds[i][0].isalpha()):‏ ‎wrds[i] ‎=‏ ‎wrds[i][1:]
    ‎if‏ ‎not(wrds[i][-1].isalpha()): ‎wrds[i]‏ ‎=‏ ‎wrds[i][:-1]

‎#‏ ‎сортируем ‎список ‎по ‎длинам ‎строк‏
‎wrds.sort(key=lambda ‎x:‏ ‎len(x))‏
‎# ‎выводим ‎по‏ ‎одному ‎слову‏ ‎на ‎строке
‎[print(x) ‎for‏ ‎x‏ ‎in ‎wrds]‏

‎

Или ‎можете‏ ‎скачать ‎готовым ‎файликом ‎🔽🔽🔽

Читать: 1+ мин
logo Школа SoWa

Знакомство

Привет, ‎друзья!‏ ‎

Меня ‎зовут ‎Андрей, ‎я ‎основатель‏ ‎инди-студии ‎и‏ ‎школы‏ ‎SoWa ‎Solutions. ‎

Живу‏ ‎в ‎Самаре,‏ ‎на ‎берегу ‎Волги. ‎Женат,‏ ‎ращу‏ ‎сыночка ‎и‏ ‎дочку. ‎Дом‏ ‎охраняет ‎верный ‎питбуль. ‎

Мне ‎42‏ ‎года,‏ ‎и ‎30‏ ‎лет ‎из‏ ‎них ‎я ‎занимаюсь ‎кодингом. ‎Опыт‏ ‎длиной‏ ‎в‏ ‎целую ‎жизнь‏ ‎?

С ‎детства‏ ‎пишу ‎рассказы‏ ‎и‏ ‎повести. ‎Мои‏ ‎романы ‎"Тысяча ‎шагов ‎на ‎север"‏ ‎и ‎"Дом‏ ‎у‏ ‎горизонта" ‎были ‎опубликованы‏ ‎в ‎электронном‏ ‎виде ‎на ‎многих ‎площадках‏ ‎под‏ ‎эгидой ‎издательства‏ ‎"Эксмо", ‎а‏ ‎роман ‎"Кома" ‎вышел ‎в ‎редакторской‏ ‎серии‏ ‎RED ‎Fantasy.‏ ‎

Моей ‎страстью‏ ‎с ‎детства ‎были ‎видеоигры, ‎а‏ ‎мечтой‏ ‎-‏ ‎научиться ‎их‏ ‎создавать. ‎

Теперь‏ ‎я ‎хочу‏ ‎помочь‏ ‎вам. ‎Мой‏ ‎опыт ‎и ‎мои ‎навыки ‎-‏ ‎это ‎то,‏ ‎чем‏ ‎я ‎с ‎огромной‏ ‎радостью ‎поделюсь‏ ‎с ‎вами. ‎

Подписывайтесь, ‎и‏ ‎уже‏ ‎совсем ‎скоро‏ ‎вы ‎начнете‏ ‎создавать ‎собственные ‎миры! ‎

До ‎встречи!‏ ‎

Читать: 3+ мин
logo AppReview Master - Обзоры Приложений

Топ приложений для обучения программированию


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


1. SoloLearn

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

  • Поддержка ‎языков:‏ ‎Python,‏ ‎Java,‏ ‎JavaScript, ‎C++,‏ ‎Swift ‎и‏ ‎многие ‎другие.
  • Методика‏ ‎обучения:‏ ‎Короткие ‎уроки‏ ‎и ‎практические ‎задания.
  • Сообщество: ‎Пользователи ‎могут‏ ‎задавать ‎вопросы‏ ‎и‏ ‎делиться ‎своими ‎проектами.

Преимущества:

  • Бесплатный‏ ‎доступ ‎к‏ ‎большинству ‎курсов.
  • Интерактивные ‎упражнения, ‎которые‏ ‎помогают‏ ‎закрепить ‎знания.
  • Сообщество‏ ‎программистов, ‎где‏ ‎можно ‎получать ‎обратную ‎связь ‎и‏ ‎советы.

Недостатки:

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


2. Codecademy

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

  • Поддержка‏ ‎языков:‏ ‎HTML, ‎CSS,‏ ‎JavaScript, ‎Python,‏ ‎Ruby ‎и‏ ‎другие.
  • Методика‏ ‎обучения: ‎Интерактивные‏ ‎уроки ‎и ‎проекты.
  • Сертификация: ‎Возможность ‎получения‏ ‎сертификатов ‎по‏ ‎завершении‏ ‎курсов.

Преимущества:

  • Структурированные ‎курсы, ‎которые‏ ‎охватывают ‎основы‏ ‎и ‎продвинутые ‎темы.
  • Практические ‎проекты,‏ ‎которые‏ ‎помогают ‎применить‏ ‎знания ‎на‏ ‎практике.
  • Доступ ‎к ‎профессиональным ‎курсам ‎для‏ ‎карьерного‏ ‎роста.

Недостатки:

  • Платные ‎курсы‏ ‎для ‎доступа‏ ‎к ‎полному ‎контенту.
  • Не ‎всегда ‎хватает‏ ‎углубленных‏ ‎объяснений.


3. Coursera

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

  • Поддержка‏ ‎языков: ‎Широкий‏ ‎выбор ‎курсов‏ ‎по ‎различным‏ ‎языкам‏ ‎программирования.
  • Методика ‎обучения:‏ ‎Видеоуроки ‎и ‎практические ‎задания.
  • Инструкторы: ‎Курсы‏ ‎ведут ‎преподаватели‏ ‎ведущих‏ ‎университетов ‎и ‎компаний.

Преимущества:

  • Высококачественные‏ ‎курсы ‎от‏ ‎престижных ‎учреждений.
  • Сертификация, ‎которая ‎признается‏ ‎работодателями.
  • Широкий‏ ‎выбор ‎тем‏ ‎и ‎уровней‏ ‎сложности.

Недостатки:

  • Большинство ‎курсов ‎платные.
  • Необходимость ‎самостоятельного ‎управления‏ ‎временем‏ ‎обучения.


4. Udacity

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

  • Поддержка ‎языков:‏ ‎Python, ‎Java,‏ ‎JavaScript, ‎HTML/CSS ‎и ‎другие.
  • Методика ‎обучения:‏ ‎Нанодегри-программы‏ ‎и‏ ‎проекты.
  • Поддержка: ‎Наставники‏ ‎и ‎карьерные‏ ‎консультации.

Преимущества:

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

Недостатки:

  • Высокая ‎стоимость ‎программ.
  • Требуется ‎много‏ ‎времени‏ ‎и ‎усилий‏ ‎для ‎завершения‏ ‎курсов.


5. Mimo

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

  • Поддержка ‎языков: ‎HTML, ‎CSS, ‎JavaScript,‏ ‎Python‏ ‎и ‎другие.
  • Методика‏ ‎обучения: ‎Короткие‏ ‎ежедневные ‎уроки ‎и ‎задания.
  • Геймификация: ‎Награды‏ ‎и‏ ‎достижения‏ ‎за ‎выполнение‏ ‎заданий.

Преимущества:

  • Интерактивные ‎и‏ ‎увлекательные ‎уроки.
  • Возможность‏ ‎учиться‏ ‎в ‎любое‏ ‎время ‎и ‎в ‎любом ‎месте.
  • Поддержка‏ ‎различных ‎платформ,‏ ‎включая‏ ‎мобильные ‎устройства.

Недостатки:

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

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

Смотреть: 18+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 34

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий

Смотреть: 31+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 33

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Читать: 1+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 32.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Читать: 12+ мин
logo Код и Капуста

COBOL на инвалидной коляске

1


Все ‎началось‏ ‎с ‎обсуждения ‎в ‎баре ‎о‏ ‎том, ‎как‏ ‎информационные‏ ‎технологии ‎развиваются ‎и‏ ‎накапливают ‎собственное‏ ‎историческое ‎наследие. ‎Когда ‎человек‏ ‎получает‏ ‎высшее ‎художественное‏ ‎образование, ‎он‏ ‎обязательно ‎изучает ‎Историю ‎Искусств(History ‎of‏ ‎Art). Это‏ ‎имеет ‎огромное‏ ‎значение, ‎потому‏ ‎что ‎современные ‎достижения ‎не ‎возникают‏ ‎вдруг,‏ ‎они‏ ‎— ‎результат‏ ‎долгого ‎и‏ ‎сложного ‎процесса‏ ‎эволюции.‏ ‎Аналогично ‎и‏ ‎с ‎информационными ‎технологиями: ‎их ‎развитие‏ ‎— ‎это‏ ‎эволюционный‏ ‎процесс. ‎Каждая ‎новая‏ ‎разработка ‎опирается‏ ‎на ‎опыт, ‎накопленный ‎предшествующими.‏ ‎Уже‏ ‎сегодня ‎в‏ ‎учебных ‎заведениях‏ ‎нужно ‎преподавать ‎не ‎только ‎Компьютерные‏ ‎Науки(Computer‏ ‎Science), ‎но‏ ‎и ‎Историю‏ ‎Компьютерных ‎Технологий(History ‎of ‎Computer ‎Science).‏ ‎Исследование‏ ‎старых‏ ‎вычислительных ‎технологий‏ ‎может ‎приносить‏ ‎не ‎только‏ ‎удовольствие,‏ ‎но ‎и‏ ‎быть ‎источником ‎идей ‎для ‎разработки‏ ‎чего-то ‎нового.

Или‏ ‎нас‏ ‎ждет ‎новая ‎религия‏ ‎и ‎поклонение‏ ‎технологиям ‎древних


В ‎конце ‎концов,‏ ‎разговор‏ ‎в ‎баре‏ ‎навеял ‎воспоминания‏ ‎о ‎проекте ‎под ‎названием ‎«COBOL‏ ‎на‏ ‎инвалидной ‎коляске». Это‏ ‎джаст ‎фор‏ ‎фан ‎веб ‎фреймворк ‎на ‎COBOL.‏ ‎Сегодня‏ ‎мы‏ ‎создадим ‎на‏ ‎этом ‎фреймворке‏ ‎бэкенд, ‎который‏ ‎будет‏ ‎генерировать ‎JSON.‏ ‎Такой ‎бэкенд ‎вполне ‎пригодится ‎для‏ ‎любого ‎мобильного‏ ‎приложения.‏ ‎Посмотрим ‎как ‎технологии‏ ‎прошлого ‎работают‏ ‎с ‎технологиями ‎современными.

Кратко ‎про‏ ‎COBOL

COBOL‏ ‎расшифровывается ‎как‏ ‎COmmon ‎Business-Oriented‏ ‎Language. ‎Язык ‎программирования ‎COBOL ‎начал‏ ‎разрабатываться‏ ‎в ‎1959‏ ‎году ‎и‏ ‎был ‎выпущен ‎в ‎1969 ‎году.‏ ‎На‏ ‎момент‏ ‎написания ‎статьи‏ ‎ему ‎исполнилось‏ ‎65 ‎лет.‏ ‎Обычно‏ ‎люди, ‎которые‏ ‎умеют ‎на ‎нем ‎программировать, ‎примерно‏ ‎того ‎же‏ ‎возраста.‏ ‎Несмотря ‎на ‎это,‏ ‎COBOL ‎продолжает‏ ‎использоваться ‎в ‎некоторых ‎крупных‏ ‎банках.‏ ‎Вполне ‎возможно‏ ‎что ‎код,‏ ‎который ‎до ‎сих ‎пор ‎обслуживает‏ ‎пользователей,‏ ‎пережил ‎большинство‏ ‎своих ‎создателей.

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

В ‎1959‏ ‎году ‎программистка ‎Мэри ‎Хоуэс ‎пришла‏ ‎к‏ ‎выводу, ‎что‏ ‎отрасли ‎требуется‏ ‎язык ‎программирования, ‎который ‎позволит ‎легко‏ ‎писать‏ ‎программы‏ ‎и ‎будет‏ ‎универсально ‎совместим‏ ‎с ‎любой‏ ‎машиной.‏ ‎Для ‎этого‏ ‎она ‎организовала ‎комитет ‎экспертов, ‎включая‏ ‎представителей ‎только‏ ‎зарождающегося‏ ‎сектора ‎бизнес-компьютеров, ‎для‏ ‎работы ‎над‏ ‎созданием ‎такого ‎языка ‎под‏ ‎эгидой‏ ‎Министерства ‎обороны.‏ ‎Цель ‎заключалась‏ ‎в ‎разработке ‎языка, ‎который ‎мог‏ ‎бы‏ ‎быть ‎понятен‏ ‎и ‎доступен‏ ‎любому ‎менеджеру ‎компании, ‎даже ‎если‏ ‎он‏ ‎не‏ ‎имеет ‎программного‏ ‎образования.

Спустя ‎десятилетие‏ ‎работы, ‎активно‏ ‎продвигаемой‏ ‎множеством ‎женщин-суперзвёзд‏ ‎этой ‎отрасли, ‎например, ‎пионеркой ‎компьютерных‏ ‎наук ‎Джин‏ ‎Саммет,‏ ‎был ‎создан ‎простой‏ ‎в ‎понимании‏ ‎язык. ‎Например, ‎для ‎сложения‏ ‎двух‏ ‎чисел ‎можно‏ ‎было ‎написать‏ ‎ADD ‎Num1, ‎Num2 ‎GIVING ‎Result.‏ ‎Чтобы‏ ‎выполнить ‎вычисление‏ ‎три ‎раза,‏ ‎нужно ‎было ‎написать ‎PERFORM ‎3‏ ‎TIMES.

Программы‏ ‎на‏ ‎COBOL

Начнем ‎сразу‏ ‎с ‎примера‏ ‎и ‎попробуем‏ ‎разобраться‏ ‎что ‎в‏ ‎этом ‎примере ‎происходит

000100 IDENTIFICATION ‎DIVISION.
‎000200‏ ‎PROGRAM-ID. ‎HELLOWORLD.‏
‎000300*‏ ‎--- ‎Это ‎пустая‏ ‎строчка. ‎---‏
‎000400 ‎ENVIRONMENT ‎DIVISION.
‎000500‏ ‎DATA‏ ‎DIVISION.
‎000600‏ ‎PROCEDURE ‎DIVISION.‏
‎000700 ‎BEGIN.
‎000800          ‎DISPLAY ‎"Hello‏ ‎World!".‏
‎000900          ‎STOP‏ ‎RUN.

‎

Начнем‏ ‎со ‎строк ‎в ‎COBOL. ‎Все‏ ‎строки‏ ‎программы‏ ‎состоит ‎из‏ ‎80 ‎символов.

  • Символ‏ ‎1-6: ‎номер‏ ‎строки‏ ‎(необязателен)
  • Символ ‎7:‏ ‎«индикатор»:

* — строка ‎комментарий,

 — строка ‎«продолжение»,

D — строка ‎debug.

  • Символ ‎8‏ ‎— ‎11:‏ ‎Зона‏ ‎А. ‎В ‎ней‏ ‎должны ‎начинаться‏ ‎DIVISION’ы, ‎SECTION’ы, ‎имена ‎и‏ ‎заголовки‏ ‎параграфов, ‎а‏ ‎также ‎индикаторы‏ ‎и ‎номера ‎«уровней» ‎(это ‎все‏ ‎рассмотрим‏ ‎позже).
  • Символ ‎12-72:‏ ‎Зона ‎Б.‏ ‎Тут ‎непосредственно ‎размещаются ‎выражения ‎«кода».
  • Символ‏ ‎73-80:‏ ‎Зона‏ ‎комментария. ‎Не‏ ‎обрабатывается ‎компилятором‏ ‎и ‎полностью‏ ‎предоставлена‏ ‎програмисту.

Каждая ‎программа‏ ‎на ‎COBOL ‎состоит ‎из ‎четырех‏ ‎разделов, ‎которые‏ ‎называются‏ ‎DIVISION. ‎Эти ‎разделы‏ ‎расположены ‎в‏ ‎строгом ‎порядке ‎и ‎содержат‏ ‎определённые‏ ‎компоненты. ‎Внутри‏ ‎DIVISION ‎разделы‏ ‎делятся ‎на ‎секции ‎(Section) ‎и‏ ‎абзацы‏ ‎(Paragraph).

IDENTIFICATION ‎DIVISION. — описывает‏ ‎программу ‎и‏ ‎содержит ‎такие ‎параграфы, ‎как

        PROGRAM-ID. ‎Helloworld.‏
        ‎AUTHOR.‏ ‎Beginner.‏
        ‎INSTALLATION. ‎MyLocalCobolComputer.‏
        ‎DATE-WRITTEN. ‎19/03/2011.‏
        ‎DATE-COMPILED. ‎19/03/2011.‏
        ‎SECURITY.‏ ‎Iwillnottellanybodythiscode.

‎

Содержимое‏ ‎этих ‎параграфов ‎представляет ‎собой ‎обычный‏ ‎комментарий ‎и‏ ‎в‏ ‎принципе ‎записать ‎туда‏ ‎можно ‎хоть‏ ‎«2024 ‎год ‎от ‎Рождества‏ ‎Христова».

ENVIRONMENT‏ ‎DIVISION. ‎ как‏ ‎следует ‎из‏ ‎названия, ‎описывает ‎среду, ‎в ‎которой‏ ‎создаётся‏ ‎программа. ‎Этот‏ ‎раздел ‎включает‏ ‎в ‎себя ‎две ‎секции.

  • CCONFIGURATION ‎SECTION включает‏ ‎в‏ ‎себя‏ ‎параграфы ‎SOURCE-COMPUTEROBJECT-COMPUTER и‏ ‎SPECIAL-NAMES. Первые ‎два‏ ‎параграфа ‎выполняют‏ ‎комментирующую‏ ‎функцию, ‎указывая,‏ ‎на ‎каком ‎компьютере ‎написана ‎программа‏ ‎и ‎для‏ ‎какого‏ ‎компьютера ‎она ‎предназначена.‏ ‎Параграф ‎SPECIAL-NAMES представляет‏ ‎собой ‎более ‎сложную ‎тему,‏ ‎которую‏ ‎тут ‎мы‏ ‎рассматривать ‎не‏ ‎будем(или ‎вы ‎можете ‎самостоятельно ‎поискать‏ ‎информацию‏ ‎на ‎эту‏ ‎тему).
  • INPUT-OUTPUT ‎SECTION описывает‏ ‎процессы ‎ввода-вывода. ‎Эта ‎секция ‎является‏ ‎крайне‏ ‎необходимой‏ ‎и ‎важной.‏ ‎В ‎рамках‏ ‎этой ‎статьи‏ ‎мы‏ ‎ее ‎тоже‏ ‎не ‎коснемся, ‎но ‎можно ‎посмотреть‏ ‎реализацию ‎в‏ ‎самом‏ ‎фреймворке. ‎Она ‎включает‏ ‎в ‎себя‏ ‎параграфы ‎FILE-CONTROL и ‎I-O-CONTROL.

DATA ‎DIVISION. — содержит‏ ‎описания‏ ‎всех ‎переменных.‏ ‎Включает ‎в‏ ‎себя ‎4 ‎секции:

  • FILE ‎SECTION. описывает ‎структуру‏ ‎файлов.
  • WORKING-STORAGE‏ ‎SECTION. описывает ‎переменные.
  • LOCAL-STORAGE‏ ‎SECTION. описывает ‎переменные,‏ ‎которые ‎создаются ‎и ‎инициализируются ‎каждый‏ ‎раз‏ ‎при‏ ‎выполнении ‎(поподробней‏ ‎в ‎следующие‏ ‎разы).
  • LINKAGE ‎SECTION. описывает‏ ‎данные,‏ ‎которые ‎мы‏ ‎получаем ‎при ‎вызове ‎других ‎программ.

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

BEGIN. пользовательский ‎параграф.

        DISPLAY‏ ‎"Hello ‎World!".
        ‎STOP ‎RUN. ‎Собственно‏ ‎сами‏ ‎выражения.‏

‎

Кстати, ‎в‏ ‎COBOL ‎300‏ ‎ключевых ‎слов.‏ ‎Для‏ ‎сравнения, ‎в‏ ‎Go ‎всего ‎25

И ‎напоследок. ‎Каждое‏ ‎выражение ‎должно‏ ‎заканчиваться‏ ‎«точкой», ‎а ‎регистр‏ ‎выражений ‎не‏ ‎важен.

REST ‎для ‎динозавров

Мы ‎уже‏ ‎овладели‏ ‎искусством ‎написания‏ ‎простых ‎программ‏ ‎на ‎языке ‎COBOL, ‎сделали ‎первые‏ ‎уверенные‏ ‎шаги ‎в‏ ‎этом ‎направлении.‏ ‎Пора ‎перейти ‎к ‎изучению ‎того,‏ ‎на‏ ‎что‏ ‎способен ‎фреймворк‏ ‎COBOL ‎on‏ ‎Wheelchair. ‎На‏ ‎этом‏ ‎этапе, ‎для‏ ‎того ‎чтобы ‎начать ‎работать ‎с‏ ‎фреймворком, ‎необходимо‏ ‎сперва‏ ‎скопировать ‎проект ‎на‏ ‎свой ‎компьютер.‏ ‎Это ‎позволит ‎нам ‎с‏ ‎головой‏ ‎окунуться ‎в‏ ‎изучение ‎его‏ ‎возможностей ‎и ‎потенциала.

git ‎clone ‎github.com/azac/cobol-on-wheelchair

Дальше‏ ‎можно‏ ‎воспользоваться ‎инструкцией и‏ ‎настроить ‎.htaccess‏ ‎в ‎Apache ‎самостоятельно. ‎Но ‎кто‏ ‎в‏ ‎2024‏ ‎помнит ‎как‏ ‎настраивать ‎Apache?‏ ‎Нам ‎повезло‏ ‎и‏ ‎в ‎проект‏ ‎уже ‎добавили ‎Dockerfile. ‎Достаточно ‎просто‏ ‎собрать ‎и‏ ‎запустить‏ ‎контейнер

docker ‎build ‎-t‏ ‎cobol ‎.‏
‎docker ‎run ‎--rm ‎-p‏ ‎8888:80‏ ‎cobol:latest

‎

Как‏ ‎все ‎это‏ ‎организовано? ‎Apache ‎использует ‎модуль ‎mod_cgid,‏ ‎чтобы‏ ‎через ‎CGI‏ ‎(Common ‎Gateway‏ ‎Interface) ‎запускать ‎как ‎скрипты, ‎так‏ ‎и‏ ‎скомпилированные‏ ‎программы. ‎Если‏ ‎в ‎начале‏ ‎2000-х ‎годов‏ ‎вы‏ ‎создавали ‎сайты‏ ‎на ‎PHP, ‎то ‎у ‎вас,‏ ‎вероятно, ‎сейчас‏ ‎возникают‏ ‎флешбэки ‎из ‎тех‏ ‎времен. ‎Могу‏ ‎вас ‎понять.

Посмотрим ‎структуру ‎базового‏ ‎проекта

/controllers‏    ‎<- ‎тут‏ ‎все ‎логика‏ ‎на ‎COBOL
‎/views          ‎<- ‎тут‏ ‎живут‏ ‎шаблоны ‎для‏ ‎рендеринга

‎config.cbl‏      ‎<- ‎файл ‎конфигурации ‎для ‎определения‏ ‎роутов‏
‎cow.cbl‏         ‎<- ‎основной‏ ‎код ‎фреймворка‏ ‎CoW 
‎downhill.sh‏     ‎<-‏ ‎скрипт ‎для‏ ‎компиляции
‎the.cow         ‎<- ‎скомпилированный ‎CoW‏ ‎проект

‎

Роутинг

Конечно,‏ ‎в‏ ‎COBOL ‎мы ‎не‏ ‎можем ‎просто‏ ‎замапить ‎наши ‎модели ‎и‏ ‎получить‏ ‎готовый ‎REST‏ ‎как ‎в‏ ‎какой-нибудь ‎Java. ‎Нам ‎придется ‎описывать‏ ‎каждый‏ ‎роут ‎отдельно,‏ ‎как ‎в‏ ‎Go. ‎Все ‎роутны ‎описываются ‎в‏ ‎файле‏ ‎config.cbl

move‏ ‎4 ‎to‏ ‎nroutes.

‎move‏ ‎"/"                           ‎to‏ ‎routing-pattern(1).‏
‎move ‎"indexweb"‏                    ‎to ‎routing-destiny(1).

‎move ‎"/showsum/%value1/%value2"    ‎to‏ ‎routing-pattern(2).
‎move‏ ‎"showsum"‏                     ‎to ‎routing-destiny(2).

‎move‏ ‎"/example/%value"             ‎to‏ ‎routing-pattern(3).
‎move ‎"example"                     ‎to‏ ‎routing-destiny(3).‏

‎move ‎"/showname/%value"‏            ‎to ‎routing-pattern(4).‏
‎move ‎"showname"                    ‎to ‎routing-destiny(4). 

‎

Таблица‏ ‎роутов‏ ‎может ‎хранить‏ ‎99 ‎элементов.‏ ‎В ‎первой ‎строке ‎move ‎4‏ ‎to‏ ‎nroutes‏ ‎указываем ‎сколько‏ ‎роутов ‎будет‏ ‎в ‎нашей‏ ‎программе.

routing-pattern‏ ‎— ‎тут‏ ‎хранятся ‎все ‎наши ‎паттерны ‎путей‏ ‎outing-destiny ‎—‏ ‎а‏ ‎туту ‎все ‎обработчики‏ ‎роутов. ‎По‏ ‎сути, ‎это ‎названия ‎програм,‏ ‎который‏ ‎описаны ‎в‏ ‎файлах ‎.cbl‏ ‎в ‎папке ‎controllers

Контроллеры

COBOL ‎— ‎это‏ ‎несложный‏ ‎язык, ‎однако‏ ‎требует ‎внимания‏ ‎к ‎некоторым ‎его ‎особенностям. ‎Например,‏ ‎все‏ ‎переменные‏ ‎должны ‎быть‏ ‎определены ‎в‏ ‎строго ‎определённых‏ ‎частях‏ ‎программы, ‎а‏ ‎изменение ‎структуры ‎самой ‎программы ‎невозможно.‏ ‎Но ‎как‏ ‎только‏ ‎мы ‎адаптируемся ‎к‏ ‎этим ‎ограничениям,‏ ‎разработка ‎веб-приложений ‎на ‎COBOL‏ ‎будет‏ ‎похода ‎на‏ ‎написание ‎стихотворений.

Посмотрим‏ ‎на ‎самый ‎простой ‎контроллер ‎example.cbl

       identification‏ ‎division.‏
       ‎program-id. ‎hello.‏

       ‎data ‎division.‏
       ‎working-storage ‎section.

       ‎01 ‎the-vars.

          ‎03‏  ‎COW-vars‏ ‎OCCURS‏ ‎99 ‎times.‏
        
            ‎05 ‎COW-varname‏       ‎pic ‎x(99).‏
            ‎05‏ ‎COW-varvalue      ‎pic‏ ‎x(99).    

       ‎linkage ‎section.

       ‎01 ‎the-values.‏

          ‎05 ‎COW-query-values‏           ‎occurs‏ ‎10 ‎times.
            ‎10‏ ‎COW-query-value-name     ‎pic‏ ‎x(90).
            ‎10 ‎COW-query-value          ‎pic‏ ‎x(90).‏


       ‎procedure ‎division‏ ‎using ‎the-values.‏


           ‎MOVE ‎"username" ‎to ‎COW-varname(1).
           ‎MOVE‏ ‎COW-query-value(1)‏ ‎to ‎COW-varvalue(1).‏   

           ‎call ‎'cowtemplate'‏ ‎using ‎the-vars ‎"hello.cow".

      
       ‎goback.

       ‎end‏ ‎program‏ ‎hello.‏

‎

Постараемся ‎разобраться‏ ‎что ‎тут‏ ‎происходит. ‎Начнем‏ ‎с‏ ‎секции ‎working-storage‏ ‎section. ‎Тут ‎мы ‎получаем ‎переменные‏ ‎из ‎запроса‏ ‎и‏ ‎складываем ‎их ‎в‏ ‎таблицу ‎COW-query-values.‏ ‎Ключ ‎этой ‎таблицы ‎COW-query-value-name,‏ ‎а‏ ‎значение ‎COW-query-value.‏ ‎Всего ‎таблица‏ ‎может ‎содержать ‎10 ‎переменных

pic ‎x(90)‏

‎

Это‏ ‎код ‎выделяет‏ ‎память ‎под‏ ‎строку ‎на ‎90 ‎символов. ‎В‏ ‎COBOL‏ ‎мы‏ ‎указываем ‎не‏ ‎размерность ‎типа‏ ‎в ‎битах,‏ ‎а‏ ‎количество ‎символов,‏ ‎которые ‎будут ‎хранится ‎в ‎этой‏ ‎переменной. ‎Например,‏ ‎операция‏ ‎pic ‎x(90) ‎говорит,‏ ‎что ‎переменная‏ ‎будет ‎содержать ‎строку ‎в‏ ‎10‏ ‎символов, ‎а‏ ‎pic ‎9(3)‏ ‎говорит ‎что ‎в ‎переменной ‎будет‏ ‎хранится‏ ‎число ‎с‏ ‎3 ‎разрядами.

Теперь‏ ‎перейдем ‎к ‎секции ‎working-storage ‎section.‏ ‎Тут‏ ‎мы‏ ‎определяем ‎таблицу‏ ‎переменных, ‎которые‏ ‎будут ‎рендерится‏ ‎в‏ ‎шаблоне. ‎В‏ ‎этой ‎таблице ‎COW-varname ‎— ‎это‏ ‎название ‎переменной,‏ ‎а‏ ‎COW-varvalue ‎— ‎это‏ ‎значение.

Нам ‎нужно‏ ‎перенести ‎значение ‎из ‎переменных‏ ‎запроса‏ ‎в ‎переменные‏ ‎для ‎рендеринга.‏ ‎Для ‎этого ‎выполняем ‎инструкции

MOVE ‎"username"‏ ‎to‏ ‎COW-varname(1).
‎MOVE‏ ‎COW-query-value(1) ‎to‏ ‎COW-varvalue(1).

‎

Теперь ‎все ‎наши ‎переменные‏ ‎можно‏ ‎передать‏ ‎в ‎шаблон‏ ‎и ‎использовать‏ ‎их ‎для‏ ‎рендеринга.‏ ‎Мой ‎пример‏ ‎шаблона ‎называется ‎example.cow

<html>
    ‎<head>
        ‎<title>‏
            ‎Hello ‎{{username}}.‏
        ‎</title>‏
    ‎</head>
    ‎<body>

        ‎<h2>‏ ‎Hello ‎{{username}}!‏ ‎</h2>  

    ‎</body>
‎</html>

‎

Все‏ ‎эти‏ ‎сложности ‎с‏ ‎таблицами ‎нужны,‏ ‎чтобы ‎можно ‎было ‎удобно ‎использовать‏ ‎названия‏ ‎в ‎шаблонах

Рендерим‏ ‎JSON

Чтобы ‎сделать‏ ‎что-то ‎похожее ‎на ‎API, ‎достаточно‏ ‎отрендерить‏ ‎данные‏ ‎в ‎JSON‏ ‎шаблон. ‎Тут‏ ‎ничего ‎сложного.‏ ‎Создаем‏ ‎файл ‎example-json.cow‏ ‎и ‎готовим ‎будущий ‎JSON:

{
    "name": ‎"{{name}}"‏
‎}

‎

Чтобы‏ ‎браузер‏ ‎понял ‎что ‎нам‏ ‎нужно, ‎необходимо‏ ‎правильно ‎отдавать ‎заголовок. ‎Для‏ ‎этого‏ ‎в ‎файле‏ ‎cow.cbl ‎нужно‏ ‎найти ‎строку

"content-type: ‎text/html; ‎charset=utf-8"

‎

И‏ ‎заменить‏ ‎ее ‎на‏ ‎нужный ‎заголовок:

"content-type:‏ ‎application/json; ‎charset=utf-8"

‎

Теперь ‎у ‎нас‏ ‎есть‏ ‎все,‏ ‎чтобы ‎построить‏ ‎на ‎COBOL‏ ‎стильное, ‎модное‏ ‎и‏ ‎молодежное ‎API

Ссылки


Смотреть: 37+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 31

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Читать: 1+ мин
logo Лаборатория программирования

Программирование на языке Python. Эпизод 6. Объектные модели и специальные методы. Часть 2

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Эпизод 6. Объектные модели и специальные методы.
Часть 2. Модель "Генератор и итератор".

Читать: 1+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 30

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий

Смотреть: 36+ мин
logo Лаборатория программирования

Программирование на языке Python. Эпизод 6. Объектные модели и специальные методы. Часть 1.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Эпизод 6. Объектные модели и специальные методы.
Часть 1. Теоретическое введение.

Смотреть: 35+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 29

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 25+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 28.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Читать: 1+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 27.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 36+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 26.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 23+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 25.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Читать: 1+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 24.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 45+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 23.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 28+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 22

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.

Смотреть: 40+ мин
logo Лаборатория программирования

Разработка приложений на Python + Qt (PySide6). Сезон 2. Выпуск 21.

Доступно подписчикам уровня
«Вольный слушатель»
Подписаться за 500₽ в месяц

Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других сопутствующих технологий.

Показать еще

Подарить подписку

Будет создан код, который позволит адресату получить бесплатный для него доступ на определённый уровень подписки.

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

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

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

Добавить карту
0/2048