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

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

Практические знания и советы по:
- Python
- Selenium
- командная строка
- C++
- много других интересностей, которые пригодятся вам в профессии
Download Telegram
«Есть ли какие то симуляторы тестировки? Чтобы практиковаться»

https://django-todo.org



#вопросОтвет #расскажуЗаМинуту #тестирование
👍3👎1🤔1
‼️ Знак ‼️

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

Начни прямо сегодня!

- скачай питон

- начни писать что-то

- начни писать в файлике простенькую HTML-страничку

- напиши тест-кейсы для какого-то простого сайта

- полистай книжку по программированию

- поищи тут короткие ролики для вдохновения, что можно сделать простого

У тебя получится

#мотивация #главноеНачать #вкатывание
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎1🤔1
А вот зацените, какие нелепые баги бывают в достаточно матерых продуктах, которыми пользуются тысячи людей (36К звезд на ГитХабе)

То есть в коде количество суток вычислялось не делением на 24, а умножением. После чего это значение использовалось для понимания, пора удалять логи или нет

Надо ли говорить, что условие почти всегда выполнялось…

🤪

Вот ссылка на тикет https://github.com/pocketbase/pocketbase/pull/5179

#чеБывает #забавное #баги #gitHub
👍2🤔2👎1
Ребят, есть желание сделать видос с разбором куска кода.

Какой язык хотели бы увидеть в разборе?
Anonymous Poll
11%
C/C++
78%
Python
33%
Go
0%
JavaScript/TypeScript
11%
HTML/CSS
👍2🤔2👎1
Очень хороший текст про так называемый искусственный интеллект и пиар/хайп вокруг него. Прям очень точно описано. Советую почитать, чтобы избавиться от иллюзий и создаваемого вокруг ИИ/ML/AI/ChatGPT флёра всезнайки и всемогуча, знающего все и способного решить все проблемы

#искусственныйИнтеллект #статья #полезно
👍1👎1🤔1
Forwarded from Точка сборки
Искусственного интеллекта не существует.

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

Постараюсь объяснить на пальцах, что понимается под машинным обучением и нейросетями.

Это алгоритм. Как и любой алгоритм, он справляется (худо-бедно) с каким-то классом задач, но по определению не может решить ЛЮБУЮ задачу. Нейросеть — это результат статистической обработки большого массива данных, называемого обучающей выборкой. И вся её "интеллектуальность" на самом деле сводится к тому, чтобы при получении каких-то входных данных выплюнуть результат, который сохранился при обучении на тех конкретных данных.

Грубо, нейронке дали на вход тысячи разных фото с котиками, и сказали — это котик. Потом дали ещё столько же фоток собакенов — это собакен. В нейронах отпечатались числовые коэффициенты (веса) и можно теперь на вход подавать какую-то новую фотку и ожидать на выходе что-то вроде "это 34% котик и 18% собак". Я намеренно не буду углубляться в особенности алгоритмов и разные способы сделать их "умнее". Важен принцип: нейросети — это алгоритм для распознавания паттернов, образов. Там нет интеллектуальной деятельности от слова совсем.

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

Также как сортировка пузырьком сортирует массивы данных, но не может играть в шахматы или строить маршрут.

Как и у любого алгоритма, у нейросетей есть свои минусы и ограничения. Первое, что вытекает из определения — это обучающая выборка. Она должна быть очень большой, очень полной и очень достоверной. Если мы дали всего по 100 фоток котиков и собак, точность распознавания будет никакая. Если мы не додали фоток мышей, то грызуны будут распознаваться котопсами. Если мы взяли в качестве источника википедию, то итоговая нейронка будет с явно перекошенными политическими убеждениями.

Самое прикольное, что исправить "убеждения" нейронки очень сложно, т.к. она представляет собой не структурированную библиотеку с человеко-читабельными записями, а просто кучу цифр и какая там цифра за что отвечает — невозможно определить. Это приводит к смешным (и обидным) казусам, типа того как Google Photos распознавали негров как обезьян, и к вынужденному обкладыванию костылями поверх выданных результатов вроде исправления 6+пальцевых персонажей или ручной цензуры — про Путина не говорить, порнуху не рисовать. В общем, если в обучающую выборку когда-то попали кривые данные, то выковырять их оттуда никак не получится — проще обучить заново.

На этом страдания разработчиков не заканчиваются: выбор параметров и структуры нейросети — штука нетривиальная и делается методом проб и ошибок с подключением интуиции (т.к. у этой задачи нет правильного ответа). Сколько у нейронки входов/выходов, глубина и прочее — всё это определяется разработчиком и, соответственно, тоже может быть зафакаплено.

Нейросети очень долго и дорого обучать — требуется много процессорной мощи и электроэнергии. А ещё их очень сложно "дообучивать" в реальном времени на новых данных: новости должны просочиться в нейрончики, и как-то скорректировать веса связей, обученных ранее (см. выше про исправление убеждений).

В общем, конечным пользователям всегда стоит задаваться вопросами:
- На каких данных обучалась нейронка?
- Кто эти данные предоставил и можно ли ему доверять?
- Являются ли данные достоверными и актуальными?
- Как мы можем убедиться в том, что ничего левого в нейронку не попало (спойлер: никак)?

