Реальный Код
24 subscribers
41 photos
6 videos
53 links
The Real Coding - твой проводник в мир разработки ПО.

Делюсь реальным опытом разработки с новичками.

Практические знания и советы по:
- Python
- Selenium
- командная строка
- C++
- много других интересностей, которые пригодятся вам в профессии
Download Telegram
хотелось написать сюда, но не знал о чем… 🤔

… и накидал скрипт, который считает статистику использования мною команд в терминале

что получилось – ниже 👇 выше ☝️

можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек 😆

#python #stats #terminal
🔥5😁2🤓2
finita la comedia

нет-нет, все хорошо, просто речь сегодня пойдет про ключевое слово (а точнее – аннотацию) final в питоне

надо сказать, что я лично узнал об этой фиче совсем недавно, тогда как в языке она присутствует с версии 3.8

ну и сразу дам ссылку на PEP – https://peps.python.org/pep-0591/

если говорить кратко – это аналог ключевого слова const в других языках. тем самым мы говорим, что значение переменной не будет меняться

хотя погодите! все ли так очевидно? давайте смотреть на примере…


from typing import Final

TEST = 11
print(f'TEST before: {TEST}')

TEST += 1
print(f'TEST after: {TEST}')

TEST_CONST: Final = 12
print(f'TEST_CONST before: {TEST_CONST}')

TEST_CONST += 1
print(f'TEST_CONST after: {TEST_CONST}')


вывод:

TEST before: 11
TEST after: 12
TEST_CONST before: 12
TEST_CONST after: 13


хммммм…. но как же так?! я же сам сказал, что это константа, как мы смогли поменять ее значение??

все дело в том, что мы должны помнить, питон – нетипизированный язык! и все эти задания типов, в том числе и рассматриваемая сегодня аннотация final – это не строгое правило, а лишь подсказка (так и называется – type hint) для IDE и для утилит статического анализа

то есть, в ИДЕшке-то оно вам подсветит возможную проблему, а статический анализатор навроде ruff – ругнется и скажет, что у вас ошибка в коде. при всем при это код вы сможете запустить и он будет изменять значение вашей переменной, обозначенной как final!

так что имейте ввиду эту особенность, ну и конечно крайне рекомендую – используйте аннотацию final везде, где только возможно. этим вы еще дополнительно скажете человеку, который будет читать ваш код, что это – константа, и не предполагается ее изменение. хотя, теперь вы знаете, что если очень хочется… 😁

#python #final
🤔3😱3👀3
я завалил собес по питону 😒

это было ожидаемо, на самом деле… ввиду моей особенности. те, кто знакомы со мной лично, могут знать: я очень плох в технических собесах

я могу что угодно написать: написать быстро, хорошо, качественно, практически на любом языке и независимо от фреймворка… я легко переключаюсь между языками и фреймворками, даже стеками… но на собесе… 😒😒😒 на собесе совсем не так

такая вот у меня особенность 🤷‍♂️ да, я хорош в практике и очень плох в теории. а готовиться-зубрить… ну честно говоря не хочется, да и смысла большого не вижу

вообще, собес был ну очень простой 🤦‍♂️

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

что ваще смешно: была задача, которую я сам делал 2 недели назад 😅 в своем рабочем коде. мне там понадобилось считать длительность отработки запроса, и я прикрутил декоратор, который это делает. ну прикрутил за 20 минут и забыл

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

и тут они значит дают задачу: написать декоратор, который запускает функцию N раз и считает длительность ее выполнения. и я не смог его написать! 😩 я помнил, когда, где и для чего писал такой же декоратор, а вот вспомнить наизусть синтаксис я не смог 🤷‍♂️

короче, такие у меня дела…

это я все к чему… ну во-первых, поделиться с вами. во-вторых, вас ждут решения этих задач 😅

#python #собес
😱2😢2😭2😨1😎1
то самое слово – корутины 😱

