📖 Посты:
#БазаЗнаний — примеры кода,
#КодРевью — разбор кода,
#Мысли — короткие заметки,
#Статьи — длинные публикации,
#Костыли — не стандартные решения,
#Кейсы — разбор ситуаций,
#НашиРазработки — готовые решения от нашей команды,
#Юмор — юмористические заметки,
#Топ5Месяца — 5 самых популярных постов за месяц.
👨💻 Об авторе
Привет! Меня зовут Ипатов Евгений, занимаюсь коммерческой IT-разработкой с 2011 года. Поработал на должностях от тестировщика и джуна до тимлида и техдира. CTO с 2021 года. На канале делюсь кодом, его разбором, интересными и не стандартными решениями, нашими внутренними инструментами и наработками, а так же своими мыслями и заметками на тему разработки.
Работаю тут:
Связаться со мной:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Привет!
Вы на канале «БАГодельня», который посвящен web-разработке и всему, что с ней связано: код; решение интересных задач, которые встречаются в повседневной работе; не стандартные «костыли»; туториалы и небольшие наработки; описание и презентация наших open source разработок; мысли и рассуждения на тему разработки; и просто баловство – курьезные ситуации и шуточные разработки.
Меня зовут Женя, я техдир в компании, которая занимается заказной разработкой, дизайном и рекламой. С 2013 по 2018 год активно вел блог на тему программирования: ссылка. Но работы и обязанностей со временем стало больше, когда из разработчика перешел на должность тимлида и потом руководителя отдела. Тратить несколько дней на написание больших статей уже нет возможности. Да и скорость восприятия информации, при серфинге интернета, сильно поменялась – спрос на развернутые статьи с полноценным описанием проблематики стал меньше. Короткие и четкие ответы на вопросы, небольшие заметки, 10-секундные видео и т.д. вытесняют старый формат длинных постов или полуторачасовых лекций. Это не плохо и не хорошо, просто по-другому, все меняется и нет ничего статичного и вечного.
С 2018 года прошло не мало времени, но интерес и тяга к публикации мыслей и наработок никуда не ушли. Даже пяток статей удалось написать за эти пять лет. Но это не дело – постить по одной статье в год, рассказать и показать хочется побольше и почаще. Поэтому из сайта-блога мое вещание переезжает в телеграм-канал. В телеграме идеальный формат, как мне кажется, для быстрого обмена информацией и опытом. Посмотрим, что из этого получится. Поехали!
#Мысли
Вы на канале «БАГодельня», который посвящен web-разработке и всему, что с ней связано: код; решение интересных задач, которые встречаются в повседневной работе; не стандартные «костыли»; туториалы и небольшие наработки; описание и презентация наших open source разработок; мысли и рассуждения на тему разработки; и просто баловство – курьезные ситуации и шуточные разработки.
Меня зовут Женя, я техдир в компании, которая занимается заказной разработкой, дизайном и рекламой. С 2013 по 2018 год активно вел блог на тему программирования: ссылка. Но работы и обязанностей со временем стало больше, когда из разработчика перешел на должность тимлида и потом руководителя отдела. Тратить несколько дней на написание больших статей уже нет возможности. Да и скорость восприятия информации, при серфинге интернета, сильно поменялась – спрос на развернутые статьи с полноценным описанием проблематики стал меньше. Короткие и четкие ответы на вопросы, небольшие заметки, 10-секундные видео и т.д. вытесняют старый формат длинных постов или полуторачасовых лекций. Это не плохо и не хорошо, просто по-другому, все меняется и нет ничего статичного и вечного.
С 2018 года прошло не мало времени, но интерес и тяга к публикации мыслей и наработок никуда не ушли. Даже пяток статей удалось написать за эти пять лет. Но это не дело – постить по одной статье в год, рассказать и показать хочется побольше и почаще. Поэтому из сайта-блога мое вещание переезжает в телеграм-канал. В телеграме идеальный формат, как мне кажется, для быстрого обмена информацией и опытом. Посмотрим, что из этого получится. Поехали!
#Мысли
Пока канал без подписчиков, можно и похалтурить немного, не писать новый текст 😁.
Вспомнил прошлогоднюю статью на Хабре, про одну из наших разработок — telegram-бота «Железный Феликс». Бот по сей день исправно работает и выполняет все свои функции, даже немного расширил свои возможности:
— проверка работы всех клиентских сайтов и уведомление, если сайт упал
— счетчик часов без падений сайтов
— появились дополнительные уведомления о лимите плановых часов на день
— сбор отчетов по времени переработок
— добавился мониторинг выполнения ночных бекапов
Ссылка на статью: https://habr.com/ru/articles/657863/
#Статьи
Вспомнил прошлогоднюю статью на Хабре, про одну из наших разработок — telegram-бота «Железный Феликс». Бот по сей день исправно работает и выполняет все свои функции, даже немного расширил свои возможности:
— проверка работы всех клиентских сайтов и уведомление, если сайт упал
— счетчик часов без падений сайтов
— появились дополнительные уведомления о лимите плановых часов на день
— сбор отчетов по времени переработок
— добавился мониторинг выполнения ночных бекапов
Ссылка на статью: https://habr.com/ru/articles/657863/
#Статьи
Хабр
Telegram-бот на страже порядка в Redmine
Невыдуманная история с хеппи-эндом, про то, как бот для Telegram увеличил выручку и упорядочил работу команды разработчиков. Предыстория Все началось с того, что в рабочем чате Telegram, где мы...
🔥2
🤖Bash-скрипт для переноса файлов с сервера на Яндекс Диск
Может пригодиться для сохранения бекапов или просто переноса больших архивов с сервера на Яндекс Диск, без предварительного скачивания на компьютер.
❗️В реализации помогут несколько трюков:
Трюк 1. Ускорение загрузки файла на Яндекс Диск.
Если через api Яндекса заливать большие и тяжелые архивы, то скорость сильно замедляется. Есть предположение, что Яндекс умышленно это делает, чтобы не автоматизировать сохранение бекапов на диске, поскольку под бекапы у Яндекса есть отдельный облачный сервис, который стоит дороже классического облака. Но это не точно. Может быть связано и с проверкой содержимого архива. Но так или иначе, скорость заливки архивов в 7-10 раз медленней, чем одного большого файла.
Экспериментальным путем удалось обойти это замедление. Достаточно подменить расширение файла и скорость заливки кратно увеличивается. То есть, если файл бекапа называется file_name.tar, достаточно изменить расширение на file_name.123tar.
Трюк 2. Получение OAuth-токена «руками».
Чтобы не мудрить и не тратить время на реализацию авторизации, достаточно получить токен «руками». Прямо через браузер. Токен будет полностью рабочим, без ограничений и не имеет периода жизни – вечный, пока не отозвать или сменить пароль на аккаунте.
Такой способ подробно описан в официальной документации Яндекса: ссылка.
✏️ Ссылка на готовый скрипт: скачать.
Инструкция по эксплуатации:
1. В скрипте меняем значения переменных: FILENAME, FILEPATH, TOKEN и FOLDERDISK
2. Заливаем скрипт на сервер
3. Подключаемся по ssh, заходим в папку со скриптом и делаем файл исполняемым:
Может пригодиться для сохранения бекапов или просто переноса больших архивов с сервера на Яндекс Диск, без предварительного скачивания на компьютер.
❗️В реализации помогут несколько трюков:
Трюк 1. Ускорение загрузки файла на Яндекс Диск.
Если через api Яндекса заливать большие и тяжелые архивы, то скорость сильно замедляется. Есть предположение, что Яндекс умышленно это делает, чтобы не автоматизировать сохранение бекапов на диске, поскольку под бекапы у Яндекса есть отдельный облачный сервис, который стоит дороже классического облака. Но это не точно. Может быть связано и с проверкой содержимого архива. Но так или иначе, скорость заливки архивов в 7-10 раз медленней, чем одного большого файла.
Экспериментальным путем удалось обойти это замедление. Достаточно подменить расширение файла и скорость заливки кратно увеличивается. То есть, если файл бекапа называется file_name.tar, достаточно изменить расширение на file_name.123tar.
Трюк 2. Получение OAuth-токена «руками».
Чтобы не мудрить и не тратить время на реализацию авторизации, достаточно получить токен «руками». Прямо через браузер. Токен будет полностью рабочим, без ограничений и не имеет периода жизни – вечный, пока не отозвать или сменить пароль на аккаунте.
Такой способ подробно описан в официальной документации Яндекса: ссылка.
✏️ Ссылка на готовый скрипт: скачать.
Инструкция по эксплуатации:
1. В скрипте меняем значения переменных: FILENAME, FILEPATH, TOKEN и FOLDERDISK
2. Заливаем скрипт на сервер
3. Подключаемся по ssh, заходим в папку со скриптом и делаем файл исполняемым:
chmod -x yaDisk.sh
4. И запускаем скрипт: ./yaDisk.sh
#БазаЗнанийCode Review метода расчета 5% кешбека.
Код всего пять строк, но пример интересный, есть что разобрать и пояснить, как исправить и улучшить.
Что можно и нужно исправить:
🔴 Критическая ошибка.
Потерялся нолик и кешбек стал 50%. 5% от заказчика и еще сверху 45% — бонус от разработчика.
Нужно исправить расчет, умножение должно быть на 0.05, чтобы получалось 5%, а не 50.
🟡 Можно доработать.
Значение процента удобнее и логичней вынести в глобальный конфиг, чтобы при изменении условий процента скидки, можно было быстро изменить 0.05 на любое другое значение.
🟢 Пояснение, как сделать совсем хорошо.
В идеале вообще в базу данных перенести хранение размера процента кешбека. И добавить флаг, который включает и выключает кешбек. Тогда в код совсем не придется заходить, при изменениях в стратегии маркетинга. Достаточно изменить значения в базе данных: "руками" в БД или через админку.
Но это не большой проект, админки нет и надобности регулировать скидку каждый день тоже нет. Поэтому достаточно и конфига — так сократим время и соответсвенно стоимость реализации. В то же время код и логика не пострадают, и на возможность расширения логики это тоже не повлияет.
#КодРевью
Код всего пять строк, но пример интересный, есть что разобрать и пояснить, как исправить и улучшить.
Что можно и нужно исправить:
🔴 Критическая ошибка.
Потерялся нолик и кешбек стал 50%. 5% от заказчика и еще сверху 45% — бонус от разработчика.
Нужно исправить расчет, умножение должно быть на 0.05, чтобы получалось 5%, а не 50.
🟡 Можно доработать.
Значение процента удобнее и логичней вынести в глобальный конфиг, чтобы при изменении условий процента скидки, можно было быстро изменить 0.05 на любое другое значение.
🟢 Пояснение, как сделать совсем хорошо.
В идеале вообще в базу данных перенести хранение размера процента кешбека. И добавить флаг, который включает и выключает кешбек. Тогда в код совсем не придется заходить, при изменениях в стратегии маркетинга. Достаточно изменить значения в базе данных: "руками" в БД или через админку.
Но это не большой проект, админки нет и надобности регулировать скидку каждый день тоже нет. Поэтому достаточно и конфига — так сократим время и соответсвенно стоимость реализации. В то же время код и логика не пострадают, и на возможность расширения логики это тоже не повлияет.
#КодРевью
👍3❤1
Как стать профессионалом в программировании?
Точно так же, как и в любой другой сфере.
Всё. Можно заканчивать пост. Но чуток расшифрую.
IT ни чем не отличается от других специальностей. Тут все те же шаги роста и становления профи.
1️⃣ . Ответственность. Если все делать на пох#й и не думать о последствиях, то ни о каком профессионализме и речи быть не может. В первую очередь от спеца ждут конкретного решения. И оно не всегда бывает правильное. Но всегда должен быть план «Б», «В» и тд. Но чтобы перейти к плану «Б» нужно признать, что основное решение было ошибкой, а не юлить и придумывать отмазки или приукрашивать ситуацию. Важно довести дело до конца, какой бы ситуация не была: принять ответственность за свое решение и придумать пути исправления ситуации
2️⃣ . Отвечать за свои слова. Это еще Стэтхем говорил. Шутки шутками, но мало кто может держать слово. На профессионала всегда можно положиться. Сказал – сделал. Это так же значит, что не стоит давать лишние обещания или рекомендации, если есть вероятность налажать. Есть опасения в сроках или в уровне компетенции, то это прямо и нужно озвучивать. Не стыдно признаться в том, что какой-то стек не знаком, куда хуже взяться за задачу, потратить время и только потом сказать: «Не получится сделать» или совсем пропасть. Часто бывают ситуации, что если честно обрисовать ситуацию и подсветить пробелы в знаниях, то и условия задачи можно изменить под знакомый стек или поменять сроки – с запасом на изучение чего-то нового.
3️⃣ . Адекватность. Адекватность в оценки своих сил. Не стоит завышать ожидания, но и прибедняться не нужно. Только трезвая оценка.
Так же адекватно нужно оценивать и понимание специфики нашей специальности другими людьми. При объяснении технологий или ответе на технический вопрос всегда можно выразиться понятным языком. Вас должны понять и услышать, а не уйти гуглить терминологию после разговора. Тот, кто действительно ориентируется в своей сфере может и ребенку объяснить, чем занимается на работе. В крайнем случае все можно объяснить «на пальцах» – нарисовать, использовать аналогии и тд.
4️⃣ . Фанатичность. Тут «Фанатизм» имею ввиду в хорошем смысле этого слова. Перегибать палку тоже не стоит, чтобы не слететь с катушек. Нельзя стать первоклассным спецом, если не нравится то, чем занимаешься. Просто надоест это занятие рано или поздно, и как следствие наступит стагнация без пополнения знаний и оттачивания скилов. А айти коварная штука, можно быстро отстать, если перестать «поддерживать форму».
5️⃣ . Навыки и умения. Умышленно на последнее место поставил этот пункт. Это и так понятно, хочешь быть спецом, постоянно развивайся и совершенствуйся. Без этого никуда.
Недавно наткнулся на статью, как начинающий разработчик рассказывал про сложность в первый год становления программистом. Раскрою секрет – это не закончится никогда, нет той границы, когда поймешь «вот, теперь я точно все знаю и больше мне нечего изучать и совершенствовать». Я 13 лет в коммерческой разработке и постоянно узнаю и изучаю что-то новое, тренируюсь чтобы не забывать старое.
Настоящий профи, он как самурай, у которого есть только путь.
#Мысли
Точно так же, как и в любой другой сфере.
Всё. Можно заканчивать пост. Но чуток расшифрую.
IT ни чем не отличается от других специальностей. Тут все те же шаги роста и становления профи.
Так же адекватно нужно оценивать и понимание специфики нашей специальности другими людьми. При объяснении технологий или ответе на технический вопрос всегда можно выразиться понятным языком. Вас должны понять и услышать, а не уйти гуглить терминологию после разговора. Тот, кто действительно ориентируется в своей сфере может и ребенку объяснить, чем занимается на работе. В крайнем случае все можно объяснить «на пальцах» – нарисовать, использовать аналогии и тд.
Недавно наткнулся на статью, как начинающий разработчик рассказывал про сложность в первый год становления программистом. Раскрою секрет – это не закончится никогда, нет той границы, когда поймешь «вот, теперь я точно все знаю и больше мне нечего изучать и совершенствовать». Я 13 лет в коммерческой разработке и постоянно узнаю и изучаю что-то новое, тренируюсь чтобы не забывать старое.
Настоящий профи, он как самурай, у которого есть только путь.
#Мысли
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Code Review шаблона с формированием данных для статики
🔴 1. Критическая ошибка.
Не надежное условие проверки формата отображения блока, внутри которого формируется верстка блока с данными из $card. Тип у карточек одинаковый – «stage», но есть небольшие отличия в составе данных. Поскольку уникальных параметров, для точного определения, нет, пришлось завязаться на значение из заголовка title, которое статичное и отличается у разных форматов блоков.
Такая логика будет работать до тех пор, пока заголовки(title) не поменяются. Вероятность изменений любых статичных данных, которые отображаются на сайте, очень высока. Такие изменения могут произойти не сразу, спустя месяц или год. И такие безобидные изменения статики сломают отображение блока или совсем приведут к 500й. Нельзя использовать в логике данные, которые являются пользовательскими – выводятся на сайте/админке.
Для корректной работы нужно добавить новое свойство в базе данных для сущности card, которое явно обозначит тип блока. И уже новое свойство использовать в условиях. В логике должны использоваться только служебные ключи, которые не имеют никакого отношения к отображению.
🟡 2. Можно доработать.
При работе с кодом, следует соблюдать «правило бойскаута»: «оставь место стоянки чище, чем оно было до твоего прихода». То есть, если видно, что в коде есть «мусор» или явные проблемы, то код нужно причесать. Например, тут на скрине обведены рамкой закомментированные куски верстки. На этапе разработки новой логики, когда все часто обновляется и меняется, иногда приходится туда-сюда переставлять или прятать и показывать блоки. Поэтому появляются такие закомментированные строки. Но тут логика уже настоялась (можно по коммитам посмотреть историю и срок давности), поэтому можно и навести порядок – удалить лишнее и не нужное.
«Правило бойскаута» полезное, но тут главное не перегнуть палку, не начать рефакторить все подряд.
—
👨💻Подробнее о «правиле бойскаута» будет следующий пост, сюда не влезает по лимиту символов.
#КодРевью
🔴 1. Критическая ошибка.
Не надежное условие проверки формата отображения блока, внутри которого формируется верстка блока с данными из $card. Тип у карточек одинаковый – «stage», но есть небольшие отличия в составе данных. Поскольку уникальных параметров, для точного определения, нет, пришлось завязаться на значение из заголовка title, которое статичное и отличается у разных форматов блоков.
Такая логика будет работать до тех пор, пока заголовки(title) не поменяются. Вероятность изменений любых статичных данных, которые отображаются на сайте, очень высока. Такие изменения могут произойти не сразу, спустя месяц или год. И такие безобидные изменения статики сломают отображение блока или совсем приведут к 500й. Нельзя использовать в логике данные, которые являются пользовательскими – выводятся на сайте/админке.
Для корректной работы нужно добавить новое свойство в базе данных для сущности card, которое явно обозначит тип блока. И уже новое свойство использовать в условиях. В логике должны использоваться только служебные ключи, которые не имеют никакого отношения к отображению.
🟡 2. Можно доработать.
При работе с кодом, следует соблюдать «правило бойскаута»: «оставь место стоянки чище, чем оно было до твоего прихода». То есть, если видно, что в коде есть «мусор» или явные проблемы, то код нужно причесать. Например, тут на скрине обведены рамкой закомментированные куски верстки. На этапе разработки новой логики, когда все часто обновляется и меняется, иногда приходится туда-сюда переставлять или прятать и показывать блоки. Поэтому появляются такие закомментированные строки. Но тут логика уже настоялась (можно по коммитам посмотреть историю и срок давности), поэтому можно и навести порядок – удалить лишнее и не нужное.
«Правило бойскаута» полезное, но тут главное не перегнуть палку, не начать рефакторить все подряд.
—
👨💻Подробнее о «правиле бойскаута» будет следующий пост, сюда не влезает по лимиту символов.
#КодРевью
👍2
Правило бойскаута
📖 Термин «Правило бойскаута», который относится к программированию, ввел Роберт Мартин в книге «Чистый код». Основная мысль – «оставляй код как минимум столь же чистым, каким его принял». Но если на глаза попалось то, что можно подправить, то это нужно сделать.
Правило бойскаута полезное, но тут главное не перегнуть палку, не начать рефакторить все подряд. В книжке «Чистый код» есть пояснение, как правильно действовать, но не все советы там актуальны, а некоторые спорные, плюс и от себя еще хочу добавить.
📌 Достаточно уделять внимание следующим вещам:
— добавлять комментарии к логике, над которой пришлось поломать голову, чтобы понять смысл
— удалять не актуальные комментарии
— исправлять путающие или не понятные комментарии
— исправлять явные ошибки в логике
— переименовывать переменные, если они не несут смысла или искажают его. При условии, что понятна вся область видимости переменной и такой рефакторинг не сломает логику
— упрощать или переписывать условия, где это возможно, а не добавлять дополнительные обертки или логические блоки. Сигнализатор доработки и упрощения логики – elseif, где он появляется, там стоит задуматься над рефакторингом
— убрать console.log, var_dump и другие функции, которые могли остаться после отладки
📌 Если видно, что есть проблема в коде, но не понятно, как ее исправить или есть опасения сделать хуже, то можно добавить комментарий с TODO. Чтобы не потерять и доработать позже.
❗️Примечание. Книга «Чистый код» у нас стоит на книжной полке. Рядом с другими книгами Роберта Мартина, можно взять почитать — в офисе или дома.
#Мысли
📖 Термин «Правило бойскаута», который относится к программированию, ввел Роберт Мартин в книге «Чистый код». Основная мысль – «оставляй код как минимум столь же чистым, каким его принял». Но если на глаза попалось то, что можно подправить, то это нужно сделать.
Правило бойскаута полезное, но тут главное не перегнуть палку, не начать рефакторить все подряд. В книжке «Чистый код» есть пояснение, как правильно действовать, но не все советы там актуальны, а некоторые спорные, плюс и от себя еще хочу добавить.
📌 Достаточно уделять внимание следующим вещам:
— добавлять комментарии к логике, над которой пришлось поломать голову, чтобы понять смысл
— удалять не актуальные комментарии
— исправлять путающие или не понятные комментарии
— исправлять явные ошибки в логике
— переименовывать переменные, если они не несут смысла или искажают его. При условии, что понятна вся область видимости переменной и такой рефакторинг не сломает логику
— упрощать или переписывать условия, где это возможно, а не добавлять дополнительные обертки или логические блоки. Сигнализатор доработки и упрощения логики – elseif, где он появляется, там стоит задуматься над рефакторингом
— убрать console.log, var_dump и другие функции, которые могли остаться после отладки
📌 Если видно, что есть проблема в коде, но не понятно, как ее исправить или есть опасения сделать хуже, то можно добавить комментарий с TODO. Чтобы не потерять и доработать позже.
❗️Примечание. Книга «Чистый код» у нас стоит на книжной полке. Рядом с другими книгами Роберта Мартина, можно взять почитать — в офисе или дома.
#Мысли
👍4
«Капучинатор 3000» — Кофейный бот
❗️Лень — двигатель прогресса.
Так случилось и с простым ежедневным ритуалом, когда мы с утра в офисе договариваемся на сколько человек поставить вариться кофе, и кто будет управлять процессом запуска: насыпать зерен, налить воды и нажать «Старт» на кофеварке. Каждый раз приходилось устраивать перекличку, а потом договариваться, кто варит кофе. Переломным моментом стал сбой прошивки в кофеварке, когда расчеты объемов воды и порций перестали коррелироваться и стало необходимо предварительно проводить расчеты. К примеру, на трех человек нужно залить шесть единиц(делений) воды и включить вариться на восемь чашек. Тогда будет идеальный объем кофе – на три большие офисные кружки. Вот такая интересная математика.
⁉️Естественно, не все сходу разобрались с расчетами, а кто-то и стал прикрываться сложностями математики, чтобы отмазаться от запуска кофеварки. Но, на одном изперекуров брейнштормингов, пришла идея сделать телеграм-бота, который сам посчитает количество активных кофеманов и выдаст готовую формулу приготовления.
👨💻Идея есть, дальше дело техники – пол часа программирования, час отладки и бот готов. После объявления о начале сбора кофеманов, все желающие скидывают плюсы в чат, где сидит бот. А по завершению переклички, случайным образом происходит жеребьевка для определения кофеинового монстра — кто будет запускать кофеварку. Так же бот прилагает расчет правильных пропорций воды и количества чашек.
⚙️Пример работы бота есть на скрине, участники переписки замазаны, поскольку являются высококлассными специалистами в приготовлении кофе и их контакты могут попасть в руки HR-ов конкурирующих фирм.
☕️ P.S. Очень может быть, что дело не в прошивке кофеварки, а в том, что ее иногда надо чистить и полностью промывать. Но это уже совсем другая история, пока никто не отважился заняться полной чисткой этой техники. Вот если б была апиха, которую можно вызывать для очисткикеша кофеварки…
#Юмор
❗️Лень — двигатель прогресса.
Так случилось и с простым ежедневным ритуалом, когда мы с утра в офисе договариваемся на сколько человек поставить вариться кофе, и кто будет управлять процессом запуска: насыпать зерен, налить воды и нажать «Старт» на кофеварке. Каждый раз приходилось устраивать перекличку, а потом договариваться, кто варит кофе. Переломным моментом стал сбой прошивки в кофеварке, когда расчеты объемов воды и порций перестали коррелироваться и стало необходимо предварительно проводить расчеты. К примеру, на трех человек нужно залить шесть единиц(делений) воды и включить вариться на восемь чашек. Тогда будет идеальный объем кофе – на три большие офисные кружки. Вот такая интересная математика.
⁉️Естественно, не все сходу разобрались с расчетами, а кто-то и стал прикрываться сложностями математики, чтобы отмазаться от запуска кофеварки. Но, на одном из
👨💻Идея есть, дальше дело техники – пол часа программирования, час отладки и бот готов. После объявления о начале сбора кофеманов, все желающие скидывают плюсы в чат, где сидит бот. А по завершению переклички, случайным образом происходит жеребьевка для определения кофеинового монстра — кто будет запускать кофеварку. Так же бот прилагает расчет правильных пропорций воды и количества чашек.
⚙️Пример работы бота есть на скрине, участники переписки замазаны, поскольку являются высококлассными специалистами в приготовлении кофе и их контакты могут попасть в руки HR-ов конкурирующих фирм.
☕️ P.S. Очень может быть, что дело не в прошивке кофеварки, а в том, что ее иногда надо чистить и полностью промывать. Но это уже совсем другая история, пока никто не отважился заняться полной чисткой этой техники. Вот если б была апиха, которую можно вызывать для очистки
#Юмор
😁5
Картинка любого размера
📖 При верстке блоков с динамическим контентом, часто нужно учитывать, что с бекенда могут прийти совсем разноформатные текста и картинки. Текст бывает разной длины, а картинки разных пропорций. Это связно с тем, что большая часть контента заполняется "руками" менеджеров или самих владельцев сайтов/сервисов/приложений. И не всегда можно или нужно добавлять валидацию пропорции изображений при добавлении в админке.
Пока фронты верстают статику и еще нет настоящего или даже тестового контента, им приходится использовать «заглушки». Но не всегда под рукой есть подходящие тестовые картинки нужного размера или пропорции. И чтобы не мучать верстальщиков поиском тестовых файлов, мы сделали картинку, которая может принять абсолютно любой размер.
На самом деле это не картинка, а скрипт, расположенный на сервере. При обращении к нему по урлу, генерируется холст заданного размера и в него вписывается изображение. В адресе картинки передаются ширина и высота, нужные для отладки верстки.
📌 Примеры картинок разных пропорция:
— Вертикальный прямоугольник: 300x500 пикселей,
— Горизонтальный прямоугольник: 500x300 пикселей,
— Квадрат: 500x500 пикселей.
📌 PHP-скрипт генерации картинки:🗄 скачать.
В архиве скрипт генерации картинки и htaccess для редиректа на этот скрипт, чтобы можно было вызывать его по динамическому урлу.
📌 Инструкция по эксплуатации:
Можно развернуть скрипт на любом хостинге или пользоваться нашим, уже залитым и рабочим — адрес сервиса измениться не будет.
Для вызова картинки нужно указать ширину и высоту в урле:
https://owl-dev.ru/bug/WIDTHxHEIGHT.png
WIDTH — ширина
x — разделитель
HEIGHT — высота
#НашиРазработки
📖 При верстке блоков с динамическим контентом, часто нужно учитывать, что с бекенда могут прийти совсем разноформатные текста и картинки. Текст бывает разной длины, а картинки разных пропорций. Это связно с тем, что большая часть контента заполняется "руками" менеджеров или самих владельцев сайтов/сервисов/приложений. И не всегда можно или нужно добавлять валидацию пропорции изображений при добавлении в админке.
Пока фронты верстают статику и еще нет настоящего или даже тестового контента, им приходится использовать «заглушки». Но не всегда под рукой есть подходящие тестовые картинки нужного размера или пропорции. И чтобы не мучать верстальщиков поиском тестовых файлов, мы сделали картинку, которая может принять абсолютно любой размер.
На самом деле это не картинка, а скрипт, расположенный на сервере. При обращении к нему по урлу, генерируется холст заданного размера и в него вписывается изображение. В адресе картинки передаются ширина и высота, нужные для отладки верстки.
📌 Примеры картинок разных пропорция:
— Вертикальный прямоугольник: 300x500 пикселей,
— Горизонтальный прямоугольник: 500x300 пикселей,
— Квадрат: 500x500 пикселей.
📌 PHP-скрипт генерации картинки:
В архиве скрипт генерации картинки и htaccess для редиректа на этот скрипт, чтобы можно было вызывать его по динамическому урлу.
📌 Инструкция по эксплуатации:
Можно развернуть скрипт на любом хостинге или пользоваться нашим, уже залитым и рабочим — адрес сервиса измениться не будет.
Для вызова картинки нужно указать ширину и высоту в урле:
https://owl-dev.ru/bug/WIDTHxHEIGHT.png
WIDTH — ширина
x — разделитель
HEIGHT — высота
#НашиРазработки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Обработка несуществующих файлов
📖 В процессе работы над проектами, которые имеют большую контентную базу, зачастую возникают проблемы с тестовыми или локальными файлами – сложно поддерживать их актуальное состояние. К примеру, если на сайте 30-50 гигабайт картинок, то не особо хочется их таскать с продакшена на тестовую или локальную версию.
Контент, естественно, заигнорирован в репозитории и находится без контроля версий. Но в базе данных есть все адреса и пути к картинкам – они нужны для корректной отладки. И чтобы на тестовом стенде отображались изображения, их нужно скачивать.
Самым верным решением будет прописывать полные пути к картинкам и хранить домен сайта в конфиге, чтобы можно было на тесте или локалке подгружать сайты с «боевой» версии. Но не всегда проект построен так, что можно быстро обновить все шаблоны страниц и прописать в них переменные из конфига.
Можно, конечно, и не обращать внимание на битые картинки – сайт тестовый. Но проблема не только в отображении. Есть еще ряд, более критичных, последствий. Во-первых, уже не получится корректно отладить верстку блоков, завязанных на размер картинок. Во-вторых, сайт будет сильно «тормозить», битые файлы в разы дольше обрабатываются браузером. Страница каталога с несколькими десятками товаров, у которых все картинки отдают 404ю ошибку, может грузиться до минуты. Это жутко бесит и мешает работать.
📌 Извернуться в такой ситуации можно через настройку сервера. При запросе к файлу, проверять его наличие, и если изображение отсутствует, то подменять одной и той же «заглушкой» или полным путем к этой же картинке на рабочем сайте.
Приведу пример, как это настроить на веб-сервере Apache, через конфигурации в htaccess.
📖 В процессе работы над проектами, которые имеют большую контентную базу, зачастую возникают проблемы с тестовыми или локальными файлами – сложно поддерживать их актуальное состояние. К примеру, если на сайте 30-50 гигабайт картинок, то не особо хочется их таскать с продакшена на тестовую или локальную версию.
Контент, естественно, заигнорирован в репозитории и находится без контроля версий. Но в базе данных есть все адреса и пути к картинкам – они нужны для корректной отладки. И чтобы на тестовом стенде отображались изображения, их нужно скачивать.
Самым верным решением будет прописывать полные пути к картинкам и хранить домен сайта в конфиге, чтобы можно было на тесте или локалке подгружать сайты с «боевой» версии. Но не всегда проект построен так, что можно быстро обновить все шаблоны страниц и прописать в них переменные из конфига.
Можно, конечно, и не обращать внимание на битые картинки – сайт тестовый. Но проблема не только в отображении. Есть еще ряд, более критичных, последствий. Во-первых, уже не получится корректно отладить верстку блоков, завязанных на размер картинок. Во-вторых, сайт будет сильно «тормозить», битые файлы в разы дольше обрабатываются браузером. Страница каталога с несколькими десятками товаров, у которых все картинки отдают 404ю ошибку, может грузиться до минуты. Это жутко бесит и мешает работать.
📌 Извернуться в такой ситуации можно через настройку сервера. При запросе к файлу, проверять его наличие, и если изображение отсутствует, то подменять одной и той же «заглушкой» или полным путем к этой же картинке на рабочем сайте.
Приведу пример, как это настроить на веб-сервере Apache, через конфигурации в htaccess.
# Взять картинку с рабочего сайта
RewriteCond %{DOCUMENT_ROOT}/images/$1 !-f
RewriteRule ^images/(.*)$ https://production-site-name/images/$1 [QSA,L]
# Или подставить заглушку 404.png:
RewriteCond %{DOCUMENT_ROOT}/images/$1 !-f
RewriteRule ^images/(.*)$ /images/404.png [QSA,L]
#БазаЗнаний👍6
Лимиты в полях таблиц БД при строгом режиме MySQL
В новых версиях MySQL по умолчанию включен строгий режим(strict mode). Он не позволяет делать ошибки в типах и объемах данных при записи. Если его отключить и попытаться записать строку на 100 символов в поле, с выделенным местом под 32 символа, то первые 32 запишутся, а все остальное проигнорируется. Так можно потерять данные и даже не узнать об этом.
Но сейчас на серверах почти всегда включен строгий режим и при попытке впихнуть невпихуемое, MySQL забьет тревогу. Пример есть на скриншоте – это ошибка в консоле от скрипта на node.js, который пытается записать строку длиной 80 символов в поле с типом и размером varchar(50).
В этом кодревью нечего показывать по коду, но можно рассказать, как предотвратить подобные ситуации.
🔴 Ошибка случилась при оформлении заказа, когда пользователь ввел слишком длинный адрес доставки. В ответ он ничего не видел, просто не «тыкалась» кнопка. Это плохо, нужно всегда выводить понятные ошибки. Даже при самом негативном сценарии лучше отдать на фронт сообщение, что случилась беда. Пользователя нельзя оставлять без ответа.
🟡 В форме нужно добавить проверку на длину строки, если такой лимит есть в БД. Фронтовая валидация предотвратит 90% проблем.
🔴 Клиентские проверки спасут от некорректных данных только от рядовых пользователей. Но бывают умники, которые пользуются этой проблемой – могут отправить запрос с переполнением в обход фронтовой валидации. Это одни из первых шагов для взлома БД. Поэтому на бекенде тоже должны быть проверки, дублирующие фронтовые.
🟢 Хорошая практика вести логи ошибок. Их можно хранить, как в файлах, так и в базе данных. Мы для простоты и удобства, пишем логи в MongoDB, создавая под каждый проект отдельную БД и коллекции для разных логических кусков.
🟢 Ну и раз на скрин попала опечатка, упомяну и её. Название поля «adress» нужно переименовать в «address». Чтобы не создавать путаницу при работе с таблицей заказов
#КодРевью
В новых версиях MySQL по умолчанию включен строгий режим(strict mode). Он не позволяет делать ошибки в типах и объемах данных при записи. Если его отключить и попытаться записать строку на 100 символов в поле, с выделенным местом под 32 символа, то первые 32 запишутся, а все остальное проигнорируется. Так можно потерять данные и даже не узнать об этом.
Но сейчас на серверах почти всегда включен строгий режим и при попытке впихнуть невпихуемое, MySQL забьет тревогу. Пример есть на скриншоте – это ошибка в консоле от скрипта на node.js, который пытается записать строку длиной 80 символов в поле с типом и размером varchar(50).
В этом кодревью нечего показывать по коду, но можно рассказать, как предотвратить подобные ситуации.
🔴 Ошибка случилась при оформлении заказа, когда пользователь ввел слишком длинный адрес доставки. В ответ он ничего не видел, просто не «тыкалась» кнопка. Это плохо, нужно всегда выводить понятные ошибки. Даже при самом негативном сценарии лучше отдать на фронт сообщение, что случилась беда. Пользователя нельзя оставлять без ответа.
🟡 В форме нужно добавить проверку на длину строки, если такой лимит есть в БД. Фронтовая валидация предотвратит 90% проблем.
🔴 Клиентские проверки спасут от некорректных данных только от рядовых пользователей. Но бывают умники, которые пользуются этой проблемой – могут отправить запрос с переполнением в обход фронтовой валидации. Это одни из первых шагов для взлома БД. Поэтому на бекенде тоже должны быть проверки, дублирующие фронтовые.
🟢 Хорошая практика вести логи ошибок. Их можно хранить, как в файлах, так и в базе данных. Мы для простоты и удобства, пишем логи в MongoDB, создавая под каждый проект отдельную БД и коллекции для разных логических кусков.
🟢 Ну и раз на скрин попала опечатка, упомяну и её. Название поля «adress» нужно переименовать в «address». Чтобы не создавать путаницу при работе с таблицей заказов
#КодРевью
👍3
Логи-убийцы или история бесконечных падений
🤯 Что-то я перестарался с историей, начал писать и понесло. Весь текст не влезает даже в два поста – лимиты телеграма не большие. Но удалять жалко, а разбивать на 3-4 поста не хочется, такое читать не удобно. Поэтому попробую новый формат — публикация в telegraph, ссылка будет ниже.
📖 Кусочек истории, чтобы было понятно, о чем она:
Акт второй. Падение
Запуск запланировали на 12:00. Проверка всех систем – порядок. Ключ на старт и поехали! Ссылки на страницу публикуются в ВК, ютуб, почтовая рассылка и тд. Сразу же полетели заказы, оплаты проходят, сайт держится. Пять минут – полет нормальный. Трафик посетителей, если судить по метрике, скакнул примерно в 20-25 раз относительно спокойных дней.
12:07, сайт падает. Караул! Семь минут всего продержались. В чем дело? Бегом разбираться. Сервер выкидывает 504ю ошибку – лютые таймауты. На хостинге нагрузка запредельная, до 500% перерасход допустимых ресурсов. В консоле карнавал из подвисших процессов php.
📌 Полный текст истории: ссылка.
#Юмор #Статьи
🤯 Что-то я перестарался с историей, начал писать и понесло. Весь текст не влезает даже в два поста – лимиты телеграма не большие. Но удалять жалко, а разбивать на 3-4 поста не хочется, такое читать не удобно. Поэтому попробую новый формат — публикация в telegraph, ссылка будет ниже.
📖 Кусочек истории, чтобы было понятно, о чем она:
Акт второй. Падение
Запуск запланировали на 12:00. Проверка всех систем – порядок. Ключ на старт и поехали! Ссылки на страницу публикуются в ВК, ютуб, почтовая рассылка и тд. Сразу же полетели заказы, оплаты проходят, сайт держится. Пять минут – полет нормальный. Трафик посетителей, если судить по метрике, скакнул примерно в 20-25 раз относительно спокойных дней.
12:07, сайт падает. Караул! Семь минут всего продержались. В чем дело? Бегом разбираться. Сервер выкидывает 504ю ошибку – лютые таймауты. На хостинге нагрузка запредельная, до 500% перерасход допустимых ресурсов. В консоле карнавал из подвисших процессов php.
📌 Полный текст истории: ссылка.
#Юмор #Статьи
👍8😁2
Лотерея с id-шником записи
📖 На скрине два куска кода из разных функций, вырезал только нужные части для понимания. Логика следующая:
– получаем сообщение от пользователя и записываем его в БД
– проверяем сообщение, если это одна из служебных команд, то отправляем сообщение в ответ
– обновляем статус пользовательского сообщения в БД, ставим пометку, что успешно его обработали и не потеряли
Это логирование общения бота с пользователем — отмечаем, какие сообщения были обработаны, а какие остались без ответов.
📌 Если начать проверять эту логику, то все отработает без ошибок. Но как только ботом станут активно пользоваться, хотя бы несколько человек одновременно, то все перепутается. Флаги успешной обработки начнут выставляться не там сообщениям. Поскольку есть задержка между двумя запросами к БД: создание сообщения и его обновление.
🔴 ID сообщения, которое будет обновляться, нужно возвращать функцией writeDataToDB и передавать в updateQuerySuccess, чтобы работать с конкретной записью в БД. А не надеяться на лучшее и брать последнюю запись в таблице
🟡 ID – это уникальный идентификатор, он только для определения уникальной записи. Для сортировки по порядку должно быть поле с датой создания/обновления или отдельное поле для сортировки, а не MAX(id).
🟡 Бонус-пункт. В switch…case проверяется прямое вхождение сообщения. Тут тоже сломается очень быстро, поскольку пользователи могут написать что угодно и в любом формате. Нужно добавить приведение сообщения к нижнему регистру и обрезать пробелы вначале и в конце текста.
#КодРевью
📖 На скрине два куска кода из разных функций, вырезал только нужные части для понимания. Логика следующая:
– получаем сообщение от пользователя и записываем его в БД
– проверяем сообщение, если это одна из служебных команд, то отправляем сообщение в ответ
– обновляем статус пользовательского сообщения в БД, ставим пометку, что успешно его обработали и не потеряли
Это логирование общения бота с пользователем — отмечаем, какие сообщения были обработаны, а какие остались без ответов.
📌 Если начать проверять эту логику, то все отработает без ошибок. Но как только ботом станут активно пользоваться, хотя бы несколько человек одновременно, то все перепутается. Флаги успешной обработки начнут выставляться не там сообщениям. Поскольку есть задержка между двумя запросами к БД: создание сообщения и его обновление.
🔴 ID сообщения, которое будет обновляться, нужно возвращать функцией writeDataToDB и передавать в updateQuerySuccess, чтобы работать с конкретной записью в БД. А не надеяться на лучшее и брать последнюю запись в таблице
🟡 ID – это уникальный идентификатор, он только для определения уникальной записи. Для сортировки по порядку должно быть поле с датой создания/обновления или отдельное поле для сортировки, а не MAX(id).
🟡 Бонус-пункт. В switch…case проверяется прямое вхождение сообщения. Тут тоже сломается очень быстро, поскольку пользователи могут написать что угодно и в любом формате. Нужно добавить приведение сообщения к нижнему регистру и обрезать пробелы вначале и в конце текста.
#КодРевью
👍5
Автоматическое снятие режима «Без звука» в задачах Битрикс24
📖 В облачной CRM-ке Битрикс24(версия таскменеджер), есть интересная «особенность». По умолчанию при добавлении участников-наюлюдателей в задачу, включается беззвучный режим. И никакие уведомления не приходят из этой задачи. Если дополнительно не «пнуть», то есть большая вероятность потерять задачу.
Эту фичу нельзя выключить через настройки. А поскольку битрикс24 почти всегда облачный, в код не попасть – допилить не получится. Техподдержка разводит руками и ничем помочь не может. Обещали поправить, но, не понятно когда – почти год прошел с момента обращения, ничего не изменилось.
Потеряв очередную задачу, начали искать решения. У БХ24 есть хуки, но через них не всё доступно. В официальной документации нет ни одной апи, которая может обновить или получить статус этого колокольчика. Но открыв консоль браузера, можно увидеть, что запросы-то идут. Значит до них можно попробовать достучаться. На скрине показан запрос, он отправляется при снятии режиме «Без уведомлений».
📌 Чиним:
1. Берем класс, который умеет авторизовываться в БХ24 через хуки, вот такой подойдет: ссылка.
2. Создаем в БХ24 входящий хук с полными правами доступу к задачам
3. Далее пишем простенький скрипт, который потом будем вызывать по расписанию:
— Сперва достаем все свои задачи через апи tasks.task.list и фильтром по полю 'IS_MUTED' == 'Y'. Это флаг, который не задокументирован, в консоле тоже откопали. Отдает только те задачи, которые с выключенными уведомлениями. Можно еще докинуть фильтров по статусам, чтоб не тащить закрытые или какие-то еще не нужные.
— И далее включаем уведомления для задач через запрос к апи tasks.task.unmute, которая принимает всего один параметр taskId – id задачи. А id-шники у нас уже есть, достали предыдущим запросом
4. Вешаем скрипт на крон. Нам хватает вызова раз в час. Но тестил и каждые 10 минут, бан от битрикса не получили
5. Радуемся уведомлениям о задачах. Ну или не очень радуемся, задачи ж делать придется…
#Костыли
📖 В облачной CRM-ке Битрикс24(версия таскменеджер), есть интересная «особенность». По умолчанию при добавлении участников-наюлюдателей в задачу, включается беззвучный режим. И никакие уведомления не приходят из этой задачи. Если дополнительно не «пнуть», то есть большая вероятность потерять задачу.
Эту фичу нельзя выключить через настройки. А поскольку битрикс24 почти всегда облачный, в код не попасть – допилить не получится. Техподдержка разводит руками и ничем помочь не может. Обещали поправить, но, не понятно когда – почти год прошел с момента обращения, ничего не изменилось.
Потеряв очередную задачу, начали искать решения. У БХ24 есть хуки, но через них не всё доступно. В официальной документации нет ни одной апи, которая может обновить или получить статус этого колокольчика. Но открыв консоль браузера, можно увидеть, что запросы-то идут. Значит до них можно попробовать достучаться. На скрине показан запрос, он отправляется при снятии режиме «Без уведомлений».
📌 Чиним:
1. Берем класс, который умеет авторизовываться в БХ24 через хуки, вот такой подойдет: ссылка.
2. Создаем в БХ24 входящий хук с полными правами доступу к задачам
3. Далее пишем простенький скрипт, который потом будем вызывать по расписанию:
— Сперва достаем все свои задачи через апи tasks.task.list и фильтром по полю 'IS_MUTED' == 'Y'. Это флаг, который не задокументирован, в консоле тоже откопали. Отдает только те задачи, которые с выключенными уведомлениями. Можно еще докинуть фильтров по статусам, чтоб не тащить закрытые или какие-то еще не нужные.
— И далее включаем уведомления для задач через запрос к апи tasks.task.unmute, которая принимает всего один параметр taskId – id задачи. А id-шники у нас уже есть, достали предыдущим запросом
4. Вешаем скрипт на крон. Нам хватает вызова раз в час. Но тестил и каждые 10 минут, бан от битрикса не получили
5. Радуемся уведомлениям о задачах. Ну или не очень радуемся, задачи ж делать придется…
#Костыли
👍3❤1
Автоматическое закрытие тестовых сайтов
📖 Любая адекватная разработка ведется отдельно от рабочего сайта. Прежде, чем запустить новый проект или доработки по существующему, проходит ряд проверок и утверждений на тестовых площадках. Чтобы корректно отладить все доработки, тестовый сайт должен быть максимально идентичен рабочему. В том числе и по контенту.
Тестовые площадки посещают еще и заказчики, поэтому сайты и сервисы доступны за пределами локальной сети. Это проблема, ведь поисковые роботы шастают там, где их не ждут. И тесты попадают в поиск, снижая поисковый вес рабочему сайту.
В мануалах гугла и яндекса пишут и утверждают, что поисковых роботов можно блокировать через robots.txt или мета-теги noindex. Но это не всегда так, проверено уже. К тому же, robot.txt или noindex нужно игнорировать в репозитории, чтобы они не попали на боевой и не натворили дел. За этим сложно уследить, особенно если много проектов в работе и на каждом проходят регулярные релизы.
📌 Чтобы без лишних проблем и наверняка заблокировать все тестовые сайты, мы написали несколько скриптов, которые проверяют наличие и добавляют Basic Authorization:
1. Скрипт проверки и обновления всех .htaccess для сайтов, которые работают на веб-сервере Apache. Если нет правила для блокировки, то оно дописывается
2. Скрипт проверки конфигов для хостов, работающих на веб-сервере nginx. Аналогично первому пункту следит и добавляет авторизацию
3. Скрипт генерации нового пароля каждый месяц. Это защита от сторонних пользователей
4. Ежедневно пингуются все тестовые сайты и проверяется код ответа http. Если код отличается от 401го(Unauthorized), то телеграм бот присылает в общую группу уведомление со списком таких доменов
❗️P.S. Авторизация бесючая, но способ стопроцентный – сайт точно будет закрыт. Главное не забыть про исключения для IP-адресов, где не использовать авторизацию: рабочий для удобства и серверный, для запросов к api.
❗️P.P.S. Скрипты не выкладываю, их оформить сперва нужно. Если будет интерес, то соберу через неделю-две.
#Кейсы
📖 Любая адекватная разработка ведется отдельно от рабочего сайта. Прежде, чем запустить новый проект или доработки по существующему, проходит ряд проверок и утверждений на тестовых площадках. Чтобы корректно отладить все доработки, тестовый сайт должен быть максимально идентичен рабочему. В том числе и по контенту.
Тестовые площадки посещают еще и заказчики, поэтому сайты и сервисы доступны за пределами локальной сети. Это проблема, ведь поисковые роботы шастают там, где их не ждут. И тесты попадают в поиск, снижая поисковый вес рабочему сайту.
В мануалах гугла и яндекса пишут и утверждают, что поисковых роботов можно блокировать через robots.txt или мета-теги noindex. Но это не всегда так, проверено уже. К тому же, robot.txt или noindex нужно игнорировать в репозитории, чтобы они не попали на боевой и не натворили дел. За этим сложно уследить, особенно если много проектов в работе и на каждом проходят регулярные релизы.
📌 Чтобы без лишних проблем и наверняка заблокировать все тестовые сайты, мы написали несколько скриптов, которые проверяют наличие и добавляют Basic Authorization:
1. Скрипт проверки и обновления всех .htaccess для сайтов, которые работают на веб-сервере Apache. Если нет правила для блокировки, то оно дописывается
2. Скрипт проверки конфигов для хостов, работающих на веб-сервере nginx. Аналогично первому пункту следит и добавляет авторизацию
3. Скрипт генерации нового пароля каждый месяц. Это защита от сторонних пользователей
4. Ежедневно пингуются все тестовые сайты и проверяется код ответа http. Если код отличается от 401го(Unauthorized), то телеграм бот присылает в общую группу уведомление со списком таких доменов
❗️P.S. Авторизация бесючая, но способ стопроцентный – сайт точно будет закрыт. Главное не забыть про исключения для IP-адресов, где не использовать авторизацию: рабочий для удобства и серверный, для запросов к api.
❗️P.P.S. Скрипты не выкладываю, их оформить сперва нужно. Если будет интерес, то соберу через неделю-две.
#Кейсы
❤4
Массовая оптимизация картинок сервисом TinyPNG
📖 Оптимизация изображений для веба – это один из важных шагов ускорения работы сайта или сервиса. Динамические картинки, которые добавляются через админку, должны обрабатываться бекендом в момент их добавления. Но кроме динамики, часто на страницах используется и статика. Под сборки верстальщиков есть много плагинов, которые выполняют оптимизацию изображений, но они все уступают профессиональным программам и сервисам. Мы много перепробовали различных вариантов и самым идеальным для себя выбрали TinyPNG. Качество изображений совсем не страдает, а уровень оптимизации удивляет – часто картинки удается сжать на 60-75% по весу.
У сервиса есть ряд ограничений. Через веб-интерфейс одновременно можно сжать не более 20 картинок, а один файл не может превышать 5мб. Но если обращаться по api к сервису, то таких лимитов нет. Бесплатное ограничение на использование api составляет 500 обработок в месяц. Этого хватает, если каждый дизайнер и верстальщик использует свой индивидуальный аккаунт (api key).
Чтобы было удобней пользоваться сервисом по апи, набросали скрипт на go lang и скомпилировали его под Windows и MacOs. Теперь пользоваться сервисом TinyPNG стало в разы быстрей и удобней, приложение за счет многопоточности go lang, параллельно обрабатывает всю пачку картинок. Так же приложение не ломает структуру папок, если картинки разложены по разным директориям. Достаточно перенести все папки с изображениями в служебную директорию input, запустить скрипт и забрать такую же структуру папок и файлов из output-а.
📌 Подробная инструкция по использования готового приложения у нас собрана с описаниями и скринами в ридми открытого репозитория: README.md.
Так же открыли и исходники, если кто-то решит доработать приложение под свои нужны: репозиторий.
❗️P.S. В конфиге тестовый ключ от TinyPNG, он бесплатный – лимит 500 обращений в месяц. Сильно не балуйтесь, это для тестов и посмотреть, как работает приложение. Перед использованием нужно создать личный ключ.
#НашиРазработки
📖 Оптимизация изображений для веба – это один из важных шагов ускорения работы сайта или сервиса. Динамические картинки, которые добавляются через админку, должны обрабатываться бекендом в момент их добавления. Но кроме динамики, часто на страницах используется и статика. Под сборки верстальщиков есть много плагинов, которые выполняют оптимизацию изображений, но они все уступают профессиональным программам и сервисам. Мы много перепробовали различных вариантов и самым идеальным для себя выбрали TinyPNG. Качество изображений совсем не страдает, а уровень оптимизации удивляет – часто картинки удается сжать на 60-75% по весу.
У сервиса есть ряд ограничений. Через веб-интерфейс одновременно можно сжать не более 20 картинок, а один файл не может превышать 5мб. Но если обращаться по api к сервису, то таких лимитов нет. Бесплатное ограничение на использование api составляет 500 обработок в месяц. Этого хватает, если каждый дизайнер и верстальщик использует свой индивидуальный аккаунт (api key).
Чтобы было удобней пользоваться сервисом по апи, набросали скрипт на go lang и скомпилировали его под Windows и MacOs. Теперь пользоваться сервисом TinyPNG стало в разы быстрей и удобней, приложение за счет многопоточности go lang, параллельно обрабатывает всю пачку картинок. Так же приложение не ломает структуру папок, если картинки разложены по разным директориям. Достаточно перенести все папки с изображениями в служебную директорию input, запустить скрипт и забрать такую же структуру папок и файлов из output-а.
📌 Подробная инструкция по использования готового приложения у нас собрана с описаниями и скринами в ридми открытого репозитория: README.md.
Так же открыли и исходники, если кто-то решит доработать приложение под свои нужны: репозиторий.
❗️P.S. В конфиге тестовый ключ от TinyPNG, он бесплатный – лимит 500 обращений в месяц. Сильно не балуйтесь, это для тестов и посмотреть, как работает приложение. Перед использованием нужно создать личный ключ.
#НашиРазработки
👍5
Оптимизация видео под Web
📖 В продолжение темы прошлого поста, займемся еще немного оптимизацией. На этот раз обработаем видео, чтобы работало шустрей на страницах сайта. В первую очередь, чтобы ролик вообще работал, он должен иметь формат mp4 – этот формат поддерживается всеми браузерами, как десктопными, так и мобильными. Далее можно порезать вес файла за счет уменьшения его размера до 720, на страницах сайтов этого более, чем достаточно. И еще по мелочам можно сэкономить веса: уменьшить битрейт звуковой дорожки, вырезать лишние кадры и немного пожать качество видео.
Все вышеописанные манипуляции легко выполнять с помощью FFmpeg – это мощный инструмент для работы с аудио и видео файлами. С его помощью можно легко и быстро обработать файлы. FFmpeg кроссплатформенный, что позволяет использовать этот пакет библиотек как на серверах с ОС linux, так и на любом рабочем компьютере с windows или macOs. Все действия можно выполнять из консоли, далее приведен пример запроса и расшифрованы все его куски.
📌 Команда с пример обработки видео input.avi, на выходе получится оптимизированный файл output.mp4:
– разрешаем перезаписывать выходные файлы, если такой уже существует: -y
– заменяем аудио кодек: -acodec aac
– уменьшаем битрейт звука до 128 кбит/с: -b:v 128K
– ресайзим до 720 по ширине, высота пропорционально расчитывается. Тут важно, чтобы были четные значения, иначе ffmpeg не сможет сделать ресайз: -filter:v scale=-2:720
– Уменьшаем fps до 24 кадров: -r 24
– Задаем контроль качества виодео на середине (30 из 51 возможных): -crf 30
– И переносим мета-данные в начало видео, для ускорения прогрузки первых кадров: -movflags +faststart
#БазаЗнаний
📖 В продолжение темы прошлого поста, займемся еще немного оптимизацией. На этот раз обработаем видео, чтобы работало шустрей на страницах сайта. В первую очередь, чтобы ролик вообще работал, он должен иметь формат mp4 – этот формат поддерживается всеми браузерами, как десктопными, так и мобильными. Далее можно порезать вес файла за счет уменьшения его размера до 720, на страницах сайтов этого более, чем достаточно. И еще по мелочам можно сэкономить веса: уменьшить битрейт звуковой дорожки, вырезать лишние кадры и немного пожать качество видео.
Все вышеописанные манипуляции легко выполнять с помощью FFmpeg – это мощный инструмент для работы с аудио и видео файлами. С его помощью можно легко и быстро обработать файлы. FFmpeg кроссплатформенный, что позволяет использовать этот пакет библиотек как на серверах с ОС linux, так и на любом рабочем компьютере с windows или macOs. Все действия можно выполнять из консоли, далее приведен пример запроса и расшифрованы все его куски.
📌 Команда с пример обработки видео input.avi, на выходе получится оптимизированный файл output.mp4:
ffmpeg -y -i input.avi -filter:v scale=-2:720 -acodec aac -b:v 128K -q:v 10 -r:v 24 -crf 30 -movflags +faststart output.mp4📌 Расшифровка модификаторов команды:
– разрешаем перезаписывать выходные файлы, если такой уже существует: -y
– заменяем аудио кодек: -acodec aac
– уменьшаем битрейт звука до 128 кбит/с: -b:v 128K
– ресайзим до 720 по ширине, высота пропорционально расчитывается. Тут важно, чтобы были четные значения, иначе ffmpeg не сможет сделать ресайз: -filter:v scale=-2:720
– Уменьшаем fps до 24 кадров: -r 24
– Задаем контроль качества виодео на середине (30 из 51 возможных): -crf 30
– И переносим мета-данные в начало видео, для ускорения прогрузки первых кадров: -movflags +faststart
#БазаЗнаний
👍5🔥1
БАГодельня
Оптимизация видео под Web 📖 В продолжение темы прошлого поста, займемся еще немного оптимизацией. На этот раз обработаем видео, чтобы работало шустрей на страницах сайта. В первую очередь, чтобы ролик вообще работал, он должен иметь формат mp4 – этот формат…
Опубликовать приложение(под win и mac) с инструкцией для автоматической оптимизации видео под web(прошлый пост)?
Anonymous Poll
53%
Да, а то в консоле неудобно
21%
Нет, я и в консоле справляюсь
26%
Я не пользуюсь оптимизацией видео
Четырехбайтовые символы в базе данных MySQL
📖 В 2017 году, я впервые столкнулся с проблемой хранения эмодзи в базе данных, даже статью про это писал: ссылка. Тогда набор смайликов был совсем небольшим – грустные и веселые мордочки, сейчас же их словарь ощутимо пополнился. И встретить такие символы (да, это символы) можно почти везде.
Особенно часто эмодзи встречаются в соц.сетях, в том числе и телеграм. На скрине ошибка, которую поймали в телеграмовском боте, его только запустили и находится в режиме тестового запуска. Прозевали и не проверили кодировку соединения с базой данных. В самой БД, таблицах и полях корректная кодировка – utf8mb4. Но коннект в коде не обработан, по умолчанию соединение с MySql использует utf8. Ошибку выловили и исправили быстро, но пользователь понервничал, не мог запустить бота.
Обычные символы из алфавита имеют 3-х байтовую кодировку, а эмодзи уже не помещается, ему нужно 4 байта. Соответственно utf8, который работает только с 3-байтовыми символами, уже не справляется.
🔴 Важно проверять данные, которые приходят на бекенд. Должна быть валидация, как значений, так и их формата. Например, если экранировать эмодзи, то и в таблицу с кодировкой utf8 можно записать данные.
🔴 Но лучше не ограничивать пользователей в наборе символов и при работе с соц.сетями, комментариями и другими полями, где доступны эмодзи, нужно это учитывать и использовать кодировку utf8mb4.
#КодРевью
📖 В 2017 году, я впервые столкнулся с проблемой хранения эмодзи в базе данных, даже статью про это писал: ссылка. Тогда набор смайликов был совсем небольшим – грустные и веселые мордочки, сейчас же их словарь ощутимо пополнился. И встретить такие символы (да, это символы) можно почти везде.
Особенно часто эмодзи встречаются в соц.сетях, в том числе и телеграм. На скрине ошибка, которую поймали в телеграмовском боте, его только запустили и находится в режиме тестового запуска. Прозевали и не проверили кодировку соединения с базой данных. В самой БД, таблицах и полях корректная кодировка – utf8mb4. Но коннект в коде не обработан, по умолчанию соединение с MySql использует utf8. Ошибку выловили и исправили быстро, но пользователь понервничал, не мог запустить бота.
Обычные символы из алфавита имеют 3-х байтовую кодировку, а эмодзи уже не помещается, ему нужно 4 байта. Соответственно utf8, который работает только с 3-байтовыми символами, уже не справляется.
🔴 Важно проверять данные, которые приходят на бекенд. Должна быть валидация, как значений, так и их формата. Например, если экранировать эмодзи, то и в таблицу с кодировкой utf8 можно записать данные.
🔴 Но лучше не ограничивать пользователей в наборе символов и при работе с соц.сетями, комментариями и другими полями, где доступны эмодзи, нужно это учитывать и использовать кодировку utf8mb4.
#КодРевью
👍5