Успокой мой пьяный разум многоликая река. Пусть отныне вдохновляют лишь камни да вода.
Здравствуй, дорогой дневник.
Есть у нас на работе, человек с фамилией Гарин. Обожаю в отчетах или в именах файлов воткнуть "2garin" и улыбаться тихо про себя.
А еще - есть таблица с предметами. Есть вторая, с указанием, какой предмет, на какую паллету положили. Есть даже третья, с паллетами, где можно посмотреть, активна паллета или её вернули и помнить о ней не стоит.
Это не я так сделал, это вот так оно есть.
А еще есть задача.
Задача проста и описывается простым вопросом. Сколько предметов зоне производства, и не на активной паллете?
Коза-лось-бы, вопрос простой. Решение - тоже.
Импортируем в datafram`ы все три таблички, мержим/джойним и фильтруем. Задачка на несколько строк.
Да? Да. Но, "НО", разумеется есть.
Это "НО" - количество таких штук. Их почти 300 тысяч и прибавляется ежеминутно. Проверка всех-всех штук занимает более 20 минут.
Как временное решение - оно тихонечко себе считается во временную таблицу, а потом временная таблица заменяется свеженькой, пауза в 2 часа и по новой.
Работает, не поспоришь, но лаг почти в два с половиной часа делает некрасиво.
А тут новости. Оказывается, когда одном сервере, и скрипты, и база данных - мол моветон. Теперь у нас будет новый сервер, с хранилищем и вообще.
С одной стороны - красота. На сервере, который "мой" аж две разные базы. Postgres и MSSql (для связи с 1С) и настраивал я обе, очень сильно на ощупь, оно работает, но как именно работает - я вообще хз, если честно. А тут - ответственный не я. Красота же.
С другой - теперь будет только одна база и она будет MSSql. Жопка, потому что там дебильный синтаксис. Знаешь как будет ограничение на 10 строк? LIMIT 10? Нет, "SELECT TOP 10 * FROM TABLE ORDER BY id". Почему? Ну вот потому что.
И теперь задача становится интереснее. Нужно переписать свои скрипты, чтобы они работали на microsoft SQL.
Короч, всю субботу я провел за тем, чтобы не делать вот то, а делать иначе. Наверняка ведь можно как-то ускорить это всё. Да? Да. У меня было несколько вариантов как это всё делать, с разными успехами. Думал уже делать скрипт, который не создает временную таблицу, а просто проверяет, где ролик и меняет данные в основной таблице, только у тех роликов, которые изменили своё состояние.
И вот прикинул я это, как это вообще писать и сколько времени займет... Решил пойти другим путем, а именно - без временных таблиц. Просто одном запросом к базе.
Оказалось, что тормозит весь этот процесс именно рекурсия. Для каждого ролика, список паллет, для каждой из паллеты проверка активности.
О-коза-лось, что вообще-то в Postgres можно сохранять результаты в переменную, прямо в самом запросе.
Теперь не нужно проверять каждую паллету, если сначала выбрать все активные паллеты в список, а потом проверять паллету в списке.
Оказалось лучше, но всё еще не так хорошо, как хотелось бы.
Совсем хорошо тало, когда я пошел с другой стороны.
1. Взять список всех активных паллет и джойним штуки только на активных паллетах. Сохраняем в временную табличку. Получаем список штук на паллетах.
2. Берем только штуки, которые нужно положить на паллету и сохраняем во временную таблицу. Получаем список штук, который на паллетах должны быть.
3. Джойним одно к другому и фильтруем штуки, которым паллеты не нашлось.
Сколько это делалось раньше? 20 минут. Сколько сейчас? 0,8 секунды.
Мама, чтож я такой тупой?
Есть у нас на работе, человек с фамилией Гарин. Обожаю в отчетах или в именах файлов воткнуть "2garin" и улыбаться тихо про себя.
А еще - есть таблица с предметами. Есть вторая, с указанием, какой предмет, на какую паллету положили. Есть даже третья, с паллетами, где можно посмотреть, активна паллета или её вернули и помнить о ней не стоит.
Это не я так сделал, это вот так оно есть.
А еще есть задача.
Задача проста и описывается простым вопросом. Сколько предметов зоне производства, и не на активной паллете?
Коза-лось-бы, вопрос простой. Решение - тоже.
Импортируем в datafram`ы все три таблички, мержим/джойним и фильтруем. Задачка на несколько строк.
Да? Да. Но, "НО", разумеется есть.
Это "НО" - количество таких штук. Их почти 300 тысяч и прибавляется ежеминутно. Проверка всех-всех штук занимает более 20 минут.
Как временное решение - оно тихонечко себе считается во временную таблицу, а потом временная таблица заменяется свеженькой, пауза в 2 часа и по новой.
Работает, не поспоришь, но лаг почти в два с половиной часа делает некрасиво.
А тут новости. Оказывается, когда одном сервере, и скрипты, и база данных - мол моветон. Теперь у нас будет новый сервер, с хранилищем и вообще.
С одной стороны - красота. На сервере, который "мой" аж две разные базы. Postgres и MSSql (для связи с 1С) и настраивал я обе, очень сильно на ощупь, оно работает, но как именно работает - я вообще хз, если честно. А тут - ответственный не я. Красота же.
С другой - теперь будет только одна база и она будет MSSql. Жопка, потому что там дебильный синтаксис. Знаешь как будет ограничение на 10 строк? LIMIT 10? Нет, "SELECT TOP 10 * FROM TABLE ORDER BY id". Почему? Ну вот потому что.
И теперь задача становится интереснее. Нужно переписать свои скрипты, чтобы они работали на microsoft SQL.
Короч, всю субботу я провел за тем, чтобы не делать вот то, а делать иначе. Наверняка ведь можно как-то ускорить это всё. Да? Да. У меня было несколько вариантов как это всё делать, с разными успехами. Думал уже делать скрипт, который не создает временную таблицу, а просто проверяет, где ролик и меняет данные в основной таблице, только у тех роликов, которые изменили своё состояние.
И вот прикинул я это, как это вообще писать и сколько времени займет... Решил пойти другим путем, а именно - без временных таблиц. Просто одном запросом к базе.
Оказалось, что тормозит весь этот процесс именно рекурсия. Для каждого ролика, список паллет, для каждой из паллеты проверка активности.
О-коза-лось, что вообще-то в Postgres можно сохранять результаты в переменную, прямо в самом запросе.
Теперь не нужно проверять каждую паллету, если сначала выбрать все активные паллеты в список, а потом проверять паллету в списке.
Оказалось лучше, но всё еще не так хорошо, как хотелось бы.
Совсем хорошо тало, когда я пошел с другой стороны.
1. Взять список всех активных паллет и джойним штуки только на активных паллетах. Сохраняем в временную табличку. Получаем список штук на паллетах.
2. Берем только штуки, которые нужно положить на паллету и сохраняем во временную таблицу. Получаем список штук, который на паллетах должны быть.
3. Джойним одно к другому и фильтруем штуки, которым паллеты не нашлось.
Сколько это делалось раньше? 20 минут. Сколько сейчас? 0,8 секунды.
Мама, чтож я такой тупой?
1) можешь поучаствовать в проектах от госуслуг
Отслеживать активности через почту уведомления госуслуги
В этом году недавно вот такое было lk.leaders2023.innoagency.ru/todo
2) если ты верстку знаешь и хочешь, есть бесплатный сайт, где ты ведешь свои проекты / коды для анимации, например, там даже награждают лучших
codepen.io/
У нас в видео-конференции был пример девушки, которая написала код чисто на css анимацию алхимика/ученого, победитель от кодепин
3) если фриланс не хочешь, бывают под проекты на атсорсинг ищут людей для проектов (приложений например, или для других задач, но это чисто через hh мониторить по вакансиям с «проектная работа»).
Мне сейчас нравится идея Яндекс, у них есть в свободном доступе тренажеры задачи для проверки себя , до отправки им отклика hh
Тестовое задание в системе Яндекс.Контест
Вам предстоит решить пять задач за 5 часов. Перед тем, как начать, рекомендуем пройти тренировочный контест — в нём собраны тестовые задания прошлых лет. Решать задачи можно на множестве языков — Python, C++, Java, Go, PHP, C#, Kotlin, Scala, Node.js. Все решения проверяются автоматически.
Если ваше решение не проходит проверку, попробуйте учесть возможные краевые случаи, написать стресс-тесты или просто более тщательно проанализировать возможные ошибки. И главное — помните: необязательно выполнить все пять задач, чтобы пройти на следующий этап. Начните с малого, а мы оценим ваши знания и навыки.
Что вам поможет подготовиться:
codeforces.com/blog/entry/75464
leetcode.com
Возможно, это не совсем то, что ты искал, но это вроде все равно любопытно
Можно попробовать вписаться в проект к людям, которые пишут программы и для хобби, но это на форумы надо идти, наверное, get over flow(если правильно помню, я там смотрю порой вопросы по коду)/ git