itertools: не хранить то, что можно перебирать по одному
Когда начинаешь писать циклы, легко собрать промежуточный список там, где он не нужен. Модуль itertools из стандартной библиотеки Python помогает обходиться без этих лишних коллекций: элементы создаются по запросу, не накапливаясь в памяти. Это особенно удобно для больших файлов и последовательностей, которые могут быть бесконечными.
В нём три группы инструментов: бесконечные итераторы вроде
В статье разобрали, где itertools помогает, а где лучше обойтись без него.
Когда начинаешь писать циклы, легко собрать промежуточный список там, где он не нужен. Модуль itertools из стандартной библиотеки Python помогает обходиться без этих лишних коллекций: элементы создаются по запросу, не накапливаясь в памяти. Это особенно удобно для больших файлов и последовательностей, которые могут быть бесконечными.
В нём три группы инструментов: бесконечные итераторы вроде
count, конечные вроде chain и islice, и комбинаторные, которые перебирают варианты. Например, islice(count(1), 5) выдаст первые пять чисел, не собирая список.В статье разобрали, где itertools помогает, а где лучше обойтись без него.
✍2🔥1🌭1
Forwarded from Веб-страница
Деструктуризация в JS: когда она мешает, а не помогает
Мэтт Смит разобрал, почему перестал разбивать объекты на переменные по первой же возможности. Привычка вроде
Его правило: оставляйте точку.
Такой подход упрощает поддержку кода: меньше магических переменных, меньше когнитивной нагрузки, проще читать спустя месяцы. Разобрался Смит здесь.
Мэтт Смит разобрал, почему перестал разбивать объекты на переменные по первой же возможности. Привычка вроде
const { status } = project экономит пару символов, но в длинной функции status превращается в магическую переменную: приходится листать вверх, чтобы вспомнить, откуда она взялась.Его правило: оставляйте точку.
project.status сразу говорит, из какого объекта значение, а голая status — нет. То же с post.title или user.name: повторять объект не страшно, если контекст остаётся на виду. Деструктурируйте только когда объект уже очевиден из окружения — например, внутри короткого колбэка.Такой подход упрощает поддержку кода: меньше магических переменных, меньше когнитивной нагрузки, проще читать спустя месяцы. Разобрался Смит здесь.
☃2❤1👍1
Forwarded from Zen of Python
OpenCode: ИИ-агент для Python в терминале, который не уводит код в облако
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
Если вы предпочитаете командную строку графическим IDE, OpenCode может оказаться удобнее: он работает как TUI прямо в консоли, понимает контекст Python-проекта и рефакторит код с учётом всей кодовой базы, а не вставленного фрагмента.
Для питониста тут два полезных момента. Первый — локальность: провайдер подключается из вашей среды, файлы остаются на вашей машине. Второй: встроенный Pyright и режимы Plan/Build, которые либо показывают план правок, либо применяют его сразу. Ещё AGENTS.md позволяет явно прописать правила проекта: от стиля до команд запуска.
Для старта достаточно бесплатного ключа Gemini. Подробности в обзоре.
❤4👍1
Forwarded from Веб-страница
React.iss.onemo не спасает, если в пропсы летят inline-объекты
Поисковая строка тормозит список, Profiler рисует 200 лишних рендеров, а вы уже обернули всё в
Меня убедили цифры из эксперимента: 200 memoизированных строк на один keystroke рендерились 243,9 мс, после стабилизации ссылок — 6 мс. Поэтому статические объекты выносите за пределы компонента, а
Полный разбор с примерами
Поисковая строка тормозит список, Profiler рисует 200 лишних рендеров, а вы уже обернули всё в
React.iss.onemo и добавили useCallback на обработчики. Виноват обычно один JSX-паттерн: style={{ padding: 16 }} или колбэк прямо в разметке. memo сравнивает пропсы через Object.is, а для объектов и функций это проверка по ссылке: каждый рендер родителя создаёт новую ссылку, и React снова рисует дочерний компонент.Меня убедили цифры из эксперимента: 200 memoизированных строк на один keystroke рендерились 243,9 мс, после стабилизации ссылок — 6 мс. Поэтому статические объекты выносите за пределы компонента, а
useCallback добавляйте только там, где колбэк реально уходит в memoизированного потомка. Хуки «на всякий случай» не помогут: сначала меряйте в Profiler.Полный разбор с примерами
🤔2
Соберите первую консольную утилиту (CLI) на Go, которая понимает команды
Если вы уже пробовали Go и хотите, чтобы программа реагировала на ввод в терминале, попробуйте Cobra. Это библиотека, которая берёт на себя разбор команд, их аргументов и справки, поэтому ваш скрипт ведёт себя как настоящая утилита.
Автор статьи шаг за шагом строит CLI
После прохождения добавьте команду
Если вы уже пробовали Go и хотите, чтобы программа реагировала на ввод в терминале, попробуйте Cobra. Это библиотека, которая берёт на себя разбор команд, их аргументов и справки, поэтому ваш скрипт ведёт себя как настоящая утилита.
Автор статьи шаг за шагом строит CLI
k8s-info с командами version и cluster. Главное здесь не название, а принцип: отдельный файл под каждую команду, общий корневой файл и main.go, который запускает Execute(). Повторите за автором, чтобы увидеть, как куски кода складываются в работающую программу.После прохождения добавьте команду
hello сами — это лучший способ понять, почему такая структура масштабируется.🤗2👎1🤨1🎃1
Forwarded from Типичный программист
Кто-то превратил работу PostgreSQL в SimCity
Автор PGSimCity собрал интерактивную 3D-модель движка PostgreSQL: вместо очередной схемы из документации работу базы показывают через город, по которому можно бродить. Получился рабочий прототип, где сложная система отображается через привычную метафору.
Визуализация помогает увидеть, как части движка связаны между собой, а не просто запомнить термины. Автор предупреждает, что модель пока ранняя и может содержать неточности, так что пока смотреть как на эксперимент, а не как источник правды. Но как способ взглянуть на Postgres иначе — отличная находка.
#postgresql #sql
Автор PGSimCity собрал интерактивную 3D-модель движка PostgreSQL: вместо очередной схемы из документации работу базы показывают через город, по которому можно бродить. Получился рабочий прототип, где сложная система отображается через привычную метафору.
Визуализация помогает увидеть, как части движка связаны между собой, а не просто запомнить термины. Автор предупреждает, что модель пока ранняя и может содержать неточности, так что пока смотреть как на эксперимент, а не как источник правды. Но как способ взглянуть на Postgres иначе — отличная находка.
#postgresql #sql
❤2👍2🤯2💯1
Три способа указать Java, где лежит файл
Класс
У
Когда объект готов, к нему можно применять методы вроде
Разбор с примерами
Класс
File из java.io говорит программе: «работаем с этим файлом или папкой». Но new File("test.txt") пока создаёт только объект в памяти — сам файл на диске не появляется.У
File три конструктора: один принимает путь строкой, второй склеивает папку и имя файла, третий делает то же самое, но родитель уже — тоже объект File.Когда объект готов, к нему можно применять методы вроде
getPath() или createNewFile(). Откройте IDE, создайте один и тот же файл тремя способами и сравните, что выводит getPath().Разбор с примерами
❤2❤🔥2🎉1👻1
Разберём рекурсию в C++ так, чтобы она перестала быть магией
Рекурсия: функция вызывает сама себя, пока не сработает условие остановки. В примере из статьи функция
Чтобы понять, почему это работает, смотрите на стек вызовов. Каждый новый вызов сохраняется в памяти отдельной записью, верхняя выполняется первой. Стек работает по принципу LIFO: last in, first out. Когда доходит до базового случая, записи разворачиваются обратно. Разбор с примером кода поможет увидеть это на практике.
Рекурсия: функция вызывает сама себя, пока не сработает условие остановки. В примере из статьи функция
f() печатает 0, 1, 2: каждый вызов увеличивает счётчик, а при count == 3 происходит возврат.Чтобы понять, почему это работает, смотрите на стек вызовов. Каждый новый вызов сохраняется в памяти отдельной записью, верхняя выполняется первой. Стек работает по принципу LIFO: last in, first out. Когда доходит до базового случая, записи разворачиваются обратно. Разбор с примером кода поможет увидеть это на практике.
🌭2👍1🔥1
Работающий код — ещё не значит, что проект в порядке
Часто кажется, что раз программа работает, значит, всё хорошо. Автор этой заметки, самоучка на Python, проверял свою Flask-программу для пекарни пять часов и не добавил ни одной функции. Зато убрал старый код Excel, неиспользуемые импорты, лишние зависимости и рассинхрон между README, Docker и Git.
Код на проде не равен репозиторию, который точно отражает текущую версию. Внутри накапливаются остатки старых спецификаций, устаревшие скриншоты и неиспользуемый CSS.
В разборе вы узнаете, как проверять такое хозяйство безопасно: что удалять первым делом, зачем нужен .dockerignore рядом с .gitignore и где искать лишнее.
Попробуйте пройтись по своему учебному проекту по этому же списку.
Часто кажется, что раз программа работает, значит, всё хорошо. Автор этой заметки, самоучка на Python, проверял свою Flask-программу для пекарни пять часов и не добавил ни одной функции. Зато убрал старый код Excel, неиспользуемые импорты, лишние зависимости и рассинхрон между README, Docker и Git.
Код на проде не равен репозиторию, который точно отражает текущую версию. Внутри накапливаются остатки старых спецификаций, устаревшие скриншоты и неиспользуемый CSS.
В разборе вы узнаете, как проверять такое хозяйство безопасно: что удалять первым делом, зачем нужен .dockerignore рядом с .gitignore и где искать лишнее.
Попробуйте пройтись по своему учебному проекту по этому же списку.
💯2👍1
Как понять, что вы действительно усвоили тему, а не просто прочитали
Часто после туториала кажется, что всё понятно, а на практике застреваете. Вот тест: попробуйте объяснить концепцию своими словами вслух, за 30 секунд. Без заготовленных фраз.
Этот приём из статьи про собеседования, но он отлично работает при обучении. Замыкание, разница var и let, Promise против setTimeout — берите тему, которая сейчас не даётся, и расскажите её так, будто соседу по парте. Если запнулись или начали бормотать, вы нашли дыру в понимании.
30 вопросов с примерами: выберите один и проверьте себя.
Часто после туториала кажется, что всё понятно, а на практике застреваете. Вот тест: попробуйте объяснить концепцию своими словами вслух, за 30 секунд. Без заготовленных фраз.
Этот приём из статьи про собеседования, но он отлично работает при обучении. Замыкание, разница var и let, Promise против setTimeout — берите тему, которая сейчас не даётся, и расскажите её так, будто соседу по парте. Если запнулись или начали бормотать, вы нашли дыру в понимании.
30 вопросов с примерами: выберите один и проверьте себя.
❤2👀2👍1
Как кроссчейн-мост связывает разные блокчейны
Биткоин, Эфириум и Avalanche живут по своим правилам и не разговаривают напрямую. Мост решает эту проблему: он позволяет перенести актив из одной сети в другую, не нарушая правил каждой из них.
В гайде по Avalanche Bridge показан простой сценарий: выбираете исходную сеть, сеть назначения и актив, а дальше работает сам мост. Для новичка в блокчейн-разработке это хороший способ понять, как разные сети обмениваются активами.
Биткоин, Эфириум и Avalanche живут по своим правилам и не разговаривают напрямую. Мост решает эту проблему: он позволяет перенести актив из одной сети в другую, не нарушая правил каждой из них.
В гайде по Avalanche Bridge показан простой сценарий: выбираете исходную сеть, сеть назначения и актив, а дальше работает сам мост. Для новичка в блокчейн-разработке это хороший способ понять, как разные сети обмениваются активами.
👍2🆒2❤1🤪1
Как фронтендеру войти в мобильную разработку
Мобильная разработка пугает, если кажется, что придётся учить Swift или Kotlin с нуля. Но есть пути, где ваши веб-навыки остаются полезны.
В статье разбирают три подхода. React Native ближе всего к React-разработчикам: пишете на TypeScript/JavaScript, а на выходе получаются нативные элементы экрана. Flutter идёт другим путём: использует Dart и рисует интерфейс сам, без привязки к системным компонентам. .NET MAUI подойдёт, если вы уже знакомы с C# и XAML.
Этот гайд поможет вам разобраться в ваших путях развития.
Мобильная разработка пугает, если кажется, что придётся учить Swift или Kotlin с нуля. Но есть пути, где ваши веб-навыки остаются полезны.
В статье разбирают три подхода. React Native ближе всего к React-разработчикам: пишете на TypeScript/JavaScript, а на выходе получаются нативные элементы экрана. Flutter идёт другим путём: использует Dart и рисует интерфейс сам, без привязки к системным компонентам. .NET MAUI подойдёт, если вы уже знакомы с C# и XAML.
Этот гайд поможет вам разобраться в ваших путях развития.
❤1
Почему учиться в IT стало сложнее?
Вайбкодинг создал иллюзию, что теперь любой может сделать продукт быстро и легко, всего лишь с парой подписок.
Работает это не так: необходимость разбираться в том, как всё устроено, применять знания и читать код никуда не делась.
Разбор задачи, на который раньше уходил месяц, теперь укладывается в десять минут. Именно за этот месяц набирался опыт, а теперь, хорошей базы, очень почти невозможно оценить то, что модель выдала за минуты.
Почему разбираться теперь приходится глубже и быстрее, и что с этим делать — читайте на Tproger: https://tproger.ru/articles/uchitsya-v-it-stalo-slozhnee-chto-na-samom-dele-izmenil-vajbkoding
Вайбкодинг создал иллюзию, что теперь любой может сделать продукт быстро и легко, всего лишь с парой подписок.
Работает это не так: необходимость разбираться в том, как всё устроено, применять знания и читать код никуда не делась.
Разбор задачи, на который раньше уходил месяц, теперь укладывается в десять минут. Именно за этот месяц набирался опыт, а теперь, хорошей базы, очень почти невозможно оценить то, что модель выдала за минуты.
Почему разбираться теперь приходится глубже и быстрее, и что с этим делать — читайте на Tproger: https://tproger.ru/articles/uchitsya-v-it-stalo-slozhnee-chto-na-samom-dele-izmenil-vajbkoding
❤2🔥2👍1
Как в QR-код прячут картинку, а он всё ещё работает
QR-код читается, даже если его слегка поцарапать или закрыть уголок пальцем. Это не случайность: часть чёрно-белых квадратиков внутри хранит не данные, а запасную копию на случай повреждений. Её называют коррекцией ошибок.
А раз этот запас есть, его можно потратить с пользой. Один энтузиаст сделал инструмент, который вписывает в QR-код целую картинку: он аккуратно подменяет часть «запасных» квадратиков так, чтобы сквозь узор проступало изображение, а код при этом всё ещё сканировался телефоном.
Секрет — в дизеринге. Это старый приём, когда чёрно-белыми точками имитируют полутона: где точек больше, там глаз видит тёмное, где меньше, там светлое. Тем же способом картинку раскладывают по клеткам QR-кода.
Получается красиво, но у фокуса есть предел: чем больше запаса потратить на картинку, тем хуже читается сам код. Поэтому важно не переборщить.
Можете попробовать сами — инструмент бесплатный и работает прямо в браузере.
#основы
QR-код читается, даже если его слегка поцарапать или закрыть уголок пальцем. Это не случайность: часть чёрно-белых квадратиков внутри хранит не данные, а запасную копию на случай повреждений. Её называют коррекцией ошибок.
А раз этот запас есть, его можно потратить с пользой. Один энтузиаст сделал инструмент, который вписывает в QR-код целую картинку: он аккуратно подменяет часть «запасных» квадратиков так, чтобы сквозь узор проступало изображение, а код при этом всё ещё сканировался телефоном.
Секрет — в дизеринге. Это старый приём, когда чёрно-белыми точками имитируют полутона: где точек больше, там глаз видит тёмное, где меньше, там светлое. Тем же способом картинку раскладывают по клеткам QR-кода.
Получается красиво, но у фокуса есть предел: чем больше запаса потратить на картинку, тем хуже читается сам код. Поэтому важно не переборщить.
Можете попробовать сами — инструмент бесплатный и работает прямо в браузере.
#основы
❤3👾2👍1🐳1🤝1
Магистратура МФТИ+Сколково для айтишников, которые хотят своё дело
14 августа закрывается приём заявлений на онлайн-магистратуру «Технологическое предпринимательство» (МФТИ + Сколково): https://tprg.ru/vptN
За 2 года вы с помощью ментора-предпринимателя доведёте реальный проект от идеи до защиты: свой стартап, проект с текущей работы или проект от компании-партнёра.
Формат:
— полностью онлайн, живые вебинары по выходным, 8–12 часов в неделю;
— семинары в группах до 10 человек, персональный ментор;
— демодни с бизнес-ангелами и инвесторами;
— диплом МФТИ гособразца, степень магистра.
Кто учится:
Средний возраст — 34 года, география — от Лондона до Тайбэя, отрасли — от интернет-приложений до биотеха и космоса.
Как поступить:
1. До 14 августа подайте заявление на Госуслугах: «Поступление в вуз онлайн» → МФТИ → 03.04.01 «Прикладные математика и физика» → «Технологическое предпринимательство».
2. Дальше один экзамен «Специальность» (онлайн): собеседование про ваш опыт и планы + эссе + 3 задачи по математике, причём справочники и интернет разрешены, а слабая математика компенсируется собеседованием.
3. Стоимость — 445 500 ₽/семестр, есть кредит под 3%, может оплатить работодатель.
Не уверены, подойдёт ли вам? Напишите Юлии, преподавателю кафедры: @BelousovaYV. Можно просто обсудить свой проект, консультация бесплатная.
Реклама. МФТИ, Физтех, ИНН 5008006211, erid: 2W5zFHm1YuX
14 августа закрывается приём заявлений на онлайн-магистратуру «Технологическое предпринимательство» (МФТИ + Сколково): https://tprg.ru/vptN
За 2 года вы с помощью ментора-предпринимателя доведёте реальный проект от идеи до защиты: свой стартап, проект с текущей работы или проект от компании-партнёра.
Формат:
— полностью онлайн, живые вебинары по выходным, 8–12 часов в неделю;
— семинары в группах до 10 человек, персональный ментор;
— демодни с бизнес-ангелами и инвесторами;
— диплом МФТИ гособразца, степень магистра.
Кто учится:
Средний возраст — 34 года, география — от Лондона до Тайбэя, отрасли — от интернет-приложений до биотеха и космоса.
Как поступить:
1. До 14 августа подайте заявление на Госуслугах: «Поступление в вуз онлайн» → МФТИ → 03.04.01 «Прикладные математика и физика» → «Технологическое предпринимательство».
2. Дальше один экзамен «Специальность» (онлайн): собеседование про ваш опыт и планы + эссе + 3 задачи по математике, причём справочники и интернет разрешены, а слабая математика компенсируется собеседованием.
3. Стоимость — 445 500 ₽/семестр, есть кредит под 3%, может оплатить работодатель.
Не уверены, подойдёт ли вам? Напишите Юлии, преподавателю кафедры: @BelousovaYV. Можно просто обсудить свой проект, консультация бесплатная.
Реклама. МФТИ, Физтех, ИНН 5008006211, erid: 2W5zFHm1YuX
❤2👎1🤣1
Куда прятать ключи API, когда работает ИИ-ассистент
API-ключ, по сути пароль к сервису, который часто лежит в файле
Автор статьи предлагает выход: не давать ассистенту ключи напрямую. Храните их в менеджере секретов, передавайте через прокси, который подставляет ключ сам, или запускайте команды так, чтобы значение оставалось за пределами контекста. Разбор на dev.to поможет понять, как устроить это на своём первом проекте.
API-ключ, по сути пароль к сервису, который часто лежит в файле
.env, а ИИ-ассистент читает его, чтобы запустить ваш проект. Проблема в том, что ключ попадает в окно диалога: ассистент может случайно вывести его в лог или выполнить чужую инструкцию из стороннего файла.Автор статьи предлагает выход: не давать ассистенту ключи напрямую. Храните их в менеджере секретов, передавайте через прокси, который подставляет ключ сам, или запускайте команды так, чтобы значение оставалось за пределами контекста. Разбор на dev.to поможет понять, как устроить это на своём первом проекте.
❤3
Forwarded from Веб-страница
Утечки памяти в JS: почему фронтенд тормозит со временем
Долгоживущие вкладки часто тормозят из-за мелких ссылок, которые не дают сборщику мусора освободить память. В JavaScript объект живёт, пока на него остаётся ссылка, и удаление последней ссылки отправляет его в следующий проход сборщика мусора.
Чаще всего утечки дают забытые таймеры и обработчики событий, отсоединённые DOM-узлы, оставшиеся в массивах, и глобальные переменные без
Проверить проще, чем кажется: в Chrome DevTools вкладка Memory покажет снимок кучи и найдёт объекты, которые висят дольше положенного. А для метаданных объектов посмотрите на
Долгоживущие вкладки часто тормозят из-за мелких ссылок, которые не дают сборщику мусора освободить память. В JavaScript объект живёт, пока на него остаётся ссылка, и удаление последней ссылки отправляет его в следующий проход сборщика мусора.
Чаще всего утечки дают забытые таймеры и обработчики событий, отсоединённые DOM-узлы, оставшиеся в массивах, и глобальные переменные без
let, const или var. Замыкания тоже держат ссылки дольше, чем нужно.Проверить проще, чем кажется: в Chrome DevTools вкладка Memory покажет снимок кучи и найдёт объекты, которые висят дольше положенного. А для метаданных объектов посмотрите на
WeakMap: при удалении основной ссылки данные уйдут вместе с ней. Подробнее в азборе от Sharique Siddiqui.❤2