Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Классический арканоид для любителей ретро-игр. Защитите космический корабль с Печенькой (и не только) на борту, проходя уровни в арканоиде.

Арканоид Пикабу

Арканоид, Аркады, Веселая

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Python + Истории из жизни

С этим тегом используют

Программирование IT Программист Обучение IT юмор Разработка YouTube Мат Юмор Ситуация Воспоминания Негатив Работа Волна постов Все
15 постов сначала свежее
12
8088
8088
5 месяцев назад
Серия АйТи на удаленке

Старые добрые вечеринки ИТшников )))⁠⁠

Старые добрые вечеринки ИТшников ))) Истории из жизни, Удаленная работа, IT, Студенты, Универ, Высшее образование, Карьера, Telegram (ссылка), Отдел кадров, Жизненно, Жизнь, Дневник, Учеба, Успех, Фриланс, Программирование, Python, Опыт, Поиск работы

Вечеринка ИТшников

На самом деле, все было значительно круче, начиналось все с поинтовок (олды должны знать). Тут я научился пить пиво — блин, оно было очень вкусным. Тут же пикапили девчонок, им было интересно — че за тусовка такая почти без женщин.

В то же время, параллельно с универом, тянули первые сети, собирали деньги за это с новых русских по $50 за месяц.

Потом открывали первые игровые клубы и собирали деньги со школоты по 6 руб за час рубилова в FIFA, Team Fortress и StarCraft.

Потом нас забирали в американские конторы с руками и головой за $500. Это были денжища. Ну а дальше вы знаете, я докатился до удаленки и Python комьюнити. Но начиналось все почти как на картинке, так что не судите по одежке, смотрите в суть.

Показать полностью 1
Истории из жизни Удаленная работа IT Студенты Универ Высшее образование Карьера Telegram (ссылка) Отдел кадров Жизненно Жизнь Дневник Учеба Успех Фриланс Программирование Python Опыт Поиск работы
4
8088
8088
6 месяцев назад
Серия АйТи на удаленке

Tiktok, youtube и shorts убивают мозг⁠⁠

Я АйТишник на удаленке. Социальными сетями не пользуюсь - бесконечная лента это реально бездна траты времени. На youtube смотрю интервью, научные лекции, фильмы, но не давно подсел на shorts на youtube (аналог TikTok). Это тоже убийца времени, но с другой стороны заметил следующее:

  1. Я стал почти все видео смотреть на 1.5x-2x

  2. Я теперь могу смотреть два видео одновременно, например на фоне кино из 20 века (они все там достаточно медленные) + лекцию уже на 1.5x.

  3. В пункте 2 еще могу делать несложную работу (что-то что я уже делал много раз), например расставлять приоритеты команде, фильтровать задачи по работе, писать несложный код, делать контент или отвечать на вопросы в Python комьюнити, смотреть/отбирать входящие резюме на вакансии.

То есть мой мозг прокачался и способен выполнять больше параллельных задач. При этом не могу делать одновременно:

Писать сложный код, думать-делать стратегию для компании/команды, придумывать новые форматы для Python комьюнити, проводить встречи, особенно one-to-one.

Короче все что требует креативности, или общения с полным погружением не параллелиться пока.

[моё] Программирование Удаленная работа IT Истории из жизни Дневник Youtube Shorts Программист Карьера Новый Год 2025 Работа HR Поиск работы Успех Психология Предпринимательство Отдел кадров Фриланс Опыт Python Собеседование Текст
9
15
et19
6 месяцев назад
Бесит!

Ответ на пост «Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники?»⁠⁠1

Полностью согласен с ТС, но вот в таком виде это реализовать не удаётся. Тем не менее, вполне эффективен вариант: полностью не принимать никакие звонки не из списка контактов, если ожидается звонок с левого номера, то это известно заранее, все остальные идут лесом. Ну вот например, из недавнего. @Citilink.ru, какого чёрта ваши курьеры обрывают мне телефон в 7-8 утра, если в ЛК русским по белому написано, что доставка с 10 утра? Ранее этого времени я не жду звонок, а любой, кто будет обрывать номер и не изволит рассказать о цели вызова секретарю Олегу, немедленно улетит в ЧС! И вообще, @Sber, @Dom.ru, ru и прочие, что за дебилистичный подход у ваших менеджеров с задалбыванием клиентов звонками? На дворе 21 век, звонок - это хамство, если он заранее не оговорён! Так мало того, ещё и звонки с каких-то левых мобильных номеров. Мне вот интересно, что курят в организациях те, кто считает, что клиент должен принимать звонок от сотрудника с левого номера?

