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

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

Практические знания и советы по:
- Python
- Selenium
- командная строка
- C++
- много других интересностей, которые пригодятся вам в профессии
Download Telegram
Реальный Код
Формат времени и даты Сегодня расскажу вам о стандарте представления времени и дат, который часто используется в разработке. Стандарт этот именуется ISO 8601. Почему важно знать о нем? Потому что он часто используется при разработке ПО: хранение логов, передача…
храните даты в UTC формате

хочу сегодня апнуть тему про формат дат и дать совет из заголовка

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

то есть, еще раз: в базе лежат даты в ISO формате и только в UTC, никаких специфичных +3/+7 и прочее…

то же самое касается логов – только в UTC

объяснение простое:
* клиенты пирложения/системы могут находиться в разных часовых поясах
* пользователь может перемещаться по миру и вносить данные в приложение из разных часовых поясов
* распределенная система может иметь сервера (которые пишут в базу и в логи), которые находятся в разных территориальных локациях

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

когда-нибудь скажете мне спасибо за этот совет 😉

#совет #дата #логи
👍5👎2🤔1🙏1
просьба

коллеги… товарищи… друзья… вкатуны и просто сочувствующие 🤗

я вот начал чуть-по-чуть опять писать сюда… и грустно видеть всего 13 подписчиков 🥺

поделитесь, пожалуйста, канальчиком с теми, кому это может быть интересно, полезно, ну или кому просто нечего делать 🤭

мне будет приятно и чуть больше мотивировать писать сюда чаще

ну и кстати, не стесняйтесь писать свои вопросы в коментах. есть вопрос у вас – он всяко может интересовать и других

#просьба
👍7🤔2👎1
накину про чистый код 😈

держите свои пуканы 🔥🔥🔥

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

вот статья на английском. там же есть ссылка на YouTube
https://www.computerenhance.com/p/clean-code-horrible-performance

свое мнение озвучивать не буду 😆 может как-нибудь потом отдельным постом

#холивар #чистыйКод #ссылки
🔥3🤓3😈2
Не первый раз попадается вакансия, в которой указывается подход к документации как Docs as a Code (DAAC, получается 😄).

Так вот, это именно тот подход, что я интуитивно пропагандирую и внедряю последние лет 7-8.

Ведь это очевидно (ну для меня по-крайней мере), что дока должна:

// лежать рядом с кодом, чтобы соответствовать и отражать изменения в коде (добавил фичу в фиче-бранче – обновил доку)

// быть в виде .md-файла, чтобы его легко было менять и трекать изменения

// собираться как часть продукта, например, генерации pdf как офлайн часть + встраиваться в продукт во время сборки для онлайн формата

// тестироваться ровно также, как и остальные части продукта

// скриншоты должны автоматически генериться также на этапе сборки продукта, чтобы отражать его актуальную часть (+закрываем вопрос автоматизации создания и унификации скриншотов)

#документация #daac
🔥3👍1💯1
Forwarded from Job in IT&Digital
Ведущий технический писатель (docs as code)
Удаленный формат (только по России) или гибрид (по желанию), офис в Москве.
180К — 280К

Известная российская компания, есть аккредитация.
Уникальный для России проект, которым пользуются 350К разработчиков.

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

Подробнее
Ищет Оксана Полякова op@new.hr
👀2
лист компрехэншн

