Хулиновости - Facebook, нефть, налоги, Google, SpaceX

Привет, друзья!
Меня зовут Андрей, я основатель инди-студии и школы SoWa Solutions.
Живу в Самаре, на берегу Волги. Женат, ращу сыночка и дочку. Дом охраняет верный питбуль.
Мне 42 года, и 30 лет из них я занимаюсь кодингом. Опыт длиной в целую жизнь ?
С детства пишу рассказы и повести. Мои романы "Тысяча шагов на север" и "Дом у горизонта" были опубликованы в электронном виде на многих площадках под эгидой издательства "Эксмо", а роман "Кома" вышел в редакторской серии RED Fantasy.
Моей страстью с детства были видеоигры, а мечтой - научиться их создавать.
Теперь я хочу помочь вам. Мой опыт и мои навыки - это то, чем я с огромной радостью поделюсь с вами.
Подписывайтесь, и уже совсем скоро вы начнете создавать собственные миры!
До встречи!
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
В современном мире программирование стало одной из самых востребованных и полезных навыков. Существует множество приложений, которые могут помочь вам освоить различные языки программирования и научиться писать код. В этой статье мы рассмотрим несколько лучших приложений для обучения программированию.
Существуют множество приложений для обучения программированию, и каждое из них имеет свои преимущества и недостатки. Выбор подходящего приложения зависит от ваших целей, уровня подготовки и предпочтений. Независимо от того, являетесь ли вы новичком или опытным программистом, вы найдете приложение, которое поможет вам развить свои навыки и достичь успехов в программировании.
Словами будем считать последовательности букв, разделённых пробелами. Знаки препинания не являются частью слова.
ПРИМЕР: если мы ввели строку
Моя головная боль: математика, физика, информатика.
программа должна вывести:
Моя боль физика головная математика информатика
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]
Или можете скачать готовым файликом 🔽🔽🔽
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Все началось с обсуждения в баре о том, как информационные технологии развиваются и накапливают собственное историческое наследие. Когда человек получает высшее художественное образование, он обязательно изучает Историю Искусств(History of Art). Это имеет огромное значение, потому что современные достижения не возникают вдруг, они — результат долгого и сложного процесса эволюции. Аналогично и с информационными технологиями: их развитие — это эволюционный процесс. Каждая новая разработка опирается на опыт, накопленный предшествующими. Уже сегодня в учебных заведениях нужно преподавать не только Компьютерные Науки(Computer Science), но и Историю Компьютерных Технологий(History of Computer Science). Исследование старых вычислительных технологий может приносить не только удовольствие, но и быть источником идей для разработки чего-то нового.
Или нас ждет новая религия и поклонение технологиям древних
В конце концов, разговор в баре навеял воспоминания о проекте под названием «COBOL на инвалидной коляске». Это джаст фор фан веб фреймворк на COBOL. Сегодня мы создадим на этом фреймворке бэкенд, который будет генерировать JSON. Такой бэкенд вполне пригодится для любого мобильного приложения. Посмотрим как технологии прошлого работают с технологиями современными.
COBOL расшифровывается как COmmon Business-Oriented Language. Язык программирования COBOL начал разрабатываться в 1959 году и был выпущен в 1969 году. На момент написания статьи ему исполнилось 65 лет. Обычно люди, которые умеют на нем программировать, примерно того же возраста. Несмотря на это, COBOL продолжает использоваться в некоторых крупных банках. Вполне возможно что код, который до сих пор обслуживает пользователей, пережил большинство своих создателей.
COBOL стал первым языком, который оказался идеально подходящим для своих задач. В определённом смысле COBOL стал той искрой, которая зажгла нашу современную компьютерную эру. До появления COBOL разработчики приходилось использовать к различные версии ассемблера, что не очень-то удобно.
В 1959 году программистка Мэри Хоуэс пришла к выводу, что отрасли требуется язык программирования, который позволит легко писать программы и будет универсально совместим с любой машиной. Для этого она организовала комитет экспертов, включая представителей только зарождающегося сектора бизнес-компьютеров, для работы над созданием такого языка под эгидой Министерства обороны. Цель заключалась в разработке языка, который мог бы быть понятен и доступен любому менеджеру компании, даже если он не имеет программного образования.
Спустя десятилетие работы, активно продвигаемой множеством женщин-суперзвёзд этой отрасли, например, пионеркой компьютерных наук Джин Саммет, был создан простой в понимании язык. Например, для сложения двух чисел можно было написать ADD Num1, Num2 GIVING Result. Чтобы выполнить вычисление три раза, нужно было написать PERFORM 3 TIMES.
Начнем сразу с примера и попробуем разобраться что в этом примере происходит
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 символов.
* — строка комментарий,
— — строка «продолжение»,
D — строка debug.
Каждая программа на 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. – как следует из названия, описывает среду, в которой создаётся программа. Этот раздел включает в себя две секции.
DATA DIVISION. — содержит описания всех переменных. Включает в себя 4 секции:
PROCEDURE DIVISION. — включает в себя основную часть программы. Эта часть состоит из пользовательских секций и параграфов, которые содержат сами выражения. В нашем случае имеется только один параграф:
BEGIN. пользовательский параграф.
DISPLAY "Hello World!". STOP RUN. Собственно сами выражения.
Кстати, в COBOL 300 ключевых слов. Для сравнения, в Go всего 25
И напоследок. Каждое выражение должно заканчиваться «точкой», а регистр выражений не важен.
Мы уже овладели искусством написания простых программ на языке 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>
Все эти сложности с таблицами нужны, чтобы можно было удобно использовать названия в шаблонах
Чтобы сделать что-то похожее на 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
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий.
Эпизод 6. Объектные модели и специальные методы.
Часть 2. Модель "Генератор и итератор".
Разработка прикладного программного обеспечения на языке Python с применением библиотеки Qt (PySide6), СУБД PostgreSQL и других технологий
Эпизод 6. Объектные модели и специальные методы.
Часть 1. Теоретическое введение.