Вопрос Спроси Пикабу Сотовые операторы Телефонные мошенники IT Развод на деньги Проблема Telegram (ссылка) Интернет-мошенники Мошенничество МТС Удаленная работа Врачи Медицина Python Фриланс Дневник Истории из жизни Служба поддержки Работа Длиннопост Ответ на пост Текст
11
3
8088
8088
6 месяцев назад
Бесит!
Серия АйТи на удаленке

Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники?⁠⁠1

Пришел на запись на контрольные сканы к врачу, а тут бах! там что-то переполнено. И вместо того, чтобы выписать мне направления в моем любимом ЕМИАСике, чтобы я потом лежа завернутым в тепленькое одеяльце из своей удаленочки, выбрал удобное мне время, и мог 8 раз перенести :-)

Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники? Вопрос, Спроси Пикабу, Сотовые операторы, Телефонные мошенники, IT, Развод на деньги, Проблема, Telegram (ссылка), Интернет-мошенники, Мошенничество, МТС, Удаленная работа, Врачи, Медицина, Python, Фриланс, Дневник, Истории из жизни, Служба поддержки, Работа, Длиннопост

Я на удаленке. Кошка тоже.

Врач говорит - ожидайте звонка в течении 2х недель в случайное время, со случайного телефона!? для записи голосом!

Сразу почувствовал себя как в ЕВРОПЕ ;-) Я говорю - НО до меня нельзя дозвониться со случайного телефона!? Вот же - каждый день пытаются:

Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники? Вопрос, Спроси Пикабу, Сотовые операторы, Телефонные мошенники, IT, Развод на деньги, Проблема, Telegram (ссылка), Интернет-мошенники, Мошенничество, МТС, Удаленная работа, Врачи, Медицина, Python, Фриланс, Дневник, Истории из жизни, Служба поддержки, Работа, Длиннопост

Полезные звонки

Доходит прямо до DDOS атак! До 50 звонков в день в течении 2х лет, с тех пор как я перестал брать трубку с неизвестных номеров. У меня включен whitelist, то есть я вижу только свои звонки.

Лучше уж вот такие мессаджи, где я неспешно приму решение (Заблокировать?), когда у меня будет на это время:

Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники? Вопрос, Спроси Пикабу, Сотовые операторы, Телефонные мошенники, IT, Развод на деньги, Проблема, Telegram (ссылка), Интернет-мошенники, Мошенничество, МТС, Удаленная работа, Врачи, Медицина, Python, Фриланс, Дневник, Истории из жизни, Служба поддержки, Работа, Длиннопост

Важный мессадж