если вы хоть раз задумывались, зачем нужны list comprehension в питоне, и, может быть думали, что они быстрее, то все просто и однозначный ответ раскрыт в PEP 202 (https://peps.python.org/pep-0202/):

Rationale

List comprehensions provide a more concise way to create lists in situations where map() and filter() and/or nested loops would currently be used.


так что это всего лишь для краткости записи


[subscriber.add_mark(random.choice(['👍', '👎', '🤔'])) for subscriber in get_subscribers()]


#python #pep #comprehension
👍42🔥2🤓1👀1
хотелось написать сюда, но не знал о чем… 🤔

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

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

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

#python #stats #terminal
🔥5😁2🤓2
а вот вам немножечко раскрытие меня и моих локов 🤭 (LOC, Lines f Code) и как оно менялось за год

первая картинка – 14 сентября 2023, вторая – 13 ноября 2024

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

также видно, что чутка щупал плюсы и немного Го

ну и видно, что питон просто жутко вырвался вперед – более половины моего кода – на питоне!

и в целом, ±25K строк кода за год только лишь на питоне и только лишь пет- и сайд-проектов – это мощно! 💪 горжусь собой 😇

да, это только лишь мой код не включая third-party и dependencies, конечно же

ну а сделать такие же графики и запулить их к себе в ГитХаб можно с помощью утилиты https://github.com/DiPaolo/git-stats-plate-gen

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

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

#sourceCode #tools #loc
👏4🔥3🏆3😎1
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
эффект Зейгарник

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

не так давно узнал одну штуку – так называемый эффект Зейгарник. открыт был как раз той самой дамой с такой фамилией сто лет назад

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

это перекликается с программами: положил данные в стек, выполнил задачу – попнул 😅 из стека. и все – забыли-едем дальше. а вот если данные из стека по какой-то причине не выбрасываются – то происходит memory leak (утечка памяти) – плохая, вредная и порой трудноуловимая штука (как раз кстати щас такую исследую в ffmpeg на определенных данных – но это другая история…)

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

все это еще сильно перекликается с гештальт-подходом

интересеная, в общем, штука... рекомендую ознакомиться, кому интересно

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

в общем, возьмите на заметку 😉 не все ж нам про кодинг тут разговаривать…

#психология #неКодинг
👍3🔥32🤔1👀1
вообще, очень часто и много хочется в последнее время писать сюда. потому ждите… 😜

ну и рассказывайте про канальчик своим друзьям/знакомым/коллегам. мне будет невероятно приятно, если число подписчиков будет расти ☺️
🔥2🥰2🎉21🦄1
Скоро начну опять снимать для вас видосы на новом оборудовании. Очень надеюсь, что качество станет лучше и смотреть будет приятнее ☺️
🔥52👍2🎉2🤗2
то самое слово – корутины 😱

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

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

#python #pep #coroutines #async
🔥3🤓2👀2
обо мне 👋

кстати, надо наверное немного сказать о себе…

кратко:
// 20+ лет в разработке
// 15+ лет разработки в области видео, стриминга, транскодирования, анализа медиа и телевидения + все что с этим связано
// 10+ лет управления командами

~ ~ ~ ~ ~ ~ ~ ~ ~

пара моих статей на Medium: https://medium.com/@dipaolo
GitHub: https://github.com/DiPaolo
GitLab: https://gitlab.com/dipaolo
LinkedIn: https://www.linkedin.com/in/pavel-ditenbir-31838965/

~ ~ ~ ~ ~ ~ ~ ~ ~

мои каналы:

YouTube: https://www.youtube.com/@the_real_coding
Yandex.Дзен: https://dzen.ru/the_real_coding
ВК: https://vk.com/the_real_coding

всем привет здесь 🙌

#обоМне
👍53🔥2👏2
Реальный Код pinned «обо мне 👋 кстати, надо наверное немного сказать о себе… кратко: // 20+ лет в разработке // 15+ лет разработки в области видео, стриминга, транскодирования, анализа медиа и телевидения + все что с этим связано // 10+ лет управления командами ~ ~ ~ ~ ~ ~…»
Реальный Код
хотелось написать сюда, но не знал о чем… 🤔 … и накидал скрипт, который считает статистику использования мною команд в терминале что получилось – ниже 👇 выше ☝️ можно такое на собесах спрашивать, чтобы больше узнать о человеке: чем пользуется, какой стек…
сегодня начинаю серию постов про мои топ утилиты/программы, которые я чаще всего использую

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

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
а вот кстати в тему собесов…

мое мнение: в ИТ среди разработчиков и тимлидов очень многие просто не умеют проводить собеседования!

при этом собеседования либо превращаются в экзамен, либо в бенефис самоутверждения, либо в почесывание своего ЧСВ у 25-тилетних всех из себя разсеньористых сеньоров, которые прочитали две книги (ГоФ и кабанчика) и считают себя мега-экспертными гуру в разработке

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

либо собеседования проводят не те люди, которые должны 🤦‍♂️ ну это ваще фейспалм и проёб со стороны руководства. и да, я такое встречал, в том числе в компаниях, где я работаю либо работал 🤬

и вот вам примеры:

// глава разработки отдела в 60+ человек участвует в собесах для поиска человека не то что в нижестоящую команду, а в команду двумя уровнями ниже, то есть между ним и новым человеком будет 2 тимлида!

// на собесах черезчур много людей: приходят такие HR, глава разработки, тимлид и еще два разработчика… WAAAAAT?!!

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

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

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

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

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

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

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

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

вот вам пример, какие уровни зрелости человека могут быть на основе его коммитов на ГитХабе/ГитЛабе:

// не пользуется системой контроля версий или закоммитил тестовое один раз одним куском как было на локальном диске
// коммит раз в месяц с текстом "-" со всеми потрохами личных настроек его ИДЕ
// коммит раз в неделю с текстом "as is"
// обдуманные коммиты с разбиением на атомарные фичи + используется .gitignore
// настроенный CI/CD с пре-коммит хуком, автоматическим прогоном тестов
// все настроено с отвязкой от ИДЕ, можно девелопить продукт под все платформы
// все что выше + заполненный ридми
// все то же самое + выкатка релиза с автоматическими релиз ноутсами, документация
// все выше + поддержка проекта: нетоксичный ответ на вопросы пользователей, прием ПРов, ведение проекта в ГитХабе (задачи, планы по релизам) и прочее

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

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

и не надо никаких задротских разворотов списка, круглых люков и гномиков 🤮

#собесы #зрелось #софтСкиллы
2🔥2❤‍🔥1👍1💯1