Точка входа в программирование
18.3K subscribers
1.67K photos
293 videos
4 files
3.21K links
Фундаментальные знания по основам программирования

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/zrgj
Download Telegram
Forwarded from Веб-страница
Тестируйте Vue-компоненты в браузере, без Node и сборки

Мне давно не хватало лёгкого способа гонять фронтенд-тесты без тяжёлого Node-окружения. Playwright хорош, но новый процесс браузера на каждый тест и Node-оркестрация быстро утомляют. Автор jvns.ca пошёл другим путём: вместо отдельного браузера запускает интеграционные тесты Vue-компонентов прямо в открытой вкладке.

Взял QUnit, встроил тесты в страницу и получил кнопку для перезапуска одного теста. Это удобно, когда в тестах много сетевых запросов и отлаживать хочется по одному. Для проектов без сборки так можно проверить компоненты в реальном DOM, не поднимая отдельный браузер.

Если у вас небольшой Vue-проект без Node-сборки, я бы попробовал такую схему в QA перед релизом. Подробности в заметке.
1
Что такое Unix timestamp и зачем он вам понадобится

Когда сервер присылает дату не строкой вроде «1 июня 2024», а числом вроде 1717200000 — это Unix timestamp. Простыми словами: количество секунд с полуночи 1 января 1970 года по Гринвичу. Так компьютеры хранят момент времени одним целым числом, не связываясь с часовыми поясами и форматами.

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

Попробуйте в консоли браузера: new Date(1717200000 * 1000) и сравните с new Date(). В статье разобраны примеры для Python, Java и других языков — чтобы вы могли переводить timestamp в привычную дату в своих проектах.
2
Forwarded from Типичный программист
KolibriOS 0.7.7: ОС, которая влезает на дискету

Представьте: в 2026 году ОС целиком лезет на 3,5-дюймовую дискету и загружается быстрее, чем вы допиваете кофе. Это не демо и не эмулятор: KolibriOS 0.7.7 существует, и редактор Hackaday Дженни Лист проверила его на ThinkPad.

Это российский форк MenuetOS, ядро написано на FASM, плоском ассемблере, образ около 1 МБ, а требования смешны: процессор класса i586, 8 МБ ОЗУ, 1 МБ на диске. При этом внутри браузеры, игры, эмуляторы, графические редакторы и среда разработки.

Без HTTPS в повседневное использование не пойдёт, но для старого железа, тонких клиентов и разбора того, как ОС может быть маленькой, находка, которую стоит сохранить.
👍4😱4😁1
Forwarded from Типичный программист
Разработчик превратил зубдробилку Vim в игру про доставку мороженого

Marcus Michaels из Лондона сделал Vim Scoops — браузерную игру, где фургон мороженого ездит по карте исключительно Vim-движениями. Сначала hjkl, потом прыжки по словам w и начала строк 0. Цель на каждом уровне — добраться до клиента за минимальное число ходов.

Автор пользуется Vim ежедневно и сделал игру PWA, чтобы тренировать память в мёртвых зонах связи по дороге на работу. Если вам тоже скучно запоминать motion'ы в Vim обычным способом, то попробуйте этот.
👀3
Почему ваш пет-проект ещё не бизнес, а вы — не предприниматель

У каждого второго разработчика в столе лежит проект, который «вот-вот станет бизнесом». Осталось дописать пару фич — и дальше всё поедет само. Спойлер: не поедет. Разбираемся, где заканчивается код и начинается бизнес: почему всё стартует не с технологии, а с чужой проблемы, чем фаундер отличается от тимлида и почему рабочий сервис с первыми пользователями и MRR — это не бизнес, а промежуточный результат.

Простой тест: уйдите в отпуск на две недели, и если без вас всё встало — поздравляем, у вас пока не бизнес, а вы сами и есть главный «производственный ресурс».

Внутри ещё и про AR-очки на трамвайном заводе, которые зарубили сами рабочие: история о том, как ценность решения определяете не вы.
1👍1
ИИ для автоматизации рассчётно-кассового обслуживания: как убрать ручной ввод паспортов

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

Что под капотом:
— Разворот паспорта распознаётся меньше чем за секунду — даже с бликами, тенями и если снято под углом. Тянет 103 языка, паспорта РФ и СНГ, права, рукописный текст и штампы;
— Всё крутится on-premise, документы не уходят на сторону. На одном сервере без всякой GPU — до 125 разворотов в секунду, точность 99,9%.

Самое интересное: распознавание можно запускать прямо в браузере через WebAssembly, то есть на устройстве пользователя, без отправки данных на сервер и обратно. Встраивается в интернет-банк и в мини-аппы Telegram и MAX.

Плюс антифрод: 600+ признаков подделки, проверка NFC-чипа, детект дипфейков.

Из живого кейса — в РНКО «Металлург» ручного ввода стало меньше минимум в 4 раза.
1
Git игнорирует файлы на трёх уровнях, не только через .gitignore

Если вы только начинаете с Git, вы уже встречали .gitignore — файл, в котором перечисляют, что Git не должен отслеживать: node_modules/, .env, логи. Но иногда правило нужно только вам, и править общий .gitignore ради одного файла не хочется.

Тут помогают ещё два уровня. .git/info/exclude работает только в вашей локальной копии репозитория. Это идеально для личных заметок или экспериментальных скриптов. А ~/.config/git/ignore задаёт правила сразу для всех репозиториев на вашей машине, например для системных файлов.