У меня самого до 7-8 созвонов в google meet в день, либо занят спортом, либо думаю решаю сложную задачу (фокусное время), и если отвечать на 10-20-30 звонков из которых 50% мошенники, и 50% рекламы, мне надо уволиться с работы. И забросить свое ламповое Python комьюнити. Сплошной убыток :-(

Вряд ли упущенная выгода от не взятого звонка будет выше. Сначала был даже FOMO, но со временем понял - это было одно из самых выгодных решений за 2 года.

Почему я уже 2 года не беру трубку?! И как записаться к врачу? И при чем тут спам и мошенники? Вопрос, Спроси Пикабу, Сотовые операторы, Телефонные мошенники, IT, Развод на деньги, Проблема, Telegram (ссылка), Интернет-мошенники, Мошенничество, МТС, Удаленная работа, Врачи, Медицина, Python, Фриланс, Дневник, Истории из жизни, Служба поддержки, Работа, Длиннопост

Я веду пачку на марафоне и мне некогда отвечать на звонки.

Теперь хочу перейти на следующий уровень - отказаться от телефона совсем, все контакты и работа только через лаптоп. Пока не знаю точно как это сделать, изучаю опыт коллег по цеху.

А как вы живете с таким кол-вом телефонного спама?

Показать полностью 4
[моё] Вопрос Спроси Пикабу Сотовые операторы Телефонные мошенники IT Развод на деньги Проблема Telegram (ссылка) Интернет-мошенники Мошенничество МТС Удаленная работа Врачи Медицина Python Фриланс Дневник Истории из жизни Служба поддержки Работа Длиннопост
21
156
Timeweb.Cloud
Timeweb.Cloud
2 года назад
IT-юмор
Серия IT

Байки погромиста. Если кто-то скажет, что программирование — это скучно⁠⁠

Автор: kesn

Оригинальный материал

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Детектив kesn всегда готов помочь!

Вообще я, как правило, нормально программирую. Иногда даже такое заворачиваю, что сам тащусь весь день.

Но если б я писал, какой я красавчик, то никому не было бы интересно. Поэтому сегодня — очередная партия программистских историй от меня любимого, с косяками, багами и болью. Иногда это происходило по запарке, или когда я торопился, или после нудной работы, когда мозг уже плавился, а иногда просто я тупил, потому что я человек. В общем, такие вот типичные будни кодера. Наслаждайтесь!

❯ Функция не выполняется

Попросил меня как-то клиент отладить его скрипт. Говорит, не работает. Невероятно!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Я, когда клиент говорит, что ничего не работает

Скрипт секретный — ну как, для трейдинга на бирже, и принесёт миллионы денег, конечно же, но только когда заработает без ошибок. Поэтому клиент не пересылает мне его, а запускает screen share и делает, что я ему говорю. То ещё удовольствие, но хозяин-барин — оплата почасовая.

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

Смотрим в содержимое функции. Как и положено, это полотно кода на пару экранов, сходу так и не поймёшь, что она делает. Повсюду return что-то там, ветвления всякие итд. То глупое чувство, когда клиент тебя ждёт, а ты ничо не понимаешь и косплеишь рыбу.

Осложнялось всё тем, что отлаживать через клиента — ну такое. Он может запустить скрипт, но вот отладчик для него - страшное слово, и максимум, на что можно рассчитывать — это поставить print() в нужных местах. Разгадка оказалась проста: где-то в середине функции, там, где это было менее всего заметно, вместо return клиент написал yield. А в питоне yield — это магическое слово, которое превращает функцию в генератор, а все return ... - в как бы raise StopIteration(...), и вместо результата возвращается итератор, и выполнение кода останавливается до следующего обращения... Короче говоря, всего-навсего одним ключевым словом клиент полностью раздолбал логику своей программы. Маэстро!

❯ Как ловить эксепшн из генератора

Вообще генераторы в питоне — это и добро, и зло, и я ещё напишу про это в следующей статье (поэтому подписывайтесь, чтобы не пропустить). И хотя я программирую где-то со времён построения египетских пирамид, всё равно я умудряюсь делать ошибки.

Вот, например, кусок кода:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно
Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Тут у меня есть функция cache.apply(), которая берет quota_chunks, делает с ними какой-то вжух-вжух и возвращает новые quota_chunks. Я нарисовал диаграмму, чтобы изобразить этот процесс в более понятной форме.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Иногда случается так, что эта вжух-функция не срабатывает, и тогда, как и положено приличному питон-коду, бросается исключение.

Возможно, раньше эта вжух-функция была действительно функцией, но потом она превратилась в генератор (для большей эффективности). Генераторы всем хороши, кроме одного: они откладывают выполнение кода, и в реальности узнать, когда ваш код выполнится, бывает затруднительно. Вы можете создать генератор, отправить его на вход другому генератору, затем передать это в функцию, и уж тогда где-то внутри этой функции вызовется код.

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

Именно это тут и случилось. Я вызвал этот генератор и проверил, что он отработал без ошибок, но на самом деле генератор отработал совершенно в другом месте — там, где вызывается spy() — и именно там он и упал.

А знаете как я это отловил? В тестах. Поэтому пишите тесты.

❯ Строго по инструкции

Клиенты бывают разные: какие-то умеют немножко в HTML и frontend, а некоторые из наших клиентов умеют в backend. Один из таких клиентов часто сам писал backend логику и давал нам её на проверку, чтобы мы ему исправили баги, а может быть где-то сделали рефакторинг или code review.

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

И вот клиент взял нашу инструкцию и начал следовать тому, что там написано, слово в слово. Надо понимать, что разработчики обычно пытаются понять, что они делают (по крайней мере я на это надеюсь). Соответственно, те, кто читал этот скрипт, понимали, что должно быть сделано, и в случае, если у них, например, вместо pip используется poetry, а вместо apt-get у них pacman (i use arch btw), то они заменяли соответствующие команды.

Клиент же делал всё слово в слово, и он написал нам, потому что на одном из шагов у него случилась проблема. Если быть точнее, у нас в инструкции была описана ветка master, а на гитхабе по умолчанию ветка main, поэтому какая-то команда не находила нужную ветку.

«Изи фикс» — подумал я, созвонился с клиентом объяснил, что нужно делать, и хотел отключаться... когда возникла ещё одна ошибка. Оказывается, в инструкции был косяк, и при выполнении команды шелл делал подстановку, когда видел $SOMETHING — то есть не было экранирования. Мы исправили и это, и буквально через несколько секунд всплыл ещё один косяк. А потом ещё. И ещё.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Где-то через час я сказал клиенту, что пусть он всё бросит и я задеплою всё сам, а потом мы обновим ридми. Было стыдно.

❯ Ответочка

Когда-то я работал на интернет-магазин, и мы заметили, что у нас появляются фейковые заказы каждые утро и вечер. Сначала мы не смекнули, что к чему, но потом поняли фишку: идентификаторы заказа у нас были обычные IDшки из Postgres, поэтому конкурент мог сделать заказ утром (номер заказа 10), сделать заказ вечером (номер заказа 15) и просто вычесть второй номер заказа из первого и получить количество заказов, которые мы получили за день (15 - 10 = 5). Я до сих пор часто нахожу эту ошибку во многих проектах, и примерно могу оценить размер этих проектов.

Эту ошибку легко исправить: достаточно заменить последовательные ID на случайные — например, вместо номера заказа использовать timestamp или UUID.

Но сам факт мониторинга нашего магазина конкурентом меня здорово раззадорил, и я полез к нему на сайт что-нибудь тоже искать.

Мой девиз — «кто ищет тот всегда найдёт» (посмотрите мои статьи про уязвимости на хабре - 1, 2). Так и тут, я искал и обнаружил, что конкурент выкладывает розничные прайсы публично, а вот оптовые — только для зарегистрированных и проверенных партнёров. Сам файл он раздаёт nginx'ом с адреса вроде http://some-site.com/files/розничный_прайс.xls. А если так, то, скорее всего, никакой аутентификации при помощи бэкенда для самого файла нет, а значит, можно попробовать найти оптовый прайс.

Используя весь опыт, накопленный человечеством за все годы его существования, я заменил слово розничный на оптовый в названии файла... и совершенно забесплатно, без регистрации и смс получил ежедневное обновление оптовых цен конкурентов. Соответственно, я мог предлагать оптовикам цены те же или ниже и получать больше профита. Хехе.

❯ Скрапинг со скоростью света

В одном из моих проектов я использовал api ВКонтакте, чтобы анализировать кожаные мешки. Там не нужна была супер-скорость, поэтому я не полез в async, а просто написал функцию и распараллелил её по потокам при помощи ThreadPoolExecutor.

Программа начала просто летать! Вот как это делают сеньоры! Саенс, бич!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Слева направо: саенс, бич

Потом я начал подозревать, что программа работает слишком быстро даже для такого классного парня, как я. Я полез смотреть результаты, а там ничего не было, потому что в каждом из потоков программа очень быстро падала с ошибкой, а так как это потоки, то exception в потоке не «всплывал» в основную программу, и я думал, что всё норм.

Поэтому если всё работает слишком хорошо, то, возможно, всё очень плохо.

❯ Бог рефакторинга

Пришел ко мне клиент и говорит: Саня, давай позумимся и посмотрим, что-то вебхук отвалился и ничего не принимает.

Ну я такой про себя «опять клиент что-то сломал, бывает», полез туда смотреть. Глядел-глядел, глаз вообще ни за что не цеплялся. Ошибок в sentry не было. Потом нашёл вот такой код:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

На этом моменте я распушил свой хвост и начал рассказывать клиенту, что нельзя вот так декорировать метод, ибо этот декоратор только для функций, да и вообще аргумент self пропущен. Короче, комбо из двух ошибок.

К несчастью, у меня стоит расширение git lens, которое пишет, кто именно написал каждую строчку кода. Я в основном использую это, когда вижу какую-то хрень: если автор кода — чувак из наших, то, скорей всего, это я тупой и что-то не понимаю в задумке автора; в других же случаях это, как правило, обычный плохой код.

И вот я смотрю, а этот код написал... я сам. Вот так я примерно выглядел:

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Самое смешное, что в оригинале клиент написал рабочий код, потом пришёл я всё рефакторить и случайно сломал. Я много раз извинялся перед клиентом. Ух, до сих пор стыдно.

❯ Детектив kesn и тайна ssh

Говорят мне как-то: клиент, с которым мы работали год назад, восстал из мертвых, и теперь ему нужно перенести и обновить проект в AWS. Вон там наш девопс написал какие-то скрипты сто лет назад, возьми их и задеплой.

Я человек простой, мне сказали задеплоить — я и задеплою, хоть на AWS, хоть на тапок.

Запускаю я скрипт, он всё делает, и теперь я хочу зайти на сервер и вручную проверить, что всё работает. И тут всё заверте...

Сначала пробую ssh -i ключ root@ip. Не работает. Потом вспоминаю, что юзер в AWS обычно ec2-user, поэтому пробую ssh -i key ec2-user@ip. Не работает. Может, там авторизация не по ключу? Пробую ssh ec2-user@ip. Не работает. Сделал dig, попробовал подключиться не напрямую, а через load balancer. Согласен, тупая затея.

Пошел в дэшборд AWS смотреть настройки файрволла. Вижу два странных айпишника. Очень странно. Беру первый, проверяю геолокацию по ip. По локации понимаю, что это, кажется, статический ip девопса. Какого хрена? У нас же есть бастион, и все соединения должны проходить через него... Проверяю второй ip из файрволла. О, так это же и есть бастион. Ну отлично, теперь делов-то — добавить всю эту конфигурацию с бастионом в .ssh/config, чтобы в будущем было легко подключиться. Лезу в конфиг, а там уже есть эта конфигурация.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

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

❯ Ошибка платежа

На sentry прилетел отчёт об ошибке, попросили посмотреть. Стал разбираться. Мой код двухгодичной давности.

Логика была простая: есть намерение клиента платить за подписку, и есть прикрепленная карта клиента. Пока намерение активно, мы пытаемся списывать деньги с карты. Это логично: даже если на карте нет денег, то раз клиент хочет пользоваться сервисом, мы будем пытаться списать до тех пор, пока это не получится. Если клиенту не нужна подписка — он отзывает намерение.

Единственное, что я не учел — что клиент может просто всё забросить, ничего не отменяя. И вот на протяжении года наш сельдерей-разнорабочий (celery worker) запускался, пытался списать у клиента деньги, получал отлуп, жаловался в sentry, и засыпал, чтобы назватра всё повторилось, и так каждый день, без конца и края.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

❯ Лёгким движением руки сэкономить кучу денег

Я заметил, что очень часто клиенты могут сэкономить неплохую такую кучу денег, сделав просто какое-то минимальное телодвижение. Вот несколько примеров:

  • Чувак хостил видео на aws s3 и раздавал через амазоновский CDN. Выходило $655 в месяц. Потом нашёл BunnyCDN, я перенастроил приложение (заменил где-то 4 строчки минуты за две), и внезапно с новым CDN в месяц стало уходить только $70. Ну не эпично ли за пару строчек кода?

  • Клиент платил сотни долларов за жирный инстанс Elasticsearch на AWS. Почему — я хз. Потом он заподозрил неладное. Мы замерили реальную нагрузку и перенесли Elastic на одну из самых дешёвых машин в digital ocean, за которую клиент теперь платит $24 в месяц. Профит!

  • У клиента было много файлов на s3, платил он тоже много. Потом перенесли всё на b2, там даже делать почти ничего не надо — у них интерфейс совместим с s3. Получили экономию раза в 4.

❯ От судьбы не уйдёшь

У нас есть шаблон для новых проектов на cookiecutter. Он удобен тем, что если мы что-то меняем в шаблоне, то можем легко обновить проекты клиентов при помощи cruft.

Как-то меня наняли как раз обновить проект. Проект был старый, отстал от нашего шаблона очень прилично, и когда я попытался его обновить, то обнаружил, что изменилось почти всё. Я начал аккуратно разрешать конфликты, и как раз примерно в этот момент штатные сотрудники клиента начали пилить что-то эпичное в своей ветке.

И вот дело подходит к концу, у них куча изменений, у меня столько же. Мы говорим «ну мы всё», они такие «мы тоже вот уже заканчиваем». Начальник мне пишет: «Заливай быстрее в мастер, пока они не залили своё, а то будем потом всю жизнь конфликты разбирать!!!одинодин». Ну я на скорости слил наши обновления в мастер-ветку и мысленно пожелал удачи их разрабам: наша работа сделана, мастер мы обновили, а то, что их разработчики отстали от мастера и у них конфликты — ну штош.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Прошло много месяцев, и угадайте, кого они наняли, чтобы разрешить все конфликты и залить их ветку в мастер?

Ага, меня.

❯ Детектив kesn и поиски пароля

Настраивал я как-то инстанс elasticsearch. Там была отдельная машина, я на ней с помощью docker разворачивал ElasticSearch. Сначала делал всё в ручном режиме, проверял, потом писал скрипт для автоматизации. Для начала просто запустил сервер без всего, потом начал разбираться с авторизацией.

В эластике есть специальный скрипт — elasticsearch-setup-passwords — он настраивает пароли. Ну я его запустил, он мне выдал списки паролей для apm_system, kibana_system, kibana, logstash_system, beats_system, remote_monitoring_user и, собсна, elastic. И хотя мне показалось, что паролей было слишком мало и вообще-то для приличной поисковой системы их должна быть хотя бы сотня, но пароль для elastic был, я его забил в систему автоматизации и пошёл дальше настраивать. Дальше было SSL — не знаю, почему это не встроено (наверно, потому что если не будет https, то и взламывать elastic будет сложнее, а куда без этого!). Ну я пошёл в гугол и говорю: пацаны, сертификаты для эластика привезли? Когда я заикнулся про letsencrypt, они мне сказали, что у нас тут не загнивающий запад и мы сами сертификаты делаем, свои собственные. Короче, прям на официальной странице лежит огроменный docker-compose.yml, в котором вжух-вжух, сертификаты настраиваются, конфиги генерируются. Я его скопировал, применил, всё заработало, и я добавил это в автоматизацию.

Через несколько дней (когда я ужё наполовину всё забыл) мне вдруг понадобилось всё снести и настроить заново (спасибо, digital ocean, за то, что не умеешь даунскейлить диски!). Я запустил скрипт автоматизации, всё развернулось, и тут я вспомнил, что вроде как пароль генерируется сам и его можно узнать, если запустить elasticsearch-setup-passwords. Ну я полез на машину, чтобы запустить эту команду — а она не работает! Сначала был не тот url инстанса, пришлось узнать, что есть опция --url. Окей, теперь не хочет подключаться, т.к. кастомные сертификаты. Как добавить сертификаты? Прописать их в elasticsearch.yml. Читаю доки и там говорится:

All of these settings can be added to the elasticsearch.yml configuration file, ...

ура! так просто!

... with the exception of the secure settings

ffuuuuuuuuu...

which you add to the Elasticsearch keystore. For more information about creating and updating the Elasticsearch keystore, see Secure settings

Ну я полез читать, что за Elasticsearch keystore и зачем он нужен, и даже прочитал про bootstrap password и keystore passphrase. Мне показалось, что ещё чуть-чуть, и я дойду до чтения про большой взрыв и основы зарождения вселенной, а ведь я просто хотел узнать пароль от эластика!

Тут я бросаю взгяд на docker-compose.yml, и вижу, что там везде мелькает $ELASTIC_PASSWORD, и оказывается всё это время пароль был у меня в настройках и я сам его задавал!

Сказочный... эээ... патруль!

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

❯ Как дропнуть продакшен-базу

Клиенты любят нанимать фрилансеров или брать сотрудников в штаты, чтобы они работали над фичами — потому что нанимать нашу компанию достаточно накладно >:)

