• Как ускорить импорт из csv в бд?

    neatsoft
    @neatsoft
    vikholodov, Несколько продуктов с одинаковым ключом в исходном списке?
    Либо фильтровать (используя в качестве фильтра не только строки из базы, но и из списка - если есть несколько продуктов с одинаковым айдишником, добавляться должен только один из них), либо заменить create на update_or_create / get_or_create.
  • Как ускорить импорт из csv в бд?

    neatsoft
    @neatsoft
    vikholodov,
    Метод add добавляет строку в таблицу, хранящую m2m связи. К этой таблице можно обращаться с помощью through. Например, если есть модель Category и модель Product с m2m полем categories, то к эта таблица будет доступна через Product.categories.through. Но нужно учитывать, что на момент добавления строк в m2m таблицу должны быть известны и category_id, и product_id.

    При использовании второго варианта ускорения (оборачивание в транзакцию) ничего дополнительно предпринимать не нужно, можно применять и add, и пример из моего ответа.

    Если используется Django >1.10 и PostgreSQL, можно задействовать и первое решение, т.к. bulk_update в такой конфигурации возвращает список айдишников созданных объектов. Нужно просто сохранять в отдельном списке категории, в которые должен оказаться включен каждый из продуктов, и ещё одним вызовом bulk_create создавать строки в таблице с m2m связями:
    product_category_ids = []
    
    # create products
    products = []
    
    for item in items:
        product = Product(
            price=item[0],
            shipping=item[1],
        )
        products.append(product)
        category_ids = ... # get category ids from the input data
        product_category_ids.append(category_ids)
    
    product_ids = Product.objects.bulk_create(products)
    
    # create m2m relations between products and categories
    product_categories = []
    
    for product_id, category_ids in zip(product_ids, product_category_ids):
        for category_id in category_ids:
            product_category = Product.categories.through(
                product_id=product_id,
                category_id=category_id,
            )
            product_categories.append(product_category)
    
    Product.categories.through.objects.bulk_create(product_categories)
  • Как ускорить импорт из csv в бд?

    neatsoft
    @neatsoft
    items = (i for i in items if i) можно поместить в сам grouper:

    def grouper(iterable, n):
        args = [iter(iterable)] * n
        groups = itertools.zip_longest(*args, fillvalue=None)
        for group in groups:
            yield (item for item in group if item)
  • Как изменять имя файла при загрузки в Django?

    neatsoft
    @neatsoft
    Посмотрел как storage реализован в hashedfilenamestorage. В собственной реализации лучше не get_available_name переопределять, а save, и если файл существует, то просто скипать стадию сохранения.

    Если не заменять стандартный storage, то при повторной записи файла с идентичным содержимым джанга добавит к имени файла последовательность случайных символов.
  • Как изменять имя файла при загрузки в Django?

    neatsoft
    @neatsoft
    Сергей Горностаев, проверил, всё должно быть ок:
    >>> import os
    >>> os.path.splitext('file.ext')[1].lower()
    '.ext'
    >>> os.path.splitext('file')[1].lower()
    ''


    Это с обычным split может быть такая проблема:
    >>> filename, ext = 'file.ext'.split('.')
    >>> print(filename, ext)
    file ext
    >>> filename, ext = 'file'.split('.')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: not enough values to unpack (expected 2, got 1)
    >>> filename, ext = 'file.ext.ext'.split('.')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: too many values to unpack (expected 2)
  • Как изменять имя файла при загрузки в Django?

    neatsoft
    @neatsoft
    Совет по поводу этой строки:
    _, ext = path.splitext(name)

    Underscore в Django традиционно используется для gettext или gettext_lazy, поэтому для ненужных аргументов лучше использовать что-нибудь другое, например, двойное подчёркивание (__).

    А в данном случае проще написать так:
    ext = os.path.splitext(filename)[1].lower()
  • Как использовать Django аутентификацию с Amazon Gateway API?

    neatsoft
    @neatsoft
    Alexander,
    1. Login: сервер аутентификации проверяет имя пользователя / пароль, и возвращает refresh token, содержащий id пользователя. Refresh token криптографически подписывается с помощью закрытого ключа, хранящегося на сервере аутентификации.
    2. Получение токена для доступа к данным: сервер авторизации проверяет refresh token с помощью открытого ключа, и возвращает access token, содержащий права доступа. Access token криптографически подписывается с помощью закрытого ключа, хранящегося на сервере авторизации.
    3. Проверка токена: amazon api gateway запускает lambda функцию, которая проверяет access token с помощью открытого ключа, и сопоставляет его с параметрами запроса. Результат возвращает в api gateway.
    4. Доступ к данным: если проверка пройдена успешно, api gateway обращается к соответствующему микросервису. Если нет, возвращает ошибку.

    Для каждого из токенов устанавливается предельный срок жизни, у access token он, как правило, небольшой. Новый access token можно получить с помощью refresh token, не проводя повторную проверку имени пользователя и пароля.

    OAuth2%20flow_1.pngdiag_refresh_token.png
  • Выбор монитора для программиста, как правильно?

    neatsoft
    @neatsoft
    alex-1917, 27" FHD и 27" UHD - это совершенно разные вещи. Чтобы это понять, нужно попробовать.

    У меня в режиме написания кода обычно открыто 11 окон на 3-х мониторах (4 + 3 + 4) - работать очень комфортно: вся необходимая информация постоянно перед глазами, нет необходимости использовать Alt+Tab. В любом из окон при желании можно увеличить масштаб - сделать 125%, 150%. Любое из окон при необходимости можно временно отправить в полноэкранный режим.

    Исходники в 80 столбцов - это около 750px, 1/5 от 3840. Поэтому даже с масштабированием редактору вполне достаточно половины экрана.

    Многие разработчики используют ноутбуки. Типичная диагональ - 13.3-15.6", типичное разрешение - 1920x1080. 27" UHD монитор - это четыре ноутбучных FHD экрана, соединённых вместе. В четыре раза больше места, вчетверо больше деталей. Это совершенно другой уровень удобства.
  • Как правильно сидеть?

    neatsoft
    @neatsoft
    Прикольная идея! Надо попробовать.
  • Как правильно сидеть?

    neatsoft
    @neatsoft
    alex-1917 Да, суммарное разрешение - 11520 x 2160. Такое рабочее пространство вмещает 12 окон размера FullHD, и позволяет полностью избавиться от Alt+Tab. Идеальный вариант для эффективной работы.
    5a0878766d3cc602710739.png
  • Есть идеи, как реализовать создание/хранение приходной/расходной накладной на Django?

    neatsoft
    @neatsoft
    Olexandr Shovkoviy, чтобы ускорить создание/открытие документов, выбор товара нужно реализовать в модальном окне, и постараться избавиться от загрузки всего списка - отображать только товары из выбранной категории.
    Тип цен - отдельная модель (таблица в БД), значения цен - ещё одна модель.
    Сумму нужно вычислять на основании цены, количества, и размера скидки. Администраторам должно быть доступно ручное редактирование суммы. В этом случае автоматически должен вычисляться размер скидки (или цена).
  • Как правильно сидеть?

    neatsoft
    @neatsoft
    Adamos, A4tech KV-300H - моя предыдущая клавиатура. Прослужила верой и правдой больше 5 лет, сейчас продолжает работать в соседней комнате. Раньше и она казалась довольно удобной, но всё познаётся в сравнении.

    Механическая клавиатура позволяет не нажимать клавиши до упора, т.к. они имеют довольно длинный ход, а срабатывание происходит в верхней трети. Теперь при попытке понабирать текст на A4tech KV-300H у меня в кистях рук отчетливо ощущается зуд - для достижения клика требуется прилагать некоторое усилие, после чего пальцы довольно неприятно упираются в твёрдую поверхность. Corsair K70 реально намного удобнее.
    Шум от механической клавиатуры напрягает только окружающих, для того кто на ней работает он не заметен. Примерно как езда на машине по плохой дороге: на пассажирском сидении кочки и выбоины изматывают, а на водительском не особо ощущаются.

    Любовь маркетологов по поводу и без добавлять Gaming к названиям продуктов меня тоже немного напрягает (моей последней игрой был Quake III в год своего появления). Но это то, с чем приходится мириться. Corsair K70 выглядит довольно строго (это был один из факторов при выборе), а материнская плата Asrock Fatal1ty Z270 Gaming ITX/ac (единственная плата на Z270 в форм-факторе ITX к которой можно подключить три 4K монитора без дискретной видеокарты и nvme накопитель) находится внутри системника, и её не видно.

    12 штук - это $200, 4 часа работы на фриланс бирже. Не такие большие деньги для рабочего инструмента.
  • Как правильно сидеть?

    neatsoft
    @neatsoft
    Adamos, оставлю, пожалуй, ещё пару ссылок, относящихся к эргономике:
    Клавиатура Corsair K70 LUX RGB - удобная и приятная, реально повышает производительность, но подходит только тем, у кого есть отдельный кабинет (довольно шумная, как и любая другая механика).
    Мышка Logitech MX Master - большая, отлично лежит в руке. Долгое время избегал продукцию Logitech из-за негативного опыта в прошлом и из-за довольно странного дизайна их новых продуктов. По этой мышке много отрицательных отзывов в интернете, но в связи с отсутствием вменяемых альтернатив рискнул, и не прогадал. Активно пользуюсь восемь месяцев - колесо работает исправно, кнопки удобные, лагов нет, заряжается быстро, заряда хватает надолго.
  • Как правильно сидеть?

    neatsoft
    @neatsoft
    Adamos, смешно... не очень. Ссылки на то, чем пользуюсь сам. Если их убрать, смысл не изменится, но текст станет менее информативным. Это не рефералки, никакой выгоды от их размещения у меня нет.
    Периодически захожу на тостер почесать языком и безвозмездно поделиться опытом, но если к хамскому отношению со стороны авторов вопросов (которые зачастую забывают отмечать правильные ответы решением) добавится ещё и хамство в комментах, придётся окончательно переехать на англоязычный аналог.
  • Как спроектировать веб-интерфейс управления процессами?

    neatsoft
    @neatsoft
    Василий Теркин, вполне. Но бесконечные задачи - это чаще всего ошибка в архитектуре приложения.
  • Каковы максимальные рейты на Toptal?

    neatsoft
    @neatsoft
    Dmitry Pavlov,
    Toptal не диктует ставок, предполагая, что опытный фрилансер знает свою, адекватную рынку ставку

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

    С заказчиков Toptal берёт процентов на 30 больше рынка, обеспечивая при этом интервьюирование, отбор, и контроль исполнителей. Для многих нанимателей это не только удобно, но и выгодно (т.к. позволяет экономить время штатных сотрудников). Разработчикам Toptal платит 30% от выручки - это стандартная ставка во всех агентствах. Итоговая формула - tt_rate = fl_rate * 1.3 * 0.3 = fl_rate * 39%.

    Для экономии времени приведу табличку:
    (слева актуальный рейт на фриланс биржах, справа примерная ставка на Toptal)
    40 - 16
    50 - 20
    65 - 25
    75 - 29
    90 - 35

    Разработчики с более низкими и с более высокими ставками Toptal, скорее всего, не интересуют (т.к. являются underqualified/overqualified для подобной работы), и отсеиваются во время интервью.

    Манипулирование "средней температурой по больнице" некорректно, т.к. "разработчики" с подобным рейтом на биржах ($21/h) зачастую переменную от цикла не в состоянии отличить, не говоря уже о толпах "фрилансеров" готовых работать за $10/h, которые на эту среднюю ставку существенно влияют. У вас требования к соискателям вполне конкретные и довольно серьёзные, соответствующие фрилансерам $40/h+.

    Размер вознаграждения во фрилансе от страны проживания никак не зависит - это глобальный рынок. Разница в доходах может быть обусловлена исключительно квалификацией, коммуникативными навыками, и уровнем владения английским языком.
  • Каковы максимальные рейты на Toptal?

    neatsoft
    @neatsoft
    Агентство с автоматизированным привлечением заказчиков, автоматизированным наймом исполнителей, и автоматизированным управлением - это биржа. На бирже заказчик сам находит исполнителя, исполнитель сам договаривается об условиях сделки, взаимодействие в пределах майлстоунов ведется под честное слово, а арбитраж и поддержка номинальны.

    Какую часть выручки получает на руки парикмахер в вашем любимом барбершопе? Сколько имеет 1С-ник в ближайшем франчайзи? Правильно, те же самые 10-30 процентов. 10% - стажер, на которого постоянно приходится тратить время более опытным коллегам, 30% - самостоятельный работник. Это может казаться несправедливым, но лишь до тех пор, пока вы сами не попробуете создать подобный бизнес. Особо опытным и особо самостоятельным работникам можно платить больше - и 40, и 50 процентов, но это не имеет смысла, т.к. такого работника нужно незамедлительно увольнять - рано или поздно он уйдёт и уведет с собой ключевых клиентов.

    Toptal - это работа по договорам гражданско-правового характера, Upwork и Freelancer - это предпринимательская деятельность. Это совершенно разные типы сотрудничества. И если в условиях реальной жизни и высококонкурентного рынка стать предпринимателем не так просто, то в интернете для full-stack разработчика - проще простого.

    В разные периоды жизни я успел изучить этот рынок с разных сторон - и в качестве заказчика, и в роли учредителя агентства, и как разработчик. Моё мнение - сотрудничество с агентством может иметь смысл для дизайнера иконок или верстальщика, но опытному full-stack разработчику с рейтом 35, 50, или 70 баксов, Toptal нафиг не нужен. Работайте над своей репутацией, формируйте клиентскую базу, заводите дружеские отношения с клиентами, избегайте бессмысленных посредников - развивайтесь.

    Для заказчиков работа с посредниками зачастую удобнее - платя несколько больше они избавляют себя от необходимости интервьюировать кандидатов, забот о заблаговременном привлечении достаточного количества специалистов, и т.д. Но рынок сейчас определяют не заказчики, а исполнители: клиентов много, а высококлассных разработчиков - единицы.
  • Как синхронизировать базу и миграции Django?

    neatsoft
    @neatsoft
    Дмитрий, в сообщении об ошибке всё чёрным по белому написано - файл 0011_auto_20170621_1334 был удалён или переименован.
    Исправить ситуацию можно следующим образом:
    - выгрузить данные с помощью dumpdata
    - удалить имеющиеся файлы миграций
    - создать новые файлы миграций с помощью ./manage.py makemigrations
    - создать новую базу данных
    - применить миграции - ./manage.py migrate
    - загрузить данные с помощью loaddata
  • Каковы максимальные рейты на Toptal?

    neatsoft
    @neatsoft
    Дмитрий Евграфович, двадцати пяти процентная торговая наценка - это точно такое же, ничем не обоснованное число, но рынок выдавливает всех кто пытается сильно от него отступать.

    Соотношение 1/3 - 1/10 сформировалось давно, еще до появления бирж, в те времена, когда как грибы после дождя стали появляться аутсорсинговые компании. В такого рода конторах довольно много накладных расходов: кто-то должен обсуждать проект и договариваться с заказчиком, кто-то всё то же самое проделывать с исполнителем, кто-то интервьюировать новых работников, кто-то находить и заинтересовывать клиентов, кто-то закрывать косяки. Всё это съедает человеко-часы, и, следовательно, деньги. Топтал от таких аутсорсинговых компаний принципиально отличается только отсутствием офиса. Главная цель - подешевле купить, подороже продать (при сохранении условленного уровня качества услуг). Так работают все агентства.

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

    Можно зарегистрироваться на Топтале в качестве заказчика и в качестве исполнителя, сравнить ставки, но зачем? Ничего нового мы там не увидим. Возможно это будет 80, возможно 70 или даже 65. Но значительно ниже комиссия быть не может, так как не позволит компании выживать (учитывая что они ведут конфиденциальные переговоры с каждой их сторон по отдельности, осуществляют интервьюирование и тестирование соискателей, и т.д.).

    Толку от таких агентств, на самом деле, не больше чем от риэлторов. Но кому-то, наверное, так больше нравится...

    Я озвучил "пессимистичную" точку зрения. Через какое-то время здесь появится Dmitry Pavlov, озвучит оптимистичную, и у читателей будет из чего выбрать.
  • Каковы максимальные рейты на Toptal?

    neatsoft
    @neatsoft
    teke teke, долгое время freelancer.com был гораздо круче апворка - за $50 в месяц можно было купить аккаунт со сниженной комиссией (5%/0%), не было глупых требований (типа реальной фотографии в профиле), статус preferred freelancer позволял вообще не заниматься поиском клиентов - достаточно было в настройках установить доступность для новых заказов, и сразу начинали сыпаться "вкусные" предложения (недоступные на основном сайте). Как сейчас - не знаю. Последний год работаю фултайм с одним заказчиком через апворк, до этого пол-года работал фултайм с другим заказчиком через фрилансер, т.е. уже более полутора лет поиском клиентов не занимался.
    Роль биржи - сбор статистики и финансовые гарантии (посредством майлстоунов), жаль что они в последнее время все больше и больше ненужной функциональностью начинают обрастать, повышая при этом тарифы.