читаю сейчас первоисточник про корутины в питоне – PEP 492 – Coroutines with async and await syntax (https://peps.python.org/pep-0492/)

позже приду к вам с мыслями и информацией по поводу асинхронщины нашей любимой 😆 … и такой полезной 🔥

#python #pep #coroutines #async
🔥3🤓2👀2
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую

и начинаем мы... па-бааааааа-мммм... ну конечно же с питона 😆

python – это программа-интерпретатор одноименного языка программирования. что значит интерпретатор? а это такая программа, которая читает исходный код программы на этом языке и исполняет каждую строку за строкой

пробежимся по основным возможностям...

вообще, вот следующие три варианта можно использовать во всех unix-подобных операционных системах и частично с некоторыми особенностями – в Windows

// показать справку по аргументам программы и краткую информацию по ее использованию (вместо питона может быть любая программа):

python --help


в среде Windows исторически было принято вызывать страницу с описанием параметров с помощью аргумента /h или /?, однако сейчас все больше программ, которые используют unix-like стиль. да и в целом, кросс-платформенные программы обычно используют тот же unix-like подход

// вывести версию программы:

python --version


// получить развернутую помощь по программе (unix-like системы: Linux, MacOS и прочие):

man python


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

итак, к питону...

// запустить скрипт на выполнение:

python my_script.py


// запустить пакет на выполнение:

python -m package


например, вывести список установленных пакетов:

python -m pip list


тут мы говорим интерпретатору запустить пакет (`-m`) с именем pip и передать ему параметр list. в итоге будет распечатан список установленных пакетов

// выполнить кусок питоновского кода:

python -c <код>


например, вот так мы можем сгенерировать пароль:

python -c "import random; print(''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)))"


этот код выведет что-то вроде:

2Lqszm8l


или в другой раз:

WTgs90No


// запустить интерактивную среду Python (она ещеназывается REPL, Read-Eval-Print Loop), или, проще говоря, ИДЕ на самых минималках, а скорее даже питонячий плейграунд для проверки каких-то конструкций языка:

python


при этом у вас появится в начале строки такой знак:

>>>


который означает, что вы находитесь как раз в интерактивном интерпретаторе питона

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

для выхода используйте функцию exit()

вот например как может это выглядеть:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2024, 11, 16, 20, 9, 31, 518836)
>>> ll = [1, 2, 3, 4, 5]
>>> ll
[1, 2, 3, 4, 5]
>>> '-'.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ', '.join(ll)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>> ll = ['a', 'b', 'c']
>>> '-'.join(ll)
'a-b-c'
>>> exit()


на этом на сегодня все. happy питонинга вам 😉

#python #repl #terminal
🔥3👍21
This media is not supported in your browser
VIEW IN TELEGRAM
какая гадость эта ваша динамическая типизация… 😅

#humour #python
3🤣3🔥2🎄2
о полезности чтения чужих исходников

я кажется уже упомниал, что крайне полезно читать чужой код. благо, его как говна за баней очень много на ГитХабе: по любой тематике, любого качества, на любом языке

через это ты не только учишься быстро понимать и вникать в код (а это тоже навык), но самое главное – можешь учиться новому (к вопросу про мой предыдущий пост, кстати☝️), перенимать какие-то фишки, приемчики или даже узнавать новые конструкции языка или используемые бибилиотеки. ну а где-то, наоборот, можешь понять, почему ты бы написал лучше и чем данный код плох, какие есть минусы и почему его сложно читать (=поддерживать)

это, кстати, касается и код-ревью: важно читать и перенимать чужой опыт и фишечки написания кода

так вот… читаю я сегодня на досуге код OpenShot (это такой видеоредактор). а что примечательно – его ГУЕвая часть написана на связке Python+Qt

читаю-читаю, и натыкаюсь в разделе инициализации логов на такую конструкцию:

#
# Create rotating file handler
#
if os.path.exists(info.USER_PATH):
fh = logging.handlers.RotatingFileHandler(
os.path.join(info.USER_PATH, 'openshot-qt.log'),
encoding="utf-8",
maxBytes=25*1024*1024, backupCount=3)
fh.setLevel(info.LOG_LEVEL_FILE)
fh.setFormatter(file_formatter)
log.addHandler(fh)
else:
class DummyHandler:
def setLevel(self, level):
return True
fh = DummyHandler()


и узнаю, что в питоне, оказывается, из коробки есть log rotation (об этом в другой раз; вкратце, это когда лог пишется до определенного момента в файл, после чего начинает писаться в следующий файл, чтобы файлы не разрастались)

поглядел в доке: так там целая поляна всевозможных лог хендлеров, от null до отправления UDP-датаграмм

так что в очередной раз даю совет: читайте чужой код!

#python #log #sourceCode #опыт
🔥2👍1👌1
в Питоне для генерации чего-то более-менее критичного к секьюрности рекомендуется использовать пакет secrets вместо random

вот дока https://docs.python.org/3/library/secrets.html

а вот PEP 506 с деталями https://peps.python.org/pep-0506/

the rule of thumb: random используем для всякого матмоделирования и некриитчного к безопасности. secrets – для генерации токенов, паролей и всего прочего на проде, что нужно хранить безопасно. Кстати, там же есть удобная функция для генерации валидных рандомных частей УРЛов – secrets.token_urlsafe()

почитайте – крайне полезные вещи там

#security #python
👍1🔥1
да уж… питона у меня на ГХ все больше и больше

второй график – на начало этого года

третий – на начало 2024

четвертый – два года назад

кстати, также видно и развитие утилиты git-stats-plate-gen за те же два года

итого, что у нас по питону:
авг 2023 – 25К
янв 2024 – 33К
янв 2025 – 58К
авг 2025 – 77К

🤪

это только полностью мои репы, которые мейнтейню в одно лицо. Никаких форков или те, куда я контрибутил «вовне»

#python #stats #gitHub
🔥1