Ну и вот как-то клиент нанял стороннего разработчика, чтобы он перенёс систему поиска с эластика на postgres full-text search. Он сделал это именно так, как делал я лет 7 назад. Следите за руками:

  • Огромная ветка с кучей коммитов

  • В коммитах смешались изменения в БД и рефакторинг логики нескольких почти не связанных приложений

  • Миграции не откатывались

  • Тестов не было

  • Бэкапов перед деплоем сделано не было (хотя это одна команда)

  • Не было переключателя «новая система / старая система», то есть старую систему просто вынесли нафиг и заменили новой

  • Не было оговорено временное окно для безопасного деплоя

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

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Конечно, сломалось всё. Система начала жёстко тормозить. Клиент написал нам и сказал, что надо срочно всё оживить. Т.к. это была критическая ситуация, то мы с СЕО залетели туда и стали смотреть. В изменениях было очень много всего — это был тотальный рефакторинг, поэтому локализовать проблему, просто глядя на код, не удалось. Так как прод не работал, то у нас не было времени воспроизводить всё на локалхосте и дебажить, и мы решили просто всё откатить.

Я откатил git revision на сервере на рабочий коммит, а СЕО зашёл в админку Digital Ocean и восстановил снэпшот базы данных, назвав его production-db-backup-Mar-24. Всё запустилось. Из-за использования снэпшота мы потеряли немного новых данных, но ничего критичного.

