Индексы, бл**Ь! Говорили мне все, говорили... Я им - у меня вон 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
Пост про выгорание в первую очередь с точки зрения менеджерского опыта.
Друг меня попросил книжек на этот счет, но я не могу вспомнить конкретной литературы, я написала просто набор идей, собранных за свой опыт и попыток решить эту проблему для себя.
Поделитесь тоже, кто как справляется с выгоранием. Интересно почитать.
https://telegra.ph/Vygoraniya-post-05-14 #Работа
Друг меня попросил книжек на этот счет, но я не могу вспомнить конкретной литературы, я написала просто набор идей, собранных за свой опыт и попыток решить эту проблему для себя.
Поделитесь тоже, кто как справляется с выгоранием. Интересно почитать.
https://telegra.ph/Vygoraniya-post-05-14 #Работа
Telegraph
Выгорания пост
У меня нет конкретного списка литературы на этот счет. Только свой жизненный опыт. Я пережила очень сильное выгорание один раз, с уходом из реальности на полгода и потом началом с нуля. Это было 10 лет назад. После этого у меня был момент, когда я снова ебашила…
На этой неделе прошла вступительные тесты в Школу 21 https://21-school.ru/
Давно мечтала снова побыть студенткой. У них интересный формат обучения, все бесплатно, при этом крутой кампус.
Теперь, чтобы поступить в школу, нужно пройти "бассейн". Из того, что я знаю, на бассейне дают задания на C, время на выполнение ограничено. Бассейн длится 4 недели без выходных.
Я записалась на 7 июня в Москве.
По возможности буду писать сюда о впечатлениях.
Надеюсь, что мне будет не очень сложно, так как все ж немного трогала С, когда проходила курсы cs50, ну, и в программировании уже ненулевая.
Знала бы раньше про эту школу, вписалась бы еще в прошлом году. Хех. #Учеба
Давно мечтала снова побыть студенткой. У них интересный формат обучения, все бесплатно, при этом крутой кампус.
Теперь, чтобы поступить в школу, нужно пройти "бассейн". Из того, что я знаю, на бассейне дают задания на C, время на выполнение ограничено. Бассейн длится 4 недели без выходных.
Я записалась на 7 июня в Москве.
По возможности буду писать сюда о впечатлениях.
Надеюсь, что мне будет не очень сложно, так как все ж немного трогала С, когда проходила курсы cs50, ну, и в программировании уже ненулевая.
Знала бы раньше про эту школу, вписалась бы еще в прошлом году. Хех. #Учеба
Школа 21.
День 1. Температура после прививки. Я порывалась поехать, но не осилила. Провалялась весь день в постели.
День 2. Утром меня отпустило, поехала. Накосячила с системой везде, где только можно было. Случайно сдала пустую работу, не зарегистрировалась вовремя на следующую работу. Начинается все с shell и git. Инфра не нравится. Документация вся в видео. Хочу текст(
Завтра по ходу буду пересдавать первую работу, проверять чьи-то?) #Учеба
День 1. Температура после прививки. Я порывалась поехать, но не осилила. Провалялась весь день в постели.
День 2. Утром меня отпустило, поехала. Накосячила с системой везде, где только можно было. Случайно сдала пустую работу, не зарегистрировалась вовремя на следующую работу. Начинается все с shell и git. Инфра не нравится. Документация вся в видео. Хочу текст(
Завтра по ходу буду пересдавать первую работу, проверять чьи-то?) #Учеба
Давно сюда не писала. Но хочу поделиться ботом, которого перенесла на свой бекенд сегодня, @s_channel_bot.
Это бот, который позволяет отслеживать наиболее популярные посты в каналах.
Изначально он был собран другим человеком через простенький скрипт. Я перенесла этот функционал на свой бекенд проекта Noctua.
Пришлось много поплакать над библиотекой telethon, чтобы добиться адекватного сохранения данных о просмотрах и репостах постов. Нет, на самом деле это не великая проблема, но когда поток сообщений высокий, аккаунтов больше, чем 1, начинаются пляски с бубном.
Жаль, что тележка не предоставляет возможность работать с чужими каналами через бота, и приходится так выворачиваться.
К слову, кто не в курсе, бота нельзя добавить в канал обычным смертным, только админом. Поэтому, чтобы получать сообщения из каналов, приходится заводить пользователей и добавляться в канал как пользователь через кастомный клиент тележки как раз с помощью библиотеки telethon.
Недавно осознала, что перестала бояться незнакомого для меня функционала, новых библиотек и так далее. Вообще перестала так бояться и стрессовать при выкатах и разработке. Все можно порешать, со всем можно разобраться. Если раньше конкретно нервничала, когда что-то шло не так или я не знала как это делать, то сейчас... Ахаха, могу просто залипнуть над решением и орать, если меня отвлекают. Орать. Потому что не трогайте меня, когда я сосредоточена. Нет, большую часть времени я расслабленно что-то делаю, но если я погрузиласть в поток, то не трогайте меня, я не хочу есть/чай/ничего, дайте дописать код спокойно)
На счет нового и интересного функционала, с которым столкнулась. Надо ж поделиться полезным:
1. https://docs.python.org/3/library/textwrap.html встроенная библиотека для того, чтобы разделять текст на нужные по размеру куски. Та же тележка имеет ограничение на объем сообщения. Раньше я ручками писала функции, чтобы резать тексты до нужного объема, но оказывается есть вот такая штука. Удобно.
2. https://docs.python.org/3/library/difflib.html. Мне периодически нужен нечеткий поиск. Недавно я вообще столкнулась с задачей, где в таблице есть список людей, у который в фамилиях есть спецсимволы (ну там немцы, чехи, кто-то там еще со своими умлаутами или как их там). А нужен простенький скрипт, который будет искать нужных людей по фамилии. И вот как быть с этими умлаутами? Короче, эта библиотека - мое спасение. Она сравнивает строки и оценивает их "похожесть", что дает возможность найти нужную фамилию. Работает примерно так:
запрос - caceres
1. A. Cáceres | Совпадение = 0.7058823529411765
2. A. Calver | Совпадение = 0.5
3. L. Cacace | Совпадение = 0.5
4. J. Cabrera | Совпадение = 0.47058823529411764
5. C. Armiento | Совпадение = 0.4444444444444444
Если интересно, то алгоритм описан https://en.wikipedia.org/wiki/Gestalt_Pattern_Matching
Всем удачи и спасибо, что вы со мной! ^_^ #Python, #Tools, #Работа
Это бот, который позволяет отслеживать наиболее популярные посты в каналах.
Изначально он был собран другим человеком через простенький скрипт. Я перенесла этот функционал на свой бекенд проекта Noctua.
Пришлось много поплакать над библиотекой telethon, чтобы добиться адекватного сохранения данных о просмотрах и репостах постов. Нет, на самом деле это не великая проблема, но когда поток сообщений высокий, аккаунтов больше, чем 1, начинаются пляски с бубном.
Жаль, что тележка не предоставляет возможность работать с чужими каналами через бота, и приходится так выворачиваться.
К слову, кто не в курсе, бота нельзя добавить в канал обычным смертным, только админом. Поэтому, чтобы получать сообщения из каналов, приходится заводить пользователей и добавляться в канал как пользователь через кастомный клиент тележки как раз с помощью библиотеки telethon.
Недавно осознала, что перестала бояться незнакомого для меня функционала, новых библиотек и так далее. Вообще перестала так бояться и стрессовать при выкатах и разработке. Все можно порешать, со всем можно разобраться. Если раньше конкретно нервничала, когда что-то шло не так или я не знала как это делать, то сейчас... Ахаха, могу просто залипнуть над решением и орать, если меня отвлекают. Орать. Потому что не трогайте меня, когда я сосредоточена. Нет, большую часть времени я расслабленно что-то делаю, но если я погрузиласть в поток, то не трогайте меня, я не хочу есть/чай/ничего, дайте дописать код спокойно)
На счет нового и интересного функционала, с которым столкнулась. Надо ж поделиться полезным:
1. https://docs.python.org/3/library/textwrap.html встроенная библиотека для того, чтобы разделять текст на нужные по размеру куски. Та же тележка имеет ограничение на объем сообщения. Раньше я ручками писала функции, чтобы резать тексты до нужного объема, но оказывается есть вот такая штука. Удобно.
2. https://docs.python.org/3/library/difflib.html. Мне периодически нужен нечеткий поиск. Недавно я вообще столкнулась с задачей, где в таблице есть список людей, у который в фамилиях есть спецсимволы (ну там немцы, чехи, кто-то там еще со своими умлаутами или как их там). А нужен простенький скрипт, который будет искать нужных людей по фамилии. И вот как быть с этими умлаутами? Короче, эта библиотека - мое спасение. Она сравнивает строки и оценивает их "похожесть", что дает возможность найти нужную фамилию. Работает примерно так:
запрос - caceres
1. A. Cáceres | Совпадение = 0.7058823529411765
2. A. Calver | Совпадение = 0.5
3. L. Cacace | Совпадение = 0.5
4. J. Cabrera | Совпадение = 0.47058823529411764
5. C. Armiento | Совпадение = 0.4444444444444444
matcher = SequenceMatcher(lambda x: x in " .", name.lower(), query.lower())
matcher.ratio() #Совпадение
Если интересно, то алгоритм описан https://en.wikipedia.org/wiki/Gestalt_Pattern_Matching
Всем удачи и спасибо, что вы со мной! ^_^ #Python, #Tools, #Работа