Обновить
1
0

Backend

Отправить сообщение

Время пришло

Так, порой, кажется, будто урон, получаемый игроком и противниками вообще рандомный

Это из-за динамического уровня сложности. Если чаще перезагружаться, игра понимает, что тяжело и понижает уровень сложности. И наоборот - слишком легко и быстро проходишь - на тебе посложнее.

Мне нравятся миграции с default полем, который default только в коде, база об этом дефолте знает только на время выполнения миграции, т.к. в миграции всегда делается DROP DEFAULT;

Это очень "приятно" узнавать, когда джанго в кубе на нескольких инстансах и при добавлении NOT NULL DEFAULT 0 поля и выкатке на первый все ок, а второй начинает падать на INSERT операциях)

Может, кому пригодится: Запуская Django в кубе с несколькими репликами помните, что миграции придется делать с поддержкой старого кода. Т.е. нельзя будет просто добавить NOT NULL поле, даже если вы укажете default=<value>, т.к. django делает миграции вида

ALTER TABLE mytable 
ADD COLUMN mycolumn character varying(50) NOT NULL DEFAULT <value>;
ALTER TABLE ONLY mytable ALTER COLUMN mycolumn DROP DEFAULT; 

И по итогу когда вы раскатите вначале на одну реплику код с такой миграцией, то другие реплики начнут падать.

Поэтому лучшим способом здесь будет вначале добавлять nullable поле, задеплоить, затем сделать еще одну миграцию, где убрать это nullable.

Проработал в яндексе год. Был джуном из региона, заманили в «Маскву».
Подумал, что будет очень хорошо подкачать скилы, посмотреть, как делается продукт у больших компаний.
По условиям мне все понравилось.
Поработал год, прокачался, как будто работал три года, началась пандемия, свалил в стартап и все эти скилы, что я наработал в яндексе, мне сейчас очень помогают. Безмерно благодарен яндексу за крутой офис и за опыт. Но больше мне оттуда брать нечего.
По доработке. Добавьте плотность страниц.
Т.е. это мягкая книга. А есть книги, у которых плотные пластиковые страницы.
Эту либу можно использовать в фотомагазинах, которые печатают фотокниги и у них могут быть мягкие страницы, а могут твердые.
Мое знакомство с хабром началось с баша (который башорг).
В какое-то время там стали часто появляться вырезки из хабра-комментов, которые были мне по душе.
Так я и познакомился. Правда, после этого баш стало как-то неинтересно читать…
А у кого какие были «термины» и фразы?
Я вот помню: поперчить (проклятие), птица-падла (гарпии-ведьмы), капитошка или капа (капитолий), когда в бою были бесы, всегда вспоминалась песня арии «Бесы! Бесы все злей и злей», «магией не забудь жахнуть», «песики фас» — когда атакуешь церберами, «Золотая шахта, золотая, наполняет ароматом бабок»… Было еще много приколов, всех уж и не вспомню.

А еще помню была у меня история. Играли с отчимом вдвоем против AI на большой карте и я нашел пещеру кристальных драконов, где раз в неделю можно было купить одного такого дракона. И я стоял там одним героем и покупал их. Накопил их штук 8, и к этому моменту мы уже всех врагов победили и остался последний враг без замка. И вот я бегу этим героем почти неделю, чтобы этими драконами убить его. Наступил мой ход, и мне не хватило одного шага до него. Я нажал пропустить ход и после этого мне сообщили, что этот герой «канул в лету» и объявили о победе. Горький вкус победы помню до сих пор.
NamedTuple это все же неизменяемый, т.е. в ситуации, где надо принять JSON, что-то в нем поменять и отдать обратно, не подходит.
Mypy работает даже в 2.7 (они так говорят, я не проверял), т.е. уже в 2.7 можно использовать typehints.
В дополнение к этому, для внедрения typehints в проекты, где изначально не было ни typehints ни dataclass, проще создать тип для словаря и его указать, чем переделывать со словарей на dataclass.
Я полностью согласен с тем, что новые проекты желательно делать на 3.7 и с dataclass и прочими прелестями, но есть применение и для TypedDict.
dataclass появились в python 3.7, это достаточно недавно, typehints появились раньше.
Поправил свой комментарий выше.
Хочу немного дополнить: очень часто возникает ситуация (например, обработка JSON), когда надо типизировать Dict вида
from .types import ImageJson

