@Tishka17
Tishka17

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

Tishka17

Поехал в сервис поменять колеса. Взял номерок "60", сейчас принимают 31. Посидел час, 38... Ну, думаю, съезжу поем. Поел, потупил. Прошло чуть больше часа. Смотрю на табло - 67. Ну думаю, окей, сейчас заеду. Подхожу к мастеру, а он такой 'идите новый талон берите". Суки, теперь я 82 и ждать ещё хз сколько.

Tishka17

Я начал понимать почему у нас даже не пытаются в проекте следовать принципу Single Responsibility. У нас вся компания такая.

Например, есть утилита ya. Она умеет заливать код на пасту, создавать PR, компилировать проекты, аплоадить артефакты сборки, запускать IDE, тащить конфиги Вима и хз что ещё. А ещё монорепа, о которой все слышали.

God object - это концепция компании. Зачем делить вещи по функциональому признаку? Мы просто сделаем вещь, которая умеет всё. А если что-то не будет уметь, сделаем ещё одну, умеющую то же, что первая, но ещё и своё

Tishka17

Как-то так

Tishka17

Пришло время.

Tishka17

Какой мудак придумал, что нельзя разрешать человеку поиграть в купленную игру, пока он не скачает обновления? Да я бы через час их без проблем запустил, а сейчас я хочу поиграть!!! В итоге полчаса ожидания, пока эта тормозная штука скачает свой гиг обновлений и поставит их на мой старенький ноут. Что ж поиграю поменьше

Tishka17

Через очередь нашему сервису прилетают апдейты.
Он читает их и удаляет. Через 30 секунд попыток чтения переходит к следующему шагу
Он берет и кладёт их в новую "статическую" таблицу (в местное хранилище), сортирует и мерджит с существующей. Это занимает около минуты для добавления 10 записей к существующим 100
Он снова читает эту таблицу и проверяет статус в БД. После чего отправляет результат в другую очередь. Это занимает 5 секунд.
Он удаляет из таблицы обработанные записи с учётом особенностей хранилища. Ещё где-то за 40 секунд.
Сервис перезапускается

Вопрос: какого хрена надо так писать?
Вопрос 2: нарушения pep8, побочные эффекты функций вместе с возвращаемым значением, проверка истинности через is True и прочие чудеса в коде тоже присутствуют

Tishka17

Какой-то идиот задеплоил все инстансы сервиса в один ДЦ

Tishka17

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

Чтобы сделать юнит тесты для проги на питоне надо
Вынести все сорцы (кроме скрипта запуск) в отдельную либу со своим сборочным файлом
Сделать в отдельной папке сборочный файл для проги, где указать либу как зависимость
* В отдельной папке сделать сборочный файл с тестами, где указать либу как завивисмость и перечислить все тесты

Чтобы прогнать тесты на втором и третьем питоне надо
Вынести все тесты в либу
В отдельной папке сделать сборочный файл для второго питона, где либа будет как завивисмость
* В отдельной папке сделать сборочный файл для третьего питона, где та же либа будет как завивисмость

Tishka17

У нас есть очень стандартный процесс связи нескольких сервисов:

  1. Сервис А кладёт данные в таблицу БД (у нас своя бд с таблицами по папочкам)
  2. Сервис Б раз в 15 минут ищет новую таблицу и читает из нее данные и что-то делает с ними
  3. Сервис А раз в 15 минут смотрит в другую папку на предмет появления таблицы с результатами

В результате у нас задержка получается полчаса за нефиг делать.

Это вообще нормально?

Tishka17

Монорепа блин. Своя система контроля версий, которая мердж не умеет. Питон, который компилируется. Тесты, которая нельзя класть рядом с сорцами, а надо обязательно выносить в отдельную папку. Пакеты, которые именуются относительно корня монорепы, а не корня проекта. Единственный исполняемый файл на проект. Использование gunicorn как библиотеки, вместо того, чтобы им просто запустить проект

Как же бесит это всё!

Tishka17

Выложил очередную версию либы (2.2).

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

Заодно починил аннотации типов. А то даже стыдно было, во всю их использую, а интерфейс не аннотирован.

https://github.com/Tishka17/dataclass_factory

Tishka17

Народ а кто может вот прям реально в двух словах сказать что из этого что и как они связаны между собой в tensor flow?

  1. Граф
  2. Схема
  3. Тензор
  4. Операция
  5. Инпуты и аутпуты
Tishka17

Моя либа теперь, кажется, единственная, которая умеет парсить generic-датаклассы. Заодно пофиксил парсинг циклических структур.

В общем, версия 2.1.

https://github.com/Tishka17/dataclass_factory

Tishka17

Хочу представить вторую версию своей либы:

  • Я полностью переделал API, теперь можно парсить просто вызывав load(data, class).
  • Фабрика теперь одна (было две). Один раз настроил и парси/сериализуй одинаково (dump/load)
  • Для всяких сложных тем появились схемы. Как и раньше все автоматическое, но если нужно можно исключать поля, делать свои маппинг, менять поведение для каждого класса
  • Расширил набор стилей имен, в которые можно сделать автоматическое конвертирование (всякие Ugly_Style или UPPERCASE)
  • Внезапно выяснил, что marshmallow может быть в 10 раз медленнее. 

https://github.com/Tishka17/dataclass_factory

Tishka17

Если кому интересно, я тут новую версию 1.1.0 своей либы для питоновских датаклассов выложил. Теперь она умеет имена в разные стили (например, CamelCase) преобразовать и сама сериализует (аж до 10 раз быстрее чем стандартный asdict).

https://github.com/Tishka17/dataclass_factory

Tishka17

Как упросить жену связать носочки для хомяка?

Tishka17

1 января 2020 года заканчивается поддержка python 2.7 и всей второй ветки.

«Газпром» начал официально уведомлять страны о том, что транспортировка газа через территорию Украины будет прекращена 1 января 2020 года.

Совпадение? Не думаю

Tishka17

Я тут чтото вспомнил. Почему-то люди противопоставляют функциональное и юнит-тестирование.
Так вот это не противоположности, а перпендикулярные оси. Делить тесты можно по разным признакам: функциональное vs тестирование производительности, юнит vs интеграционное.

И ещё: при юнит тестах не обязательно тестировать каждый метод класса. Юнитом вполне может считаться отдельный класс. Например, очевидно что геттер и сеттер одного поля нельзя проверить независимо не влезая во внутреннюю структуру объекта или не имея альтернативного сеттера (например параметра конструктора)

Tishka17

Раз микрософт выложил свой калькулятор, мне тоже надо.
Знакомьтесь, прога для расчета всяких фрактальных штук по картинке. Из побочного функционала - свой язык скриптов с if и goto

https://github.com/Tishka17/course-work

На всякий случай, предупрежу, что код 2005-2007 годов

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.