Думал, что знаю JavaScript, а потом встретил его...

Я никогда бы не подумал, что обычная задача по парсингу может так подкинуть проблем. Сидел я, значит, над одним проектом, где нужно было вытащить данные с одного сайта. Ну, думаю, JavaScript, `fetch` API, `DOMParser` – что может быть проще? Казалось бы, типичная история, которая у многих возникала, когда нужно было хоть какую-то информацию достать. Ага, как же

Взял я, значит, за основу старый скрипт, который уже не раз меня выручал. Все вроде бы работает, статус 200, заголовки нормальные. Но данные – пустые. Ну, или какие-то странные, не те, что в браузере вижу. Начал копаться: смотрю `response.text()` – там вроде все на месте, но `DOMParser` куда-то благополучно проваливает часть информации. Чувствовал себя как будто пытаюсь найти кракен зеркало на каком-то мутном кракен сайте.

А потом осенило! Мало кто знает, но некоторые сайты реально детектят автоматические запросы. Там же не просто HTML, а еще и всякие скрипты, которые динамически контент подгружают, или вообще на уровне бэкенда какая-то защита срабатывает. Технически, это может быть что угодно: от банального User-Agent до сложных поведенческих паттернов. Для меня это стало настоящим откровением. Я же привык, что если есть ссылка на кракен, то она рабочая, а тут… ну, типа, не все так очевидно.

В итоге пришлось повозиться. Начал подменять User-Agent на тот, что в браузере, потом еще какие-то заголовки добавил. Нашел одну библиотечку, которая вроде как имитирует работу браузера получше. Короче, через пару часов мучений, когда уже хотелось удалить этот JS к чертям и перейти на Python с `requests` и `BeautifulSoup`, все заработало. Удивительно, как порой мелочь, которую не учтешь, может превратить простой парсинг в целое приключение, напомнившее мне поиски нужной кракен ссылка между десятками фейков. Теперь я парсить начинаю с мысли, что не любой кракен маркетплейс дружелюбен к ботам.

Подробнее

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

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

  • Используйте логирование грамотно. Это ваш лучший друг. Не стесняйтесь выводить логи в консоль, но делайте это с умом. Не надо логировать все подряд, логи должны быть информативными и показывать, что происходит в приложении. Для Android используйте Logcat, для iOS – Xcode Console. Забудьте про System.out.println, это прошлый век.
  • Дебаггер – наше все. Освойте отладчик вашей IDE (Android Studio, Xcode, VS Code). Умение ставить breakpoints, step-over/step-into выполнять код по шагам – must have. Иногда посмотрите на переменные, ну, там значения всякие, это помогает понять, что творится.
  • Профайлинг – секретное оружие. Когда приложение тормозит или жрет батарейку, профайлинг покажет, где косяк. Оптимизируйте код и ресурсы, чтобы приложение работало плавно. В Android Studio есть отличный профайлер, в Xcode тоже достойный имеется.
  • Пишите тесты. Юнит-тесты, UI-тесты – это ваша страховка от багов. Они позволяют быстро проверить, работает ли ваш код как надо. Если постоянно пишете тесты, то меньше багов попадает в продакшн, а значит, меньше головной боли.
  • Эмуляторы и реальные устройства. Тестируйте на разных устройствах и версиях ОС. Эмуляторы – это удобно, но иногда поведение на реальном устройстве отличается. Ну, сами знаете, edge cases всякие.
  • Изучайте ошибки. Анализируйте логи ошибок, смотрите на stack traces. Ищите паттерны, повторяющиеся ошибки, и фиксите их.
  • Делайте бэкапы. Если используете какие-то самописные скрипты для развертывания, всегда делайте бэкапы, чтобы иметь возможность откатиться в случае чего.

И помните: отладка – это навык. Чем больше вы практикуетесь, тем лучше у вас получается.

Подробнее