Потом мы сказали: всё, мы всё откатили, вот текущий коммит, вот текущая база, пусть ваш погромист всё дебажит и чинит или живите дальше в проклятом мире, который сами и создали ©

Через много месяцев (да, много историй именно после этого и начинаются) клиент говорит: а чё это за production-backup-Mar-24, давайте её удалим. Как же здорово, что он спросил у нас. Потому что программист клиента на самом деле ничего не починил, а просто свалил в закат, и вся инфра осталась в этом «пофикшенном» состоянии. И база использовалась резервная. Поэтому удалять нужно было сломанную БД с названием production, а рабочей была именно production-backup-Mar-24.

Такие дела.

❯ Детектив kesn и загадочные тормоза

Серьёзно, я уже подумываю написать книгу про похождения детектива kesn'а.

Как-то я отлаживал асинхронный код, он читал бинарные данные с девайса, парсил их и отправлял куда подальше. Конечно, меня позвали, когда этот код начал тупить и кое-как работать, поэтому на входе меня ждала портянка спагетти-кода. Нам не привыкать, и я начал рефакторить и замерять скорость при помощи @funcy.log_durations.

Я кэшировал функции, пропускал ненужные фрагменты данных, уменьшал циклы. Сначала стало быстрее, но потом чем больше я отлаживал, тем медленнее код работал. Может, мой рефакторинг упустил какую-то важную деталь, и поэтому я делаю что-то совсем не то? Я начал логгировать и отлаживать даже самые маленькие функции. В конце концов дошло до того, что я, кажется, всерьёз начал задумываться об оптимизации скорости словарей в питоне (sic!), и в то же время моя версия работала медленнее, чем оригинальный код.