Текст получился большим, так что вопросы о том, заменит ли ИИ человека, почему нейросети внедряют во всё подряд, почему в это вливают огромные бабки, случится ли вот-вот качественный скачок, мы оставим до следующего раза.
👍3
P.S. кстати, теоретическая база ИИ была заложена еще в 60-х годах, однако тогда еще не было достаточных вычислительных мощностей, чтобы реализовать это на практике
Я там дропнул новый релиз моей утилитки для генерации красивых плашек для ГитХаба с вашей статистикой по языкам

https://github.com/DiPaolo/git-stats-plate-gen/releases/tag/v2.1.0

Пробуйте, отписывайте баги, пожелания, похвальбы

#git #news #release
👍3👎1🤔1
спешу поделиться с вами радостью!

в совсем недавно вышедший питон 3.13 вошел мой фикс 😃 ууууууррррааааааа 🥳 несказанно счастлив и горжусь 💪

бага была зарепорчена мною еще года три назад, и пофикшена тогда же:

argparse incorrectly shows help string on a new line in case of long command string (https://github.com/python/cpython/issues/87041)

а вот и сам фикс: https://github.com/python/cpython/commit/8d3a0fecbe2edb69cf66db82f1c59601aac94651

так что вот, приложил свою руку 😎☺️

#python
🔥3👍2👎21👏1🤔1🤓1
что же касается самого релиза, то я для себя отметил следующее:

- PEP 703 – Making the Global Interpreter Lock Optional in CPython (https://peps.python.org/pep-0703/)
- вместо него есть штука Free-threaded CPython (https://docs.python.org/3/whatsnew/3.13.html#free-threaded-cpython)
- A better interactive interpreter (https://docs.python.org/3/whatsnew/3.13.html#whatsnew313-better-interactive-interpreter)
- PEP 730 – Adding iOS as a supported platform (https://peps.python.org/pep-0730/)
- PEP 738 – Adding Android as a supported platform (https://peps.python.org/pep-0738/)

полный список фич и обновлений тут https://www.python.org/downloads/release/python-3130/

🐍

#python #release
👍5👎2🤔2
👻

всех с пятницей
👻2
Forwarded from Yandex Infrastructure
Не бойся! Я всего лишь баг на проде, обнаруженный в пятницу вечером. Давай смотреть друг на друга до тех пор, пока меня не заметят все остальные 💀🔥
😁4🫡4😱2
как ускорить своего бота в 10x раз 🚀

сегодня покажу одну маленькую вещь, которая может значительно ускорить вашу систему. Эта вещь – кэширование. Кэширование активно применяется на всех уровнях: от кэша процессора L1/L2/L3 и до кэширующих баз данных типа Redis

вкратце, суть такова: если есть сложные вычисления либо доступ к данным занимает длительное время, и данные какое-то время будут актуальны – можно их сохранить «поближе» к себе в более скоростном месте

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

надеюсь, тут все понятно. теперь к мааааааааленькому одному конкретному примеру, как я это сделал на практике

есть у меня бот, который показывает погоду в нескольких городах. Погоду он берет с некоторого погодного АПИ. На каждый город (допустим их 4) нужно сходить с запросом к серверу

но мы понимаем, что в течение часа погода сильно не изменится. Потому я решаю е ходить в течение часа за погодой в том же регионе, а сохранить ее у себя. ВАЖНО я бы не мог сделать такое допущение, если бы это был сервис предупреждения о бурях и другой непогоде где-нибудь в горах. Мой бот позволяет мне пренебречь этим и показывать «старую» погода в пределах часа

в Питоне есть встроенный удобные декоратор – @lru_cache (https://docs.python.org/3/library/functools.html). Однако в нем нету TTL (time to live – то есть сколько наши данные не будут «протухшими» по времени)

чтобы не городить огород самому с этим TTL вокруг стандартной функции, я легко нашел и воспользовался библиотеку с такой функциональностью – https://pypi.org/project/cachetools/

вот что получилось:


@cached(cache=TTLCache(maxsize=512, ttl=60*60))
def get_weather_at_location(latitude, longitude):
ret = requests.get(
f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}"
f"&hourly=temperature_2m,weather_code,wind_speed_10m&wind_speed_unit=ms&current_weather=true&timezone=Asia%2FNovosibirsk")

return ret.json()


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

вот результат – 10x в скорости ответа. А это значит, что мои пользователи увидят ответ значительно быстрее 😀

вот запрос первый раз (некэшированные данные)

2024-11-04 13:57:58,786 - root - INFO - request stats (chat_id=218988127, message_id=121, time_sec=1.85)


после этого запроса они закэшировались, и то же обращение за погодой отрабатывает уже в 10 раз быстрее!


2024-11-04 13:58:02,425 - root - INFO - request stats (chat_id=218988127, message_id=123, time_sec=0.17)


и так происходит в течение часа (обратите внимание на время):

2024-11-04 14:18:35,425 - root - INFO - request stats (chat_id=218988127, message_id=133, time_sec=0.139)


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


2024-11-04 15:10:33,043 - root - INFO - request stats (chat_id=218988127, message_id=137, time_sec=1.89)


после чего – опять быстро выдаем ответ пользователю:


2024-11-04 15:10:36,277 - root - INFO - request stats (chat_id=218988127, message_id=139, time_sec=0.215)


вот такие дела… на все про все – 15 минут и 10x быстрее работа бота 😎

#python #cache #ускоряем #боты
👍3👎2🔥2🤔1🤓1
Реальный Код
Формат времени и даты Сегодня расскажу вам о стандарте представления времени и дат, который часто используется в разработке. Стандарт этот именуется 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