Закончилась короткая, но дивная неделька!
Познакомилась с новым:
- декоратор lru_cache.
https://pythonz.net/references/named/functools.lru_cache/
Эта штука кэширует результат выполнения функции для одинаковых атрибутов. В моем случае при использовании библиотеки formulas парсинг excel файла занимал около 9 секунд. Закэшировав функцию с парсингом, я получила постоянный и быстрый доступ к уже готовой xl_model:
```python
@lru_cache(maxsize=2)
def get_model():
xl_model = formulas.ExcelModel().loads(EXCEL_SOURCE).finish(circular=True)
return xl_mod
```
- По умолчанию в PyCharm стоит длина строки 120, а в PEP 79. Я была уверена, что PyCharm мне показывает 79, но нет. Пришлось идти в настройки и править. 79 символов - это так мало(
Есть еще такая штука https://tirinox.ru/flake8-pycharm/, но надо настраивать. Попробую как-нибудь.
- Правильный импорт файла, если он лежит в той же директории, что и скрипт:
- 1_000_000 == 1000000. Божечки-кошечки, это круто. Смысл в том, что число с пробелами не напишешь, а вот так норм.
- ssh и работа с ним (сейчас у опытных чуваков рука-лицо, но да, я никогда не делала этого).
Научилась выполнять команды на сервере через ssh-подключение без переключения на терминал внутри сервера.
Это типа таких вещей:
```shell
scp -i ~/.ssh/key user@host:file . # копирует файл с сервера к себе (если ключ по дефолту, то указывать его не нужно
ssh user@host 'rm file' # в кавычках команда для выполнения
```
Спасибо коллегам за развитие. Познавательно.
И вроде столько всего делала сама, но из таких мелочей, наверное, начинает складываться мастерство. #Python, #Работа, #Tools
Познакомилась с новым:
- декоратор lru_cache.
https://pythonz.net/references/named/functools.lru_cache/
Эта штука кэширует результат выполнения функции для одинаковых атрибутов. В моем случае при использовании библиотеки formulas парсинг excel файла занимал около 9 секунд. Закэшировав функцию с парсингом, я получила постоянный и быстрый доступ к уже готовой xl_model:
```python
@lru_cache(maxsize=2)
def get_model():
xl_model = formulas.ExcelModel().loads(EXCEL_SOURCE).finish(circular=True)
return xl_mod
el```
- По умолчанию в PyCharm стоит длина строки 120, а в PEP 79. Я была уверена, что PyCharm мне показывает 79, но нет. Пришлось идти в настройки и править. 79 символов - это так мало(
Есть еще такая штука https://tirinox.ru/flake8-pycharm/, но надо настраивать. Попробую как-нибудь.
- Правильный импорт файла, если он лежит в той же директории, что и скрипт:
DIR_PATH = os.path.dirname(os.path.realpath(__file__))
EXCEL = 'file.xlsx'
EXCEL_SOURCE = os.path.join(DIR_PATH, EXCEL)
Я видела, конечно, как в Django прописаны импорты, но никогда не делала сама.- 1_000_000 == 1000000. Божечки-кошечки, это круто. Смысл в том, что число с пробелами не напишешь, а вот так норм.
- ssh и работа с ним (сейчас у опытных чуваков рука-лицо, но да, я никогда не делала этого).
Научилась выполнять команды на сервере через ssh-подключение без переключения на терминал внутри сервера.
Это типа таких вещей:
```shell
scp -i ~/.ssh/key user@host:file . # копирует файл с сервера к себе (если ключ по дефолту, то указывать его не нужно
ssh user@host 'rm file' # в кавычках команда для выполнения
```
Банально и все знают? Я раньше не работала с ssh, для меня это все было в новинку.Спасибо коллегам за развитие. Познавательно.
И вроде столько всего делала сама, но из таких мелочей, наверное, начинает складываться мастерство. #Python, #Работа, #Tools
В - внимательность.
После прохождения код-ревью своих задач осознала, что мне очень сильно не хватает внимательности к мелочам. Часто вылезают даже не ошибки, а дублирование проверок, повторные однотипные действия, которые стоило бы замечать.
Например, 5 строчек назад стояло условие if value is None, а я внутри этого условия присваиваю value = None. Зачем? Просто потому что) И потом не вижу этого. Ну, я ж все правильно написала?!)
И таких мелочей довольно много. Сама за собой, естественно, я этого не замечала.
Интересно, как прокачать этот скилл? #Работа
После прохождения код-ревью своих задач осознала, что мне очень сильно не хватает внимательности к мелочам. Часто вылезают даже не ошибки, а дублирование проверок, повторные однотипные действия, которые стоило бы замечать.
Например, 5 строчек назад стояло условие if value is None, а я внутри этого условия присваиваю value = None. Зачем? Просто потому что) И потом не вижу этого. Ну, я ж все правильно написала?!)
И таких мелочей довольно много. Сама за собой, естественно, я этого не замечала.
Интересно, как прокачать этот скилл? #Работа
Из менеджера в разработчики.
Я была неплохим менеджером - Кромеритой. Сейчас пишу код и наслаждаюсь этим. Мне нравилась моя работа, нравилось управлять проектами, командами, нравилось писать тз, заниматься бизнес-аналитикой, выстраивать процессы, я спокойно, в целом, брала на себя ответственность, что важно для менеджера. Но я все время хотела программировать. Я хотела сама писать код, сама собирать проекты, сама придумывать архитектуру. Я верила, что если я стану разработчиком, то я буду неплохим специалистом.
Мне было очень жаль, что я не начала программировать еще в школе, что не знала об этом дивном мире тогда. Мне было довольно сложно начинать все с нуля, когда я все же решилась перейти в программирование. И даже теперь, я иногда испытываю отчаяние от того, что как разработчику мне еще расти и расти, что нужно еще много времени, чтобы подняться на хороший уровень. Но я на пути и это главное. #Работа, #Истории
Я была неплохим менеджером - Кромеритой. Сейчас пишу код и наслаждаюсь этим. Мне нравилась моя работа, нравилось управлять проектами, командами, нравилось писать тз, заниматься бизнес-аналитикой, выстраивать процессы, я спокойно, в целом, брала на себя ответственность, что важно для менеджера. Но я все время хотела программировать. Я хотела сама писать код, сама собирать проекты, сама придумывать архитектуру. Я верила, что если я стану разработчиком, то я буду неплохим специалистом.
Мне было очень жаль, что я не начала программировать еще в школе, что не знала об этом дивном мире тогда. Мне было довольно сложно начинать все с нуля, когда я все же решилась перейти в программирование. И даже теперь, я иногда испытываю отчаяние от того, что как разработчику мне еще расти и расти, что нужно еще много времени, чтобы подняться на хороший уровень. Но я на пути и это главное. #Работа, #Истории
Итоги недели)
Я тут решаю занимательную задачу - выделение существующего функционала в отдельный сервис. Хочу поделиться впечатлениями.
Django.
Отдельный сервис, свежая джанга, но та же бд. Копирую существующие модели в новое приложение, прописываю существующие таблицы так:
Никаких миграций. Прописываю для admin те же модели, чтобы вывести существующие данные. Запускаю новую джангу, захожу под существующим в базе пользователем, вижу данные. Все ок, работает!
Не то, чтобы это было сложно или неожиданно, но я реально не подозревала как оно заведется.
Celery и Telegram.
Я уже работала с Celery ранее на своем проекте. Использовала админку для создания нужного расписания. Смотрела ход выполнения в логах.
Сейчас я научилась выводить список задач в очереди и список выполняемых задач:
app в данном случае приложение Celery:
Это все я выведу на страничку, чтобы пользователь мог видеть, что происходит. Эдакий кастомный мониторинг. На самом деле для Celery есть Flower https://docs.celeryproject.org/en/stable/userguide/monitoring.html#flower-real-time-celery-web-monitor, но он избыточен в нашем случае.
А по результатам выполнения задачек настроила уведомления в Telegram. Делаю это на базе Celery Signals https://docs.celeryproject.org/en/stable/userguide/signals.html
С названиями функций у меня пока не очень( Сама чувствую, что идиотское название, но ничего пока лучше не пришло. Буду еще причесывать.
Из странного. Почему-то когда попыталась перенести отлавливание сигналов из стандартного файла tasks.py, сохранив все зависимости и тп, сигналы перестали срабатывать. Подозреваю, что для Celery важно прописывать пути, где лежат задачи и сигналы, при этом tasks.py в приложении вроде как работает по умолчанию. Но не копала пока точно эту тему, оставила в tasks.py.
Docker! Куда ж без него.
В docker-compose для того, чтобы локально поднять новый сервис, но подключиться к бд и Redis другого сервиса пришлось прокинуть network от исходного сервиса (venv_my-network):
И прописать в исходном проекте в конфиге алиасы для бд и Redis:
Есть еще вариант прокидывать connect с помощью команды:
Задача очень интересная. Надеюсь, что в результате все получится классно и удобно. Пока это только наброски. #Django, #Docker, #Работа
Я тут решаю занимательную задачу - выделение существующего функционала в отдельный сервис. Хочу поделиться впечатлениями.
Django.
Отдельный сервис, свежая джанга, но та же бд. Копирую существующие модели в новое приложение, прописываю существующие таблицы так:
class Meta:
db_table = 'old_app_model'
Никаких миграций. Прописываю для admin те же модели, чтобы вывести существующие данные. Запускаю новую джангу, захожу под существующим в базе пользователем, вижу данные. Все ок, работает!
Не то, чтобы это было сложно или неожиданно, но я реально не подозревала как оно заведется.
Celery и Telegram.
Я уже работала с Celery ранее на своем проекте. Использовала админку для создания нужного расписания. Смотрела ход выполнения в логах.
Сейчас я научилась выводить список задач в очереди и список выполняемых задач:
i = app.control.inspect()
active_workers_tasks: dict = i.active()
scheduled_workers_tasks = i.scheduled()
app в данном случае приложение Celery:
from celery import Celery
app = Celery('name')
Это все я выведу на страничку, чтобы пользователь мог видеть, что происходит. Эдакий кастомный мониторинг. На самом деле для Celery есть Flower https://docs.celeryproject.org/en/stable/userguide/monitoring.html#flower-real-time-celery-web-monitor, но он избыточен в нашем случае.
А по результатам выполнения задачек настроила уведомления в Telegram. Делаю это на базе Celery Signals https://docs.celeryproject.org/en/stable/userguide/signals.html
@task_success.connect
def task_success_notify(signal, sender, result, **kwargs):
tag = make_tag('success')
notify_data = make_notify_task_params(sender.request)
notify_data["Результат"] = result
text = tag + make_text_from_dict(notify_data)
send_message(text)
С названиями функций у меня пока не очень( Сама чувствую, что идиотское название, но ничего пока лучше не пришло. Буду еще причесывать.
Из странного. Почему-то когда попыталась перенести отлавливание сигналов из стандартного файла tasks.py, сохранив все зависимости и тп, сигналы перестали срабатывать. Подозреваю, что для Celery важно прописывать пути, где лежат задачи и сигналы, при этом tasks.py в приложении вроде как работает по умолчанию. Но не копала пока точно эту тему, оставила в tasks.py.
Docker! Куда ж без него.
В docker-compose для того, чтобы локально поднять новый сервис, но подключиться к бд и Redis другого сервиса пришлось прокинуть network от исходного сервиса (venv_my-network):
networks:
venv_my-network:
driver: bridge
external: true
И прописать в исходном проекте в конфиге алиасы для бд и Redis:
networks:
my-network:
aliases:
- redis
Есть еще вариант прокидывать connect с помощью команды:
docker network connect --alias db venv_my-network container_id
Задача очень интересная. Надеюсь, что в результате все получится классно и удобно. Пока это только наброски. #Django, #Docker, #Работа
Индексы, бл**Ь! Говорили мне все, говорили... Я им - у меня вон gin-индекс! У меня все хорошо с ними, вот только память чет уходит и вообще боль.
Ну что же. Я сегодня добавила индексы для дат. БД наконец-таки отпустило! Ура!
Просто. Тупо. Индексы для дат.
Но заметила еще периодическую ошибку, хз с чем связано, но в какой-то магический момент на функцию bulk_create начинает стабильно лететь ошибка connection already closed. При чем перезапуск приложения эту проблему решает. Надо шаманить работу с бд в этом моменте.
Но это мелочи по сравнением с тем, что я наконец смогла скинуть ресурсы для бд до 2 cpu и 2 ГБ памяти. Ура, товарищи! #Работа
Ну что же. Я сегодня добавила индексы для дат. БД наконец-таки отпустило! Ура!
Просто. Тупо. Индексы для дат.
add_date = models.DateTimeField(auto_now_add=True, db_index=True)
Но заметила еще периодическую ошибку, хз с чем связано, но в какой-то магический момент на функцию bulk_create начинает стабильно лететь ошибка connection already closed. При чем перезапуск приложения эту проблему решает. Надо шаманить работу с бд в этом моменте.
Но это мелочи по сравнением с тем, что я наконец смогла скинуть ресурсы для бд до 2 cpu и 2 ГБ памяти. Ура, товарищи! #Работа
Сижу, тыкаю цены Яндекс Облака, выглядит вроде как несколько дешевле, чем aws. С другой стороны, я использую дешевые споты на aws за 1.2 - 1.4 цента в час или около 650 рублей в месяц за t3.medium 2 cpu и 4 памяти. Но вот бд у меня в RDS - это отдельный специальный инстанс, очередь в sqs, логи в cloud watch, не говоря про то, что крутится на lambda и использование api gateway для endpoint. Очень распределенная система, так сказать. Не хватает только подключение к S3 для хранения медиа, о чем я давно думаю, но никак не соберусь сделать.
И вот все начинают с одной машины, на которой все это поднимают. А я сразу строила чертов замок. И как-то ненормально пытаться теперь все это собрать на одну машинку. Да?)
И вроде я все это сделала не от большого ума и опыта, а просто потому что просто как-то так вышло. Один очень влиятельный господин сразу запинал меня в aws и пришлось крутиться) Как смогла, так и выкручивалась. Мы ж не ищем легких путей.
В общей сумме за февраль за aws было выплачено 83.52 доллара (около 6300 рублей). Это на самом деле как-то дофига. Но я жду, что после оптимизации базы данных стоимость упадет почти на 26 долларов до 57.6 долларов или будет около 4500 рублей в месяц.
На облаке если посчитать все, что мне нужно, наверное, в итоге выйдет примерно также.
Еще есть вариант с Digital Ocean, там тоже вроде цены не кусачие.
Но! Если aws еще подкрутить, то там тоже можно еще немного сбить цену. Плюс я уже начала любить aws (стокгольмский синдром?!). На самом деле ковыряться с инфрой - то еще удовольствие. Наверное, оставлю пока все как есть. #AWS
И вот все начинают с одной машины, на которой все это поднимают. А я сразу строила чертов замок. И как-то ненормально пытаться теперь все это собрать на одну машинку. Да?)
И вроде я все это сделала не от большого ума и опыта, а просто потому что просто как-то так вышло. Один очень влиятельный господин сразу запинал меня в aws и пришлось крутиться) Как смогла, так и выкручивалась. Мы ж не ищем легких путей.
В общей сумме за февраль за aws было выплачено 83.52 доллара (около 6300 рублей). Это на самом деле как-то дофига. Но я жду, что после оптимизации базы данных стоимость упадет почти на 26 долларов до 57.6 долларов или будет около 4500 рублей в месяц.
На облаке если посчитать все, что мне нужно, наверное, в итоге выйдет примерно также.
Еще есть вариант с Digital Ocean, там тоже вроде цены не кусачие.
Но! Если aws еще подкрутить, то там тоже можно еще немного сбить цену. Плюс я уже начала любить aws (стокгольмский синдром?!). На самом деле ковыряться с инфрой - то еще удовольствие. Наверное, оставлю пока все как есть. #AWS
Дневник можно переименовать в еженедельник)
Отчет за недельку:
Докер
Продолжаю познавать докер и перестаю его бояться. Узнала про команды:
- docker stats - выводит состояние запущенных контейнеров (использование CPU, памяти, сети и тп).
Узнала знаете как? Первый раз у меня докер сожрал 18 ГБ памяти, а второй раз проц ушел в полку. Я решила, что хватит это терпеть, пора все же посмотреть, что там происходит.
- docker-compose up container -d
Эта приставка -d делает так, чтобы докер не начал срать своими логами в терминал, когда его запускаешь. Надоело переоткрывать терминал, поэтому сходила и посмотрела как это нормально делается.
Ну и плюс узнала как задать лимит по памяти для контейнера. Но почему-то то, что работало у меня на компе, не завелось на сервере.
logging
Когда я писала логирование для своего проекта, я просто узнала как логировать, написала свою простенькую функцию для логирования (вроде писала о ней выше) и мне было норм. Все мои логи aws заботливо собирает в CloudWatch, там прекрасный интерфейс и я довольная всегда имею доступ ко всем последним событиям на своем проекте, и не только к последним. AWS все сделал за меня! Почти все, функции обкладывала логами все же сама.
А тут на работе понадобилось логи складывать в текстовые файлики и очищать их со временем чем-нибудь, чтобы не засоряли пространство. При этом еще стоило их разделять на отдельные файлики. И пришлось мне таки разобраться как вообще работает logging.
Мне посоветовали https://www.youtube.com/watch?v=qqdgynJ5ATU это видео, но это уже после того как я перерыла кучу инфы в интернете и наваяла вот это:
```python
import logging
import logging.handlers
import os
def get_logger(filename: str):
"""
Функция возвращает logger по имени и сохраняет логи в файлы с
соответствующим названием, разделяя по часам
:param filename: название для logger
:return: logger
"""
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
logger = logging.getLogger(filename)
logger.propagate = False
if not logger.handlers:
log_path = os.path.join(LOG_DIR, f"{filename}.log")
file_handler = logging.handlers.TimedRotatingFileHandler(
log_path, when='h', interval=1, backupCount=90
)
log_formatter = logging.Formatter("[%(levelname)s] "
"%(asctime)s %(message)s")
file_handler.setFormatter(log_formatter)
logger.addHandler(file_handler)
logger.setLevel('INFO')
return logger
```
- обработчики (handlers) сделают всю грязную работу за меня. TimedRotatingFileHandler разделяет файлы по заданным промежуткам времени, параметр backupCount указывает на то, через какое количество созданных файлов их надо чистить.
- форматирование Formatter. Для него полезно знать о том, какие атрибуты вообще есть у лог-записи https://docs.python.org/3/library/logging.html#logrecord-attributes. Я там обнаружила, что есть та вещь, которую я в свое время прописывала ручками в своей функции, а именно funcName - название функции, в рамках которой залогирована запись.
Это круто. Я понимаю, что языки программирования не дураки пишут и библиотеки тоже. Дураки (незнающие) пользуются всем этим добром криво-косо и страдают. А там такое вот чудо.
О дивный новый мир. #Python, #Docker, #Работа
Отчет за недельку:
Докер
Продолжаю познавать докер и перестаю его бояться. Узнала про команды:
- docker stats - выводит состояние запущенных контейнеров (использование CPU, памяти, сети и тп).
Узнала знаете как? Первый раз у меня докер сожрал 18 ГБ памяти, а второй раз проц ушел в полку. Я решила, что хватит это терпеть, пора все же посмотреть, что там происходит.
- docker-compose up container -d
Эта приставка -d делает так, чтобы докер не начал срать своими логами в терминал, когда его запускаешь. Надоело переоткрывать терминал, поэтому сходила и посмотрела как это нормально делается.
Ну и плюс узнала как задать лимит по памяти для контейнера. Но почему-то то, что работало у меня на компе, не завелось на сервере.
logging
Когда я писала логирование для своего проекта, я просто узнала как логировать, написала свою простенькую функцию для логирования (вроде писала о ней выше) и мне было норм. Все мои логи aws заботливо собирает в CloudWatch, там прекрасный интерфейс и я довольная всегда имею доступ ко всем последним событиям на своем проекте, и не только к последним. AWS все сделал за меня! Почти все, функции обкладывала логами все же сама.
А тут на работе понадобилось логи складывать в текстовые файлики и очищать их со временем чем-нибудь, чтобы не засоряли пространство. При этом еще стоило их разделять на отдельные файлики. И пришлось мне таки разобраться как вообще работает logging.
Мне посоветовали https://www.youtube.com/watch?v=qqdgynJ5ATU это видео, но это уже после того как я перерыла кучу инфы в интернете и наваяла вот это:
```python
import logging
import logging.handlers
import os
def get_logger(filename: str):
"""
Функция возвращает logger по имени и сохраняет логи в файлы с
соответствующим названием, разделяя по часам
:param filename: название для logger
:return: logger
"""
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
logger = logging.getLogger(filename)
logger.propagate = False
if not logger.handlers:
log_path = os.path.join(LOG_DIR, f"{filename}.log")
file_handler = logging.handlers.TimedRotatingFileHandler(
log_path, when='h', interval=1, backupCount=90
)
log_formatter = logging.Formatter("[%(levelname)s] "
"%(asctime)s %(message)s")
file_handler.setFormatter(log_formatter)
logger.addHandler(file_handler)
logger.setLevel('INFO')
return logger
```
Главные открытия:- обработчики (handlers) сделают всю грязную работу за меня. TimedRotatingFileHandler разделяет файлы по заданным промежуткам времени, параметр backupCount указывает на то, через какое количество созданных файлов их надо чистить.
- форматирование Formatter. Для него полезно знать о том, какие атрибуты вообще есть у лог-записи https://docs.python.org/3/library/logging.html#logrecord-attributes. Я там обнаружила, что есть та вещь, которую я в свое время прописывала ручками в своей функции, а именно funcName - название функции, в рамках которой залогирована запись.
Это круто. Я понимаю, что языки программирования не дураки пишут и библиотеки тоже. Дураки (незнающие) пользуются всем этим добром криво-косо и страдают. А там такое вот чудо.
О дивный новый мир. #Python, #Docker, #Работа
Фух, я закончила фронтовую часть проекта.
Очень сложно пилить интерфейс по дизайну, не зная верстки. Еще один пунктик в копилку того, что стоит, наверное, все же изучить плотнее - css и все, что с ним связано. Также сложно было пилить проект на Angular, почти не зная его.
Больно было сделать банальную штуку - листание блоков контента по кнопке, чтобы так тык и блок плавно докрутился до следующих элементов. Я гуглила как бешенная, я хотела уже применить "помощь друга", что я делаю на самом деле не очень часто, как мне кажется. Но в последний момент вспомнила, что я подобную штуку делала, когда проходила курс по JS. Просто мне не доводилось применять это и я не запомнила как она делается. Открыла курс, код курса и бинго! Сделано!
Еще довелось прикрутить генерацию кропа для изображения по заданной площади. Нет, конечно, я честно использовала готовые решения. В первый момент было забавно, когда я осознала, что новый кроп то я сохраняю, но и старый файл остается, он никуда сам не исчезает. Это вроде на поверхности, но осознала я это случайно, когда заглянула в папку с медиа, пока проверяла локально. А там... 100500 почти одинаковых картиночек. Пришлось дописать логику удаления предыдущего файлика. Так что готовые решения иногда не такие уж и готовые.
С цитатами еще пришлось повозиться, чтобы они выделялись на фоне красивыми большими кавычками. Спасибо интернет за примеры решений.
Что я могу сказать? Жесть какая-то, я потратила часов 20-30 на весь бекенд и где-то больше 70 часов на фронтенд.
Waka time насчитал мне за март уже больше 250 часов кода, в среднем где-то по 65-70 часов в неделю. Чет я усталь немножко.
И! Прошел год, как я начала ковырять программирование. Я тут ковыряюсь в своем первом проекте, который работает и я в нем иногда кое-что допиливаю. Не сказать, что там все прямо плохо, но на многие вещи без слез не взглянешь. Спасибо, кстати, отчасти коллегам за науку в плане внимания к мелочам. Я стала несколько щепетильнее относится к тому, что и как я пишу.
Сумбурно. Я просто хочу как-то подвести итоги года, но, наверное, не в этот раз. Напишу чуть позже.
Реально, я устала. Простите.
С работы ушла, кстати. Пилю сама по себе, как та кошка. Есть в этом свои минусы и свои плюсы. Скучаю немножко по общению и по каким-никаким задачам (в смысле формальности, вот тебе задачи, иди делай, а не так, что вот тебе набор мыслей, надо бы из них сделать хорошо). Могу и сама себе задачи ставить, по сути так и делаю, но как-то нет в этом кайфа) чисто ради порядка и истории. #Работа
Очень сложно пилить интерфейс по дизайну, не зная верстки. Еще один пунктик в копилку того, что стоит, наверное, все же изучить плотнее - css и все, что с ним связано. Также сложно было пилить проект на Angular, почти не зная его.
Больно было сделать банальную штуку - листание блоков контента по кнопке, чтобы так тык и блок плавно докрутился до следующих элементов. Я гуглила как бешенная, я хотела уже применить "помощь друга", что я делаю на самом деле не очень часто, как мне кажется. Но в последний момент вспомнила, что я подобную штуку делала, когда проходила курс по JS. Просто мне не доводилось применять это и я не запомнила как она делается. Открыла курс, код курса и бинго! Сделано!
Еще довелось прикрутить генерацию кропа для изображения по заданной площади. Нет, конечно, я честно использовала готовые решения. В первый момент было забавно, когда я осознала, что новый кроп то я сохраняю, но и старый файл остается, он никуда сам не исчезает. Это вроде на поверхности, но осознала я это случайно, когда заглянула в папку с медиа, пока проверяла локально. А там... 100500 почти одинаковых картиночек. Пришлось дописать логику удаления предыдущего файлика. Так что готовые решения иногда не такие уж и готовые.
С цитатами еще пришлось повозиться, чтобы они выделялись на фоне красивыми большими кавычками. Спасибо интернет за примеры решений.
Что я могу сказать? Жесть какая-то, я потратила часов 20-30 на весь бекенд и где-то больше 70 часов на фронтенд.
Waka time насчитал мне за март уже больше 250 часов кода, в среднем где-то по 65-70 часов в неделю. Чет я усталь немножко.
И! Прошел год, как я начала ковырять программирование. Я тут ковыряюсь в своем первом проекте, который работает и я в нем иногда кое-что допиливаю. Не сказать, что там все прямо плохо, но на многие вещи без слез не взглянешь. Спасибо, кстати, отчасти коллегам за науку в плане внимания к мелочам. Я стала несколько щепетильнее относится к тому, что и как я пишу.
Сумбурно. Я просто хочу как-то подвести итоги года, но, наверное, не в этот раз. Напишу чуть позже.
Реально, я устала. Простите.
С работы ушла, кстати. Пилю сама по себе, как та кошка. Есть в этом свои минусы и свои плюсы. Скучаю немножко по общению и по каким-никаким задачам (в смысле формальности, вот тебе задачи, иди делай, а не так, что вот тебе набор мыслей, надо бы из них сделать хорошо). Могу и сама себе задачи ставить, по сути так и делаю, но как-то нет в этом кайфа) чисто ради порядка и истории. #Работа
Столько разговоров про CI/CD... Меня добила фраза "Только ленивый сейчас себе не сделал еще CI/CD". Ну раз это так просто, значит можно раз-раз и сделать, да? Посмотрела видео про github actions. Удобная штука, не поспоришь.
Вот, я начала на спотах в aws поднимать дешевые инстансы для тестирования. У меня есть подключение по ssh к ним, а сервисы поднимаются через docker-compose (web, db и тд).
Короче, я крутила-мутила. Поняла что, либо копать в сторону реджистри и каким-то образом прикручивать автодеплой через него, либо настраивать автодеплой в самом aws. Потому что иначе, это вышло как-то боком. Использовала https://circleci.com/, потому что в нем можно хранить приватный ssh-ключ. Это вообще законно?)
И у меня теперь есть типа ci/cd. Хах. Суть его в одной команде
```ssh instance 'git pull && docker-compose up -d --build'
```И все это подписано на обновление мастера в гите.
Потом, может, прикручу что-то более "умное", ну или таки научусь юзать aws во всей красе "занидорога".
Про actions неплохо рассказывают и дают общее понимание вот в этом ролике https://www.youtube.com/watch?v=Yg5rpke79X4 #Работа
Вот, я начала на спотах в aws поднимать дешевые инстансы для тестирования. У меня есть подключение по ssh к ним, а сервисы поднимаются через docker-compose (web, db и тд).
Короче, я крутила-мутила. Поняла что, либо копать в сторону реджистри и каким-то образом прикручивать автодеплой через него, либо настраивать автодеплой в самом aws. Потому что иначе, это вышло как-то боком. Использовала https://circleci.com/, потому что в нем можно хранить приватный ssh-ключ. Это вообще законно?)
И у меня теперь есть типа ci/cd. Хах. Суть его в одной команде
```ssh instance 'git pull && docker-compose up -d --build'
```И все это подписано на обновление мастера в гите.
Потом, может, прикручу что-то более "умное", ну или таки научусь юзать aws во всей красе "занидорога".
Про actions неплохо рассказывают и дают общее понимание вот в этом ролике https://www.youtube.com/watch?v=Yg5rpke79X4 #Работа
Трубопровод. Кстати, с SSH вышел забавный момент, он требует подтверждения хоста при первом подключении для добавления в доверенные. Никак не могла понять как бы это обойти. В общем, нужна была просто опция
ssh -o StrictHostKeyChecking=no#Работа
Новый друг для спины. К вопросу, если вам немного за тридцать и начала болеть поясница) Я давно думала о нем, смотрела отзывы и вот, начинаю испытания на себе. #Tools
Прошел год с начала обучения.
Я училась почти постоянно с небольшими перерывами и реализацией проектов.
По месяцам:
1 (апрель 2020). Базовый синтаксис уже достал, как же нормально работать с бд. Я ничего не понимаю, что происходит. Почему я не могу осилить ООП и рекурсию, бесит.
2. Я прошла пару курсов, стало немного понятнее, начинаю ковырять джангу, пилю свой первый проект.
3. Из говна и палок что-то получается собрать для решения задачи других людей. Все работает на локальном компе.
4. Говно и палки переношу на сервер. Плачу с инфры, блин, сколько я еще всего не знаю.
5. Попробовала использовать Celery и асинхронные фреймворки, по-прежнему плачу с инфры, а еще с фронта (верстка и js). Перенесла все на сервак (много).
6. Где-то там изучаю js и aws. JS более ли менее пошел, с aws все еще все очень непонятно. Сталкиваюсь с первыми проблемами с базой данных (тогда завела свой дневник в тележке).
7. Продолжаю и заканчиваю курс по js. Начинаю делать фронтенд для своего проекта на React. Офигеваю от архитектуры реакта, к моей боли прибавляется затыки на фронте.
8 (ноябрь 2020). Делаю фронтенд. Погружаюсь в реакт, несколько раз переписываю архитектуру для фронта.
9. Начала изучать ml (так и не закончила в итоге). Прибавилась боль про математику и статистику. Голова пухла, но очень интересно.
10 (январь 2021). Продолжаю курс по ml. Начинаю что-то отдаленно понимать, но немного. Продолжать не очень хотелось.
11. Начала искать работу. Прошла пару собеседований. В середине февраля вышла на работу.
12. Работала и пилила свои проекты. Устала ужасно. Ушла с работы.
13 (текущий апрель). Продолжаю пилить свои проекты. Все еще больно со всех сторон. Иногда ловлю себя на мысли, что уже понимаю как решать разные проблемы, но все еще могу залипнуть на одной фигней на 2-3 дня. Например, недавно были проблемы с DRF:
- абсолютные url строились с локальным хостом. Никак не могла понять почему и как это исправить. А все потому что в документации написано вот так:
а надо на самом деле вот так:
Тогда django достраивает нормальные url. Спасибо стаковерфлоу за подсказку.
- другая история. Сделала фильтр для вывода материалов, который должен выводить только опубликованные к данному моменту (сравниваю дату публикации с текущей датой). И вот фильтр сам работает правильно, но на публичке не выводятся свежие материалы (те, что постарее норм, выводятся, а свежие нет!). Я ломала голову, проверяла tzone, пробовала по-разному указать текущую дату-время, но нет. Оказалось, что мой косяк был в том, что я свой фильтр присваивала атрибуту queryset, а надо было его сделать через функцию get_queryset для view класса (viewsets.ModelViewSet)! Просто через атрибут текущее время фиксировалось в момент поднятия сервера и не пересчитывалось. Пам-пам. И вот вроде мелочь такая, но фак, неочевидно было. И такая грусть после этого, ощущение себя как абсолютно бестолкового спеца, который упарывается на такой фигне.
Прошел год, я продолжаю учиться, вроде уже использую много всего, но столько еще всего непонятно.
Зато слушаю технические собесы на мидла/сеньора по питону, могу ответить практически на все вопросы без подготовки.
Да, и еще. Алгоритмы все еще висят в вишлисте, что надо бы пройти, но чуть позже. И потом паттерны проектирования тоже допройти. #Учеба
Я училась почти постоянно с небольшими перерывами и реализацией проектов.
По месяцам:
1 (апрель 2020). Базовый синтаксис уже достал, как же нормально работать с бд. Я ничего не понимаю, что происходит. Почему я не могу осилить ООП и рекурсию, бесит.
2. Я прошла пару курсов, стало немного понятнее, начинаю ковырять джангу, пилю свой первый проект.
3. Из говна и палок что-то получается собрать для решения задачи других людей. Все работает на локальном компе.
4. Говно и палки переношу на сервер. Плачу с инфры, блин, сколько я еще всего не знаю.
5. Попробовала использовать Celery и асинхронные фреймворки, по-прежнему плачу с инфры, а еще с фронта (верстка и js). Перенесла все на сервак (много).
6. Где-то там изучаю js и aws. JS более ли менее пошел, с aws все еще все очень непонятно. Сталкиваюсь с первыми проблемами с базой данных (тогда завела свой дневник в тележке).
7. Продолжаю и заканчиваю курс по js. Начинаю делать фронтенд для своего проекта на React. Офигеваю от архитектуры реакта, к моей боли прибавляется затыки на фронте.
8 (ноябрь 2020). Делаю фронтенд. Погружаюсь в реакт, несколько раз переписываю архитектуру для фронта.
9. Начала изучать ml (так и не закончила в итоге). Прибавилась боль про математику и статистику. Голова пухла, но очень интересно.
10 (январь 2021). Продолжаю курс по ml. Начинаю что-то отдаленно понимать, но немного. Продолжать не очень хотелось.
11. Начала искать работу. Прошла пару собеседований. В середине февраля вышла на работу.
12. Работала и пилила свои проекты. Устала ужасно. Ушла с работы.
13 (текущий апрель). Продолжаю пилить свои проекты. Все еще больно со всех сторон. Иногда ловлю себя на мысли, что уже понимаю как решать разные проблемы, но все еще могу залипнуть на одной фигней на 2-3 дня. Например, недавно были проблемы с DRF:
- абсолютные url строились с локальным хостом. Никак не могла понять почему и как это исправить. А все потому что в документации написано вот так:
router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'accounts', AccountViewSet)
urlpatterns = router.urls
а надо на самом деле вот так:
router.register(r'service-stations', ServiceStationViewSet,
basename="ServiceStations")
urlpatterns = [
path('', include(router.urls))
]
Тогда django достраивает нормальные url. Спасибо стаковерфлоу за подсказку.
- другая история. Сделала фильтр для вывода материалов, который должен выводить только опубликованные к данному моменту (сравниваю дату публикации с текущей датой). И вот фильтр сам работает правильно, но на публичке не выводятся свежие материалы (те, что постарее норм, выводятся, а свежие нет!). Я ломала голову, проверяла tzone, пробовала по-разному указать текущую дату-время, но нет. Оказалось, что мой косяк был в том, что я свой фильтр присваивала атрибуту queryset, а надо было его сделать через функцию get_queryset для view класса (viewsets.ModelViewSet)! Просто через атрибут текущее время фиксировалось в момент поднятия сервера и не пересчитывалось. Пам-пам. И вот вроде мелочь такая, но фак, неочевидно было. И такая грусть после этого, ощущение себя как абсолютно бестолкового спеца, который упарывается на такой фигне.
Прошел год, я продолжаю учиться, вроде уже использую много всего, но столько еще всего непонятно.
Зато слушаю технические собесы на мидла/сеньора по питону, могу ответить практически на все вопросы без подготовки.
Да, и еще. Алгоритмы все еще висят в вишлисте, что надо бы пройти, но чуть позже. И потом паттерны проектирования тоже допройти. #Учеба
Мои курсы:
0. Когда-то давно для общего развития скорее проходила курсы "Специалист" (от МГТУ им. Баумана) по php и в целом по программированию. Еще проходила https://tutorial.djangogirls.org/ru/, думала с них начать приобщение к питону, но это не сильно все помогло. Но дало хотя бы базовые знания, чтобы совсем не теряться в общении с программистами.
1. Началом изучения программирования я считаю курс https://www.udemy.com/course/bestpython/. До него я пробовала проходить курс от MIT, но шел он довольно тяжело не из-за сложности, а из-за английского и слабого понимания темы. На русском курс пошел легче и стало все как-то понятнее. Прошла его за пару недель (после этого курс автор еще расширил темой про многопоточку и я к нему возвращалась еще на пару недель). Для базы - курс отличный.
2. Курс-любовь, курс-огонь. https://cs50.harvard.edu/x/2021/ Бесплатный, старые лекции можно найти на русском. Это базовый курс, есть еще по разным направлениям (web, ml, мобилки). Первые задания придется выполнять на C, это гораздо больнее, чем на питончике. Но инфраструктура для учебы, офигенные интересные задачи, увлекательные лекции, все это к-к-комбо. Самый лучший курс, который я когда-либо проходила.
3. Начинала курс по алгоритмам https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0. Прошла 6 или 7 лекций. К ним еще есть практика http://judge.mipt.ru/mipt_cs_on_python3/. Уважаю МФТИ и этого лектора в частности за то, что дают доступ к своим лекциям. Это круто. Но... как же я горела с задач, этот поток несвязных цифр на входе и на выходе, эти кривые тесты для проверки... Когда-нибудь я допройду этот курс. Но практику буду искать на кодварс или литкоде.
4. Вдумчиво разбирала первые лекции с канала https://www.youtube.com/c/lbTechOfficial/videos. Тут про паттерны проектирования. SOLID, чистый код, про рефакторинг и тд. Очень хочу вернуться позже к этому каналу, так как на момент прохождения было мало опыта, знаний и понимания.
5. Какой-то курс по вебпаку, что-то по докеру. Дальше вот этот канал был https://www.youtube.com/channel/UCWEHue8kksIaktO8KTTN_zg. На самом try django 2.2 начинала еще на самом старте, но это было так, попытка схватиться за что-нибудь. Упоролась, но прошла курс https://www.youtube.com/watch?v=f1R_bykXHGE. 12 часов растянулись на неделю или две. Но я хотела подсмотреть какие-то практики работы с джангой.
6. А, и еще я где-то там начала проходить курс по web от cs50, сдала половину проектов и просмотрела все лекции, но в итоге не закончила его, так как они меняли контент, я ждала, а в итоге переключилась на другое и не видела большого смысла для себя возвращаться к нему. https://cs50.harvard.edu/web/2020/. Они, кстати, заставляют снимать видео для демо проектов https://www.youtube.com/watch?v=MmLte1ii_5A. А тут я даже в кадре что-то пытаюсь рассказывать https://www.youtube.com/watch?v=fAZq7Qdsvp8
7. Дальше я выла с того, что мне нужен js, а я его не понимаю. Я вроде что-то делала на нем, но как-то не очень получалось. Поэтому я собралась и взяла курс https://www.udemy.com/course/javascript_full/. Прошла, стало как-то понятнее и легче ориентироваться в JS.
8. Параллельно JS, чтобы разнообразить себе жизнь и подтянуть еще одно свое слабое место проходила курс по AWS https://www.youtube.com/playlist?list=PLg5SS_4L6LYsxrZ_4xE_U95AtGsIB96k9. Посмотрела до 45 лекции. Иногда смотрю у этого же автора какие-то темы по инфре, например, у него же смотрела про github actions. Вообще, когда смотрела казалось, что вроде он ничего особенно и не рассказывает, тык-тык, что-то там делает, что я из этого пойму. Но на самом деле потом осознала, что мне стало легче ориентироваться в aws. Я внезапно начала лучше понимать их сокращения и архитектуру сервисов. #Курсы, #Учеба, #Python, #JS
0. Когда-то давно для общего развития скорее проходила курсы "Специалист" (от МГТУ им. Баумана) по php и в целом по программированию. Еще проходила https://tutorial.djangogirls.org/ru/, думала с них начать приобщение к питону, но это не сильно все помогло. Но дало хотя бы базовые знания, чтобы совсем не теряться в общении с программистами.
1. Началом изучения программирования я считаю курс https://www.udemy.com/course/bestpython/. До него я пробовала проходить курс от MIT, но шел он довольно тяжело не из-за сложности, а из-за английского и слабого понимания темы. На русском курс пошел легче и стало все как-то понятнее. Прошла его за пару недель (после этого курс автор еще расширил темой про многопоточку и я к нему возвращалась еще на пару недель). Для базы - курс отличный.
2. Курс-любовь, курс-огонь. https://cs50.harvard.edu/x/2021/ Бесплатный, старые лекции можно найти на русском. Это базовый курс, есть еще по разным направлениям (web, ml, мобилки). Первые задания придется выполнять на C, это гораздо больнее, чем на питончике. Но инфраструктура для учебы, офигенные интересные задачи, увлекательные лекции, все это к-к-комбо. Самый лучший курс, который я когда-либо проходила.
3. Начинала курс по алгоритмам https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0. Прошла 6 или 7 лекций. К ним еще есть практика http://judge.mipt.ru/mipt_cs_on_python3/. Уважаю МФТИ и этого лектора в частности за то, что дают доступ к своим лекциям. Это круто. Но... как же я горела с задач, этот поток несвязных цифр на входе и на выходе, эти кривые тесты для проверки... Когда-нибудь я допройду этот курс. Но практику буду искать на кодварс или литкоде.
4. Вдумчиво разбирала первые лекции с канала https://www.youtube.com/c/lbTechOfficial/videos. Тут про паттерны проектирования. SOLID, чистый код, про рефакторинг и тд. Очень хочу вернуться позже к этому каналу, так как на момент прохождения было мало опыта, знаний и понимания.
5. Какой-то курс по вебпаку, что-то по докеру. Дальше вот этот канал был https://www.youtube.com/channel/UCWEHue8kksIaktO8KTTN_zg. На самом try django 2.2 начинала еще на самом старте, но это было так, попытка схватиться за что-нибудь. Упоролась, но прошла курс https://www.youtube.com/watch?v=f1R_bykXHGE. 12 часов растянулись на неделю или две. Но я хотела подсмотреть какие-то практики работы с джангой.
6. А, и еще я где-то там начала проходить курс по web от cs50, сдала половину проектов и просмотрела все лекции, но в итоге не закончила его, так как они меняли контент, я ждала, а в итоге переключилась на другое и не видела большого смысла для себя возвращаться к нему. https://cs50.harvard.edu/web/2020/. Они, кстати, заставляют снимать видео для демо проектов https://www.youtube.com/watch?v=MmLte1ii_5A. А тут я даже в кадре что-то пытаюсь рассказывать https://www.youtube.com/watch?v=fAZq7Qdsvp8
7. Дальше я выла с того, что мне нужен js, а я его не понимаю. Я вроде что-то делала на нем, но как-то не очень получалось. Поэтому я собралась и взяла курс https://www.udemy.com/course/javascript_full/. Прошла, стало как-то понятнее и легче ориентироваться в JS.
8. Параллельно JS, чтобы разнообразить себе жизнь и подтянуть еще одно свое слабое место проходила курс по AWS https://www.youtube.com/playlist?list=PLg5SS_4L6LYsxrZ_4xE_U95AtGsIB96k9. Посмотрела до 45 лекции. Иногда смотрю у этого же автора какие-то темы по инфре, например, у него же смотрела про github actions. Вообще, когда смотрела казалось, что вроде он ничего особенно и не рассказывает, тык-тык, что-то там делает, что я из этого пойму. Но на самом деле потом осознала, что мне стало легче ориентироваться в aws. Я внезапно начала лучше понимать их сокращения и архитектуру сервисов. #Курсы, #Учеба, #Python, #JS
👎1🔥1
9. Дальше Остапа понесло в ml. Я начала думать, что современное программирование без ml, уже не торт. Надо изучать тему. С одной стороны я понимала, что мне в целом то еще многому надо из базы научиться, что и так много информации, но мне хотелось. Короче, я прошла первый курс из 6 https://www.coursera.org/specializations/machine-learning-data-analysis. Начинала проходить второй, но честно, этот курс был каким-то издевательством над собой. Потому что на лекцию в 2 минуты приходилось несколько часов гугления на тему, изучения в дополнительных источниках и тд и тп. Про практику вообще молчу. Без хорошей базы по математике, ну и в целом по инструментам ml, прохождение этого курса превращается в ад. Мне понравилось ml, я даже поняла некоторые вещи, но, наверное, когда я вернусь к этой теме, я попробую начать с курса от ODS или CS50, или еще что-то поищу. Впрочем, многие друзья и знакомые мне так и советовали сделать, но я упоротая, я пыталась его проходить.
10. И завершает этот список курс по Angular https://www.udemy.com/course/angular-complete-guide/. Посмотрела не все, многое вскользь, скорее чтобы просто понять как решать некоторые задачи и как работают те или иные компоненты.
Ну, и помимо этого списка, конечно, смотрела разные видосики, читала статьи и тп по определенным темам. Вроде ничего не забыла.
А какие курсы проходили вы? #Курсы, #Учеба, #ML
10. И завершает этот список курс по Angular https://www.udemy.com/course/angular-complete-guide/. Посмотрела не все, многое вскользь, скорее чтобы просто понять как решать некоторые задачи и как работают те или иные компоненты.
Ну, и помимо этого списка, конечно, смотрела разные видосики, читала статьи и тп по определенным темам. Вроде ничего не забыла.
А какие курсы проходили вы? #Курсы, #Учеба, #ML
Словила очередную проблему на сервере. Не грузится на тестовом стенде проект. 3 дня назад загружался успешно, а вот сейчас почему-то отвалился. Иду смотреть логи и вижу следующее https://telegra.ph/LOgi-04-26.
Как я читаю логи, если что-то непонятно? Первая мысль - самобичевание, что опять нифига непонятно и где я продолбалась. Потом всматриваюсь и... что это вообще за дичь? "Forbidden (CSRF cookie not set.): /expsky.php"! и много-много запросов в php (проект на python).
Блин, на этом проекте нет ничего особенного, конечно, но спасибо AWS и django за защиту.
Я уже с таким сталкивалась на работе, когда тоже падал сервис на тестовом окружении, потому что кто-то упорото стучал в redis.
Вроде красной нитью все говорят про защиту, но, знаете, почему-то было тупое ощущение, что необходимость в этом преувеличена. Я раньше думала, ха, ну почему база должна быть доступна только внутри сети, ведь там пароли, все дела.
Потом увидела в логах к бд, как кто-то пытается подобрать пароль. Пришлось закрывать доступ, себе шарю по ip, lambda-функцию с подключением к бд перенесла на DynamoDB, так как чтобы функция имела доступ и к бд в RDS, и в интернет тоже нужны пляски с бубном.
Итого, я уже три раза столкнулась с тем, что мои сервисы пытаются сломать.
Забавно...
Надо еще понять, почему в итоге сервис навернулся, так как контейнер остался жив, и как настроить блокировку таких атак.
Если честно, я не догоняю что это вообще за логи. То есть, я тут подумала, что ведь это не логи от джанги, потому что роутинг джанги все незнакомые url перекидавает на шаблон, в котором зашит Angular, который должен уже их обрабатывать. Если англуляр не работает (например, запрос не из браузера), то по идее должен вернуться пустой html и ошибок быть не должно.
Чувствую, что это будет увлекательная задачка. #Работа, #AWS
Как я читаю логи, если что-то непонятно? Первая мысль - самобичевание, что опять нифига непонятно и где я продолбалась. Потом всматриваюсь и... что это вообще за дичь? "Forbidden (CSRF cookie not set.): /expsky.php"! и много-много запросов в php (проект на python).
Блин, на этом проекте нет ничего особенного, конечно, но спасибо AWS и django за защиту.
Я уже с таким сталкивалась на работе, когда тоже падал сервис на тестовом окружении, потому что кто-то упорото стучал в redis.
Вроде красной нитью все говорят про защиту, но, знаете, почему-то было тупое ощущение, что необходимость в этом преувеличена. Я раньше думала, ха, ну почему база должна быть доступна только внутри сети, ведь там пароли, все дела.
Потом увидела в логах к бд, как кто-то пытается подобрать пароль. Пришлось закрывать доступ, себе шарю по ip, lambda-функцию с подключением к бд перенесла на DynamoDB, так как чтобы функция имела доступ и к бд в RDS, и в интернет тоже нужны пляски с бубном.
Итого, я уже три раза столкнулась с тем, что мои сервисы пытаются сломать.
Забавно...
Надо еще понять, почему в итоге сервис навернулся, так как контейнер остался жив, и как настроить блокировку таких атак.
Если честно, я не догоняю что это вообще за логи. То есть, я тут подумала, что ведь это не логи от джанги, потому что роутинг джанги все незнакомые url перекидавает на шаблон, в котором зашит Angular, который должен уже их обрабатывать. Если англуляр не работает (например, запрос не из браузера), то по идее должен вернуться пустой html и ошибок быть не должно.
Чувствую, что это будет увлекательная задачка. #Работа, #AWS
Отчет про коленный стул.
Прошло чуть больше двух недель. Итоги:
1. Самое главное. У меня перестала болеть поясница! Это ура!
2. Когда я хочу долго сидеть, не вставая (например, когда играю во что-то), то я использую обычный стул. Пока не могу дольше часа просидеть на коленном.
3. Через час сидения спина устает. Очень хочется расслабиться, сменить положение. Я могу походить, полежать на диванчике. В общем, стимулирует к переключению.
4. Мое тело нашло лайфак, чтобы избегать пункта 3 и совместить с любимой привычкой - задирать ноги. Теперь я иногда просто подбираю под себя коленки, ставя лапки на перекладину, сижу как на жердочке (как в курятнике) только с упором под жопку)
О покупке не пожалела, стулом пользуюсь, надеюсь все же привыкнуть сидеть на нем постоянно. #Tools
Прошло чуть больше двух недель. Итоги:
1. Самое главное. У меня перестала болеть поясница! Это ура!
2. Когда я хочу долго сидеть, не вставая (например, когда играю во что-то), то я использую обычный стул. Пока не могу дольше часа просидеть на коленном.
3. Через час сидения спина устает. Очень хочется расслабиться, сменить положение. Я могу походить, полежать на диванчике. В общем, стимулирует к переключению.
4. Мое тело нашло лайфак, чтобы избегать пункта 3 и совместить с любимой привычкой - задирать ноги. Теперь я иногда просто подбираю под себя коленки, ставя лапки на перекладину, сижу как на жердочке (как в курятнике) только с упором под жопку)
О покупке не пожалела, стулом пользуюсь, надеюсь все же привыкнуть сидеть на нем постоянно. #Tools