Потом до меня допёрло.

Байки погромиста. Если кто-то скажет, что программирование — это скучно IT, Программирование, Программист, Разработка, Timeweb, Эпично, Факап, Истории из жизни, Python, Длиннопост, Познавательно

Чем больше я добавлял отладочной инфы, тем больше был оверхед. То есть я делал программу быстрее, но отладочная инфа делала программу медленнее.

Ха-ха. Я выключил отладочную инфу, и всё залетало. Ну и дурак!

Если вам понравилась эта статья, то посмотрите вот эту, она тоже весёлая: Погромист. Мои самые эпичные провалы за всю карьеру.

Если вам понравился я лично, как умная и образованная гиена, то вот моя тележка: Блог погромиста

Подпишись на наш блог, чтобы не пропустить новые интересные посты!

Показать полностью 14
[моё] IT Программирование Программист Разработка Timeweb Эпично Факап Истории из жизни Python Длиннопост Познавательно
4
1
AlexSupertrump
AlexSupertrump
2 года назад

Программисты самоучки расскажите о своём пути⁠⁠

Привет Пикабу. Понимаю, что тема заезжена, и в отдельных постах наверняка есть куча разрозненных комментариев с подобными историями, однако очень хотелось бы почитать о вашем становлении в данной профессии.

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

