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 ₽ месяц
Доступны сообщения

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

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

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

Случайные 13-значные коды для бланков ОГЭ

Недавно ‎в‏ ‎школе ‎проходила ‎РПГ ‎на ‎тему‏ ‎сдачи ‎экзаменов.‏ ‎То‏ ‎есть ‎ОГЭшники ‎и‏ ‎ЕГЭшники ‎на‏ ‎полном ‎серьёзе ‎заполняли ‎бланки,‏ ‎решали‏ ‎задачи ‎полного‏ ‎экзаменационного ‎варианта,‏ ‎а ‎я ‎изображала ‎сначала ‎технического‏ ‎специалиста,‏ ‎а ‎потом‏ ‎проверяющего ‎эксперта.

Ещё‏ ‎один ‎такой ‎отыгрыш ‎ждёт ‎нас‏ ‎17‏ ‎мая.

В‏ ‎ЕГЭ, ‎как‏ ‎ни ‎забавно,‏ ‎играть ‎гораздо‏ ‎проще:‏ ‎вся ‎работа‏ ‎проходит ‎за ‎компьютером, ‎и ‎система‏ ‎сама ‎проверяет‏ ‎верность‏ ‎введённого ‎ответа. ‎А‏ ‎вот ‎ОГЭ‏ ‎приходится ‎проверять ‎вручную. ‎И‏ ‎готовить‏ ‎для ‎сдачи‏ ‎индивидуальные ‎бланки.


На‏ ‎каждом ‎ОГЭшном ‎бланке ‎стоит ‎13-значный‏ ‎номер.‏ ‎Причём ‎на‏ ‎бланках ‎№‏ ‎1 ‎и ‎№ ‎2 ‎эти‏ ‎номера‏ ‎обычно‏ ‎разные. ‎По‏ ‎номеру ‎ваши‏ ‎результаты ‎сопоставляются‏ ‎вашей‏ ‎записи ‎в‏ ‎базе ‎— ‎как ‎раз ‎это‏ ‎гарантирует ‎объективность,‏ ‎ведь‏ ‎ваше ‎имя ‎нигде‏ ‎не ‎«светится».

Ну‏ ‎и ‎этот ‎номер ‎вы‏ ‎задаёте‏ ‎в ‎качестве‏ ‎имени ‎файлов‏ ‎с ‎решениями ‎второй ‎части ‎экзамена.

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


Варианты ‎решения‏ ‎могут ‎быть‏ ‎разными. ‎Я, ‎естественно, ‎набросала‏ ‎свой‏ ‎на ‎Питоне,‏ ‎не ‎зря‏ ‎же ‎он ‎отличный ‎язык ‎прототипирования.

1) Составила‏ ‎строку‏ ‎из ‎цифр,‏ ‎повторённых ‎пять‏ ‎раз. ‎Это ‎позволило ‎цифрам ‎в‏ ‎номере‏ ‎повторяться.

num‏ ‎= ‎''‏
‎for ‎i‏ ‎in ‎range(5):‏
  ‎for‏ ‎j ‎in‏ ‎range(10):
    ‎num ‎+= ‎str(j)

‎

2) Строку‏ ‎я ‎преобразовала‏ ‎в‏ ‎список. ‎Теперь ‎каждый‏ ‎символ ‎строки‏ ‎стал ‎отдельным ‎элементом ‎списка.

num‏ ‎=‏ ‎list(num)

‎

3) Теперь‏ ‎этот ‎список‏ ‎я ‎«замешала» ‎при ‎помощи ‎метода‏ ‎.shuffle()‏ ‎модуля ‎random.

random.shuffle(num)‏

‎

Теперь ‎у‏ ‎нас ‎уже ‎случайный ‎набор ‎цифр,‏ ‎только‏ ‎слишком‏ ‎длинный ‎—‏ ‎из ‎50‏ ‎цифр.

4) Осталось ‎вывести‏ ‎первые‏ ‎13 ‎символов‏ ‎нашего ‎списка. ‎Проще ‎всего ‎это‏ ‎сделать, ‎собрав‏ ‎элементы‏ ‎снова ‎в ‎строку‏ ‎при ‎помощи‏ ‎среза.

print(''.join(num)[:13])

‎


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

import‏ ‎random‏

‎num ‎=‏ ‎''
‎for‏ ‎i ‎in ‎range(5):
    ‎for ‎j‏ ‎in‏ ‎range(10):‏
        ‎num ‎+=‏ ‎str(j)

‎num‏ ‎= ‎list(num)‏
‎for‏ ‎i ‎in‏ ‎range(10):
    ‎random.shuffle(num)
    ‎print(''.join(num)[:13])

‎

Обратите ‎внимание:‏ ‎составляем ‎50-значную‏ ‎строку‏ ‎мы ‎один ‎раз,‏ ‎а ‎дальше‏ ‎просто ‎замешиваем ‎её, ‎сколько‏ ‎нужно.

Вывод‏ ‎может ‎быть,‏ ‎например, ‎таким:

1545020904967
4735326057005
2079875308964
3482096197552
3335818279040
5864215649929
4832200521656
5758123696278
2829394392713
1088239197451

Ещё‏ ‎можно ‎проверить ‎на ‎ведущие ‎нули‏ ‎и‏ ‎удалить ‎их‏ ‎при ‎необходимости.‏ ‎Хотя ‎в ‎бланках ‎у ‎нас‏ ‎не‏ ‎числа,‏ ‎а ‎именно‏ ‎коды, ‎так‏ ‎что ‎ведущие‏ ‎нули‏ ‎имеют ‎право‏ ‎на ‎существование.

Если ‎вам ‎где-нибудь ‎понадобятся‏ ‎случайные ‎наборы‏ ‎символов‏ ‎— ‎пользуйтесь!


Читать: 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.‏ ‎

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать: 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. Теоретическое введение.

Показать еще

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

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

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

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

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

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