Чтобы проверить, почему конкретный файл не попадает в git status, запустите git check-ignore -v filename. Команда покажет, какой именно список его скрыл. Разбираем каждый уровень в статье.
7
19 учебных проектов на Python, которые помогают перейти от синтаксиса к работающей программе

Если после переменных, условий и циклов непонятно, куда двигаться, подборка Mimo даёт готовый маршрут: 19 проектов для начинающих — от списка дел и угадайки слова до чат-бота и классификатора изображений. К каждому проекту приложены исходный код и пошаговые инструкции, чтобы можно было собрать программу, а не только прочитать про неё.

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

Когда база будет увереннее, можно взяться за проекты посложнее — получение данных через API Звёздных войн или классификатор картинок. В материале всё разложено по уровню, так что удобно выбрать следующий шаг под себя.
4
Как собрать разрозненный Python в одну картинку

Real Python предлагает проверить понимание концепций языка тремя шагами: объяснить концепцию своими словами, найти ей знакомый аналог и применить в маленькой задаче.

Суть — не зубрить, а увидеть, как идея работает в коде. Возьмите тему, которую пока не чувствуете, и опишите её так, будто соседу по парте. Да, тот самый метод утёнка. Потом дайте себе пять минут и сравните её с похожей. Разница, которую вы сформулируете словами, лучше конспекта покажет, где остались дыры.
1
Ваша память ещё работает или нейронки уже и помнят всё за вас?

Чтобы это проверить мы приготовили для вас «Меморину» — игру, которая поможет проверить вашу память.

Всё просто: нужно запомнить и выбрать одинаковые карточки. Если память плохая, то рано или поздно вы всё равно справитесь. А если хорошая, то сможете увидеть ваш потолок скорости.

Ну что, готовы проверить? Тогда переходите по ссылке: https://tprg.ru/ha7S
1🔥1
Git изнутри: можно не зубрить команды, а собрать свой

Когда Git кажется набором магических слов вроде commit и branch, сложно понять, что происходит на самом деле. Туториал Никиты Лешенко предлагает собрать Git своими руками: вы пишете крошечные версии команд и видите, как хранилище проекта содержит файлы, историю изменений и разницу между версиями.

Это хороший следующий шаг после базовых команд. Не нужно проходить весь материал сразу — достаточно попробовать первую часть и увидеть, что за каждой командой стоит простая механика, а не тёмная магия.
2
Forwarded from Zen of Python
Метакласс: не магия, а ещё один уровень явности Python

Если класс — фабрика объектов, то метакласс играет роль фабрики самих классов. В Python 3 это не опция, а дефолт: любой ваш класс является экземпляром type, а class Foo: pass раскрывается в type('Foo', (), {}).

Свой метакласс наследуется от type и переопределяет __new__ или __init__. Он позволяет собирать, изменять или регистрировать классы программно, но в Python явность важнее изящества. В большинстве случаев ту же задачу решают наследование или декоратор класса.

Отсюда следует, почему в Python всё есть объект, включая само определение класса. Разбираемся в деталях.
1😁1
Почему DuckDB обгоняет Spark на одной машине

Разбор от endjin объясняет, как встраиваемая база DuckDB превращает ноутбук в инструмент для аналитики на миллиардах строк: скорость здесь — не в масштабе, а в бережном использовании железа. Колоночное хранилище читает только нужные столбцы, векторизованное выполнение обрабатывает данные пачками по 1024–2048 значений, умещаясь в кэш процессора, а min-max-индексы пропускают целые группы строк по фильтрам. Всё параллелится на все ядра.

В тесте TPC-H DuckDB на одной машине справилась за 1 минуту 16 секунд, Spark на 32 узлах — около 8 минут. Распределённые накладные расходы дороже выигрыша от кластера.

Это не замена PostgreSQL или Kafka: один писатель, одна нода, petabyte уйдут в распределённые системы. Статья полезна тем, кто строит ETL и хочет понять, где сидит производительность.

Сохраните, если выбираете инструменты для аналитики.
3
80% корпоративных программ геймификации ломаются на одном и том же месте

По данным AmplifAI, игровые кампании дают в среднем вовлечённость на 100–150% выше, чем классические подходы, а геймифицированный контент шерится в 12 раз чаще. При этом примерно 80% корпоративных программ геймификации не достигают целей. Спрос огромный, качество — низкое, а причина проста: делать это берутся не те люди.

В статье разбирают, как корпоративные клоны механик упускают баланс и контекст, и что делать, чтобы прогрессия не превращалась в цифровой пендель. Для геймдевелоперов это отличная ниша, где есть и деньги, и возможность применить свои скиллы на практике.
2🙏1
itertools: не хранить то, что можно перебирать по одному

Когда начинаешь писать циклы, легко собрать промежуточный список там, где он не нужен. Модуль itertools из стандартной библиотеки Python помогает обходиться без этих лишних коллекций: элементы создаются по запросу, не накапливаясь в памяти. Это особенно удобно для больших файлов и последовательностей, которые могут быть бесконечными.

В нём три группы инструментов: бесконечные итераторы вроде count, конечные вроде chain и islice, и комбинаторные, которые перебирают варианты. Например, islice(count(1), 5) выдаст первые пять чисел, не собирая список.

В статье разобрали, где itertools помогает, а где лучше обойтись без него.
11