В общем, буду рад почитать о вашем пути.

IT Интернет Программирование Python Javascript Программист Истории из жизни Профессия Текст
9
191
AkexNepohozh
3 года назад
Программирование на python

Дневник "юного" программиста. Часть вторая - конечная⁠⁠

Привет Пикабу!
Давным давно, ещё до войны, решил я выучится на программиста. Взял курс по акции на полгода, а для пущей мотивации написал пост на Пикабу, чтоб, значицца, перед людьми было стыдно, если сольюсь. Хотел вести онлайн дневник обучения в телеграмме и сюда периодически постить выжимки оттуда.
В начале дело пошло бодро, урок щелкался за уроком, писались почты в телеге о моих "открытиях" в программировании. Потом я стал замечать, что постить особо нечего, не урок же пересказывать. Да и задания стали отнимать больше времени. В итоге я столкнулся с выбором - почитать/посмотреть что-то о программировании или сидеть - выдумывать, что бы такого написать в телегу.
Короче, дневник в итоге был заброшен, но занятия продолжались.
Зимой, уже освоив базу Питона, стал смотреть вакансии на джунов и стажёров. В одной крупной конторе был на стажёров, уже не помню точное направление, то ли аналитик данных, то ли дата сайенс. Записался туда.
Через месяц оттуда позвонила девушка, и провела опрос на знание языка и английский. Собес на английском я запорол, и понял, что его тоже нужно будет учить.
К весне 2021 года основные уроки были пройдены, осталось подготовить практику и дипломку. Вот тут и начались траблы. Если для практики нужно было написать VK бота, и с ним я более-менее справился, то для диплома нужно было написать модель поведения самолётиков в игрушке.
Первые несколько этапов прошло нормально, а потом я подзавис на пару месяцев. К лету я понял, что надо либо плотно разбираться в данной библиотеке игрушки и добивать проект, либо заняться чем то полезным для будущей работы. Я выбрал второе.
Прошерстив хх.ру на вакансии, решил заняться изучением Django и английским. Про джангу смотрел видосики, а для английского нанял репетитора. Так прошло лето.
К осени, я понял, что по видосикам не сильно-то чему и научился, т.к. теория без практики быстро выветривается и решил снова искать вакансии джунов, пока хоть что-то помню. В октябре мне повезло - на мой отклик позвонила hr из компании, которая делает телефонных роботов. Мы часок поговорили, рассказал ей как учился, где работал и т.д. Она пригласила меня на тех.собес с тимлидом команды. На следующий день поговорил уже с ним. Тот погонял меня по питону, давал задачки на логику и знания языка. Что-то я ответил норм, что-то запорол, и думал уже что всё, пролетел. Но вечером того же дня (пятница) мне позвонила hr и сказала, что к понедельнику будет готов оффер, и спросила, когда я смогу выйти. Я чуть не описался от счастья.
Итак, через две недели начались мои программистские будни. Первое время голова конечно пухла, но радости моей не было конца. 3 месяца я был на испытательном сроке, нужно было сдать несколько тестов на знание библиотеки и платформы компании, разобраться в куче новых вещей, но тут я действительно понял, что это моё. Не было ни дня, чтобы я пожалел о смене профессии. Даже если случается аврал или овертайм, работа не вызывает раздражения. Даже не смотря на падение в уровне ЗП. Уже 8 месяцев я работаю и мне нравится.
Так что всем ребятам, которые только встали на этот путь, хочу сказать: если вам действительно нравится цифровая индустрия, если сидение за компьютером не вызывает у вас отторжения, если вам нравится автоматизировать рутину, то не останавливайтесь, учитесь, практикуйтесь, ищите работу, рано и поздно что-то найдется вам по силам, а дальше втянетесь и все будет хорошо. Удачи!

Показать полностью
[моё] IT Python Истории из жизни Программирование Текст
44
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии