All streams
Search
Write a publication
Pull to refresh
1
0

Backend

Send message

Время пришло

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

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

Мне нравятся миграции с 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: как жить дальше?» Дмитрия Маланина, независимого разработчика был настолько плох, что его сюда не включили?
Или вообще этого выступления не было?

Information

Rating
Does not participate
Location
Вологда, Вологодская обл., Россия
Date of birth
Registered
Activity