image: ImageJson = {
    "src": "/image.jpg",
    "srcset": {
        "@2x": "/image@2x.jpg"
    }
}

Для таких ситуаций для python до 3.7 подходит TypedDict из mypy_extensions
from typing import Dict

from mypy_extensions import TypedDict

ImageJson = TypedDict('ImageJson', {
    'src': str,
    'srcset': Dict[str, str]
})

А в python 3.7 появились dataclass и лучше использовать их.
В Win10 Pro Docker работает через Hyper-V и там достаточно все удобно, на мой взгляд.
Думаю, автор комментария хочет проучить заправки, которые не доливают. Хотя, имхо, здесь все-таки логичнее смотрится отдельный прибор, который просто замеряет количество бензина в баке.
#косякинапроде

Был один раз косяк, когда на проде удалили половину медиа файлов. А все потому, что:

  1. Начали разрабатывать новую версию сайта
  2. Сделали для медиа отдельную папку /beta/media/
  3. Начали туда заливать много картинок в папку /beta/media/templates/
  4. Бета вышла из своей беты и решили на /beta/ тестить новые сборки, а на /prod/ прод
  5. Т.к. в обеих версиях нужна медиа (особенно, чтобы папка /templates/ была и там и там одинаковой), а в папке /beta/ она уже есть, решили, что /prod/media/templates — ссылка на /beta/media/templates
  6. Прошло полгода, решили отказаться от версии /beta/ но файлы пока не удалять «атовдругчо»
  7. Прошел еще год и теперь-то пора удалять ненужные файлы.
  8. Удалили папку /beta/
А зачем использовать сторонние решения, если все есть из коробки? Тем более systemd вроде стабильный. Если у вас есть какие-то плюсы supervisord по сравнению с systemd или специфичные случаи использования, поделитесь, мне интересно. Мне для Django+Celery хватает systemd за глаза.
В этом самое, пожалуй, интересное. Даже старым клиентам эти нововведения понравились — есть отзывы об этом, негативных нет. И новая аудитория та, которую мы и хотели привлечь.

У нас минус здесь даже в другом — нам сложно делать какие-то обновления, особенно если это юзабилити правки. Посмотрели поведение клиентов, увидели, что они делают три клика, а могли бы один, изменяем и нам летят гневные отзывы «Верните все обратно!!!» (капсом и с кучей гневных смайлов)

P.S. А «более придирчивый» сегмент очень дорого стоит, его совсем невыгодно привлекать на сайт, как бы печально это ни звучало.
У нас на работе были серьезные дебаты по вопросам, нужны ли попапы, фейковые скидки, фейковые отзывы (форма отзыва у нас есть), счетчики «осталось N времени», попап «оставьте свой email и получите что-то бесплатно» сразу при загрузке сайта.

Я был против этого (я программист), но меня никто не слушал и решили протестировать на манер fail fast, fail cheap. Сделали все это. И все это работает. От попапа при загрузке мы увеличили конверсию регистраций в 5 раз (да, если оставить email, мы сразу зарегистрируем юзера с рандом паролем), конверсия счетчиков была выше, чем без счетчика почти на 20%, фейковые отзывы дали нам увеличенную конверсию на оставление отзывов (люди видели чужие отзывы и оставляли свои, первым, как ни странно, мало кто решался оставить отзыв). От триггерных попапов (кликнул туда и стал тупить N секунд) конверсия просто бешеная.

После этого мы попробовали тизерную рекламу с кликбейтными заголовками и фотками, которая по клику ведет на сайт и там через 5 секунд открывается попап «оставьте email и получите скидку» и ЭТО РАБОТАЕТ!!! Люди ведутся.

Сказать, что я от этого был в шоке — ничего не сказать.
mail.ru и котики =)
Выступление «Новички в Python: как жить дальше?» Дмитрия Маланина, независимого разработчика был настолько плох, что его сюда не включили?
Или вообще этого выступления не было?

Информация

В рейтинге
Не участвует
Откуда
Вологда, Вологодская обл., Россия
Дата рождения
Зарегистрирован
Активность