Дневник разработчицы
407 subscribers
111 photos
9 videos
14 files
145 links
Откровенные истории о проектах, работе, учебе и открытиях в мире программирования. Присоединяйтесь и вдохновляйтесь вместе со мной!
Download Telegram
9 веток, 50 коммитов. Я завершаю работу над одной из очередных рабочих задач. И это еще не конец, потому что в самом конце я еще хочу поудалять старый код, который уже не востребован по этой задаче.
Хочу отрефлексировать этот опыт. У нас нет строгих процессов разработки, поэтому нет нужды декомпозировать задачи, хотя по-хорошему надо было это сделать. Но давайте сначала.
Исходная задача была буквально в несколько строк, к ней еще было привязано несколько, которые по факту являлись дополнительными фичами. По сути ядро бизнес-логики было сделано коллегами до меня, мне надо было взять это ядро, вынести в отдельный сервис и доработать его по условиям новых фичей. Кое-какая документация к ядру сохранилась в прошлых задачах, но описания к коду, как и его авторов, увы, не было. Но мне не привыкать разбираться в чужом коде, хотя в этой ситуации задача была со звездочкой, правда.
Так вот, что было.

Суть сервиса довольно простая - собрать данные из одного сервиса, обработать по определенным требованиям, показать пользователю и по запросу пользователя отправить в другой сервис. Осложняется это тем, что сбор данных происходит из нескольких источников, на каждую строку в таблице приходится делать несколько запросов. Маппинг некоторых данных задан не жестко, то есть это вручную созданные поля в системе-источнике. #Работа
😱1
Шаг 1. Вытащить логику сбора. У коллег маппинг данных был сделан очень хитрым способом с несколькими уровнями в виде словарей. Когда данные из источника сначала прогоняют по одному словарю, потом эти данные уже с новыми ключами прогоняют по другому словарю и все это было очень неочевидно. Много раз у меня возникало желание бросить все это, но это ж работа и ее надо делать. Этот шаг невозможно оценить, этот клубок мотаешь-мотаешь, а он никак не распутывается. Кое-какая документация, конечно, помогала, но не сильно.
Шаг 2. Прямо в процессе распутывания клубка я осознавала какие источники мне нужны и какие данные надо будет собрать. Это давало понимание, что мне надо будет доработать наш новый скелет работы с сервисом-источником. Мне надо было доработать модели и фабрики к ним. Тут я последовательно создавала отдельные ветки для обновления нашей базовой либы для работы с сервисом-источником. Если бы я этим занялась после того как полностью закончила шаг 1, то я могла бы точно прикинуть полный скоуп работ, но у меня не было целей составить строгий план. Я могла двигаться в свободном плавании, поэтому я работала в своем темпе. Я знаю, что хорошо было бы под каждую ветку создавать отдельную задачу, это бы оставило больше артефактов, но в данном случае я посчитала, что это необязательно, я просто оставляю readme с примером использования кода для новых функций. Кажется, что это полезнее, так как находится прям в репозитории.
Шаг 3. Помимо бекенда есть еще фронтовая часть, которая раньше жила прямо вместе с бекендом в виде html/js контента, зашитого прям в питонячьи скрипты. Кое-что, конечно, вынесено, но разбираться в файлах на тысячи строк не хотелось совсем. Фронт я собирала с нуля, заглядывая на то как это было у коллег в текущем интерфейсе.
Шаг 4. После того как я собрала базовую логику началась стадия проверки, где я уперлась в скорость работы. Дальше шла оптимизация, где я фактически полностью пересобрала всю бизнес-логику, потому что надо было максимально сэкономить, закешировать то, что можно закешировать.
Шаг 5. Еще в процессе проверки обнаружились некоторые особенности взаимодействия (мой пост про пост-запрос за фронтендом), из-за которых пришлось еще мутить дополнительный сервис (прокся). Тоже было бы логично вытащить это в отдельную задачку.
Шаг 6. Фичи! Да, в самом конце на всю эту базу, я как на новогоднюю елку уже с большим удовольствием навешивала те самые фичи, ради которых по сути все и затевалось. Это мой самый любимый шаг. Реально доставляет кайф, когда видишь как быстро и изящно можно добавить функционал на базовый скелет.
Шаг 7. Ради одной из фичей пришлось еще отрефакторить еще один существующий сервис, но его писала я, поэтому прошло все довольно быстро. Я просто оптимизировала его, переделала под новый вариант нашей архитектуры и добавила фичу для частичной обработки, вместо полной.

Можно ли было разделить эту задачу? На самом деле 7 из 9 веток уже в основной ветке. Я их делала, сразу отправляла на ревью и мержила, чтобы не держать в себе. Это все ветки, кроме последнего шага, в которых были доработки, не касающиеся основного разрабатываемого сервиса. Можно было и 7 шаг засунуть в отдельную ветку и выпустить ее раньше, но так как я уже понимала, что подхожу к финалу, плюс это не так критично, поэтому оставила его внутри основной ветки задачи.

По основной задаче, можно было бы выпустить базу до фичей, но, во-первых, фичи были сделаны довольно быстро, а во-вторых, показывать пользователям перед деплоем лучше уже с фичами.

Есть еще некоторые вещи, которые стоило бы сделать перед тем как закрывать эту задачу. Например, получше структурировать код, разделить его. Но я вытащила все критичные моменты, а в остальном, это все можно будет доделать в следующих итерациях, если они будут. Главное, что основной каркас довольно гибкий на мой взгляд.

Как же меня заманала эта задача! Ура, наконец-то финал. Я люблю свою работу очень сильно! 🙂 #Работа
🔥4👍3😱1
Импорты в python. Много раз от знакомых видела вопросы про проблемы с импортами в python. Чаще всего они не возникают, если не менять уровень директории для запуска скрипта. То есть если у вас проект от корня, то с импортами будет все в порядке. Однако, сейчас я работаю на проекте, где все сервисы лежат в одном репозитории. Получается, что на сервере запуск идет от корня сервиса, а на локальной машине от корня репозитория (на уровень выше).

И вот был у нас один сервис, который был упакован коллегами так: репозиторий -> название сервиса -> еще одна папка, в которой лежит сам сервис с разбивкой на разные директории внутри. Его вручную собирали в архив и этот архив вручную заливали на сервер, а иногда даже тупо обновляли вручную содержание конкретных скриптов. Ко всему прочему, в зависимости от стейджа внутрь сервиса на сервере заливался свой конфиг файл. Адский ад.

Самое интересное, что в тестах к этому сервису был хук импортов, который добавлял директорию сервиса к python путям, а внутри сервиса все импорты были прописаны как абсолютные. Когда я открывала этот сервис в pycharm, у меня были кровавые слезы при взгляде на эти импорты, потому что интерпретатор грустил. Можно было бы, конечно, в настройках проекта также указать эту папку как пакет, но это костыль.

Как же я давно мечтала исправить этот сервис. Как же у меня свербило от него. И вот вчера я добралась до него!
Убрала этот конфиг, прописала в settings файл все условия в зависимости от стейджа. Основные доступы и прочие защищенные данные я уже давно перетащила в SecretManager, поэтому с этим проблем не было. Попутно поправила кое-что для других сервисов, которые использовались в этом (обновила код в репозитории, потому что расходился прод-код и код в репе, обновила название одного из сервисов под наш стандарт и тп). И вот добралась до импортов. Быстренько подменила абсолютные пути на относительные и раскатала скриптом новую версию на тестовом стейдже. И… ничего не заработало. Получила ошибку импортов, что вылезаю на слишком высокий уровень с помощью относительных импортов. Сначала я решила перебрать структуру проекта, потому что там было много такого from module import *. Плюс система вложенности отчасти нелогичная, плюс связность между модулями высокая. Но все мои попытки соптимизировать все равно выдавали одну и ту же ошибку с импортами. Что же…

Я не хотела откатываться назад. Я не хотела сдаваться. Стаковерфлоу, документация, ничего не помогало. Но я отчаянно хотела найти решение для нашей задачи, так как реально часто хочется сделать нормальную структуру сервиса, а не получается из-за разного уровня запуска на локальной машине и сервере.

Моей палочкой-выручалочкой стал ответ чатгпт. Вот по истине приятно обсудить проблему с машиной. Ее можно применять как продвинутую уточку, так сказать. Ничего сильного нового она мне не посоветовала, но в конце написала мысль:
“To fix this issue, you should refactor your code to either use absolute imports where appropriate, or restructure your package so that relative imports do not need to go beyond the top level package.”

И тут меня осенило! Я базовый входной файл (у меня это lambda_function.py с обработчиком для событий) вынесла в корень сервиса, а остальное завернула в общую директорию, таким образом убрав все скрипты с относительными импортами с верхнего для сервиса уровня. В корневом скрипте же вполне ок работают абсолютные пути.

Божечки-кошечки, все завелось!

Ня! А коллег ждет кошмарный пул-реквест… Но это лучше, чем предыдущее состояние этой функции.

А еще я сдала midterm вчера, ура! 19 страниц, 686 строк latex кода! Вжух! #Python, #Работа
🔥7
Словила тут очень интересный баг в чужом коде. Рассказываю схемку.


class Parent:
def func():
pass

@converter(scheme: Dict[str, callable])
class Children(Parent):
def func():
pass


Не буду выкладывать код конвертера, но суть его логики была в том, что он брал все методы родителя и оборачивал их в соответствии со scheme, где в ключе указывалось название метода, а в значении функция, которая обработает результат в нужном формате. А потом он эти методы присваивал в соответствии с названием дочернему классу.

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

И что самое забавное, место, где возникала ошибка никак не логировалось. Там было нечто вроде:


try:
children.func()
except Exception as err:
return f“Все пошло к херам {err}”
)


Классно, да?
Используйте logger.exception(“все пошло к херам”), так вы хотя бы получите трейс исключения.
Изначально ошибку нашла путем поиска по коду текста ошибки. Добавила логов, потом увидела то, что пишут логи и очень удивилась, что вместо дочерней функции, почему-то отрабатывала функция родителя. Вот это поворот! Потом нашла этот чертов декоратор и долго тупила над его кодом, потому что - “что блин прости ты делаешь, серьезно?”. На самом деле хочется выпилить этот декоратор, но пока лишь пофиксила его логику, чтобы он использовал дочерний метод (если он существует) для обертки вместо родительского. Что за дичь, а?

И нет, я тоже допускаю ошибки в коде, иногда очень глупые. Я тоже иногда пишу диковатый код. Но такие хаки у меня вызывают крайнее недоумение. Типа вместо использования ООП сделать декоратор, который сломает логику ООП, это надо исключительно постараться. #Работа, #Python
🔥6
Я сегодня испробовала AWS SAM для работы со своим привычным стеком технологий. Сделала пока только базовый каркас из API Gateway, lambda function и основной обвязки. Планирую еще докрутить к этому sqs, DynamoDB и прочие ништяки.

Суть в чем. Это так прекрасно, что несмотря на сложности сбора корректного конфига, я с самого начала верещала от восторга от этой утилиты.
0. Установила sam cli
1. Открыла в pycharm новый проект, сразу на базе шаблона под aws sam, который базово создал мне структуру и конфиги.
2. Потом была очень долгая отладка конфига под мои нужды. Я никогда раньше не работала с aws cloudformation толком, если не считать там-сям небольшие конфиги. А тут пришлось прям погрузиться и разобраться.
3. Локальный запуск. Команда sam local start-api запускает докер-контейнер на базе конфигурации, который полностью локально имитирует окружение для функций и их эндпоинты на api gateway. Это позволяет развернуть все эти облачные ништяки на локальной машине и полноценно проверить работоспособность. Как же это хорошо. Как я соскучилась по нормальному локальному запуску, потому что привыкла уже проверять на тестовом окружении. Мне не хватит слов, чтобы передать весь кайф от такой банальной штуки как нормальное локальное окружение и полноценная автоматизация.
Теперь меня внутренне съедает мысль, что повторить такое для рабочего проекта будет крайне трудно из-за некоторых ограничений в доступах.
После всех костылей и возни с настройками деплоя я в таком астрале от этого инструмента, что я заново влюбилась в serverless архитектуру и aws сервисы. Мне все это и так нравилось, но скорее часто вопреки всем проблемам, с которыми я сталкивалась, но тут прям лавина радости и кайфа. Логи как в cloudwatch из lambda function, запущенной на локальной машине, вызвали у меня сегодня бабочки в животе, правда:

REPORT RequestId: 8bc17eab-90a0-4454-ad04-bba6a959e530 Duration: 2.86 ms Billed Duration: 3 ms Memory Size: 128 MB Max Memory Used: 128 MB

(Эта запись генерится автоматически при завершении работы функции без фактического логирования в коде, это часть обертки aws, поэтому к коду функции оно совсем не имеет отношения и нужен специальный контейнер, который имитирует обертку aws для lambda function, чтобы получить такой лог на локальной машине. Как раз всей этой оберткой занимается aws sam).

Как же я обожаю такие вещи. Тонна удовольствия.

Уйти в программирование - было лучшим решением в моей жизни. Хоть ведение технически сложных проектов будучи менеджером мне тоже очень нравилось, но тут это все гораздо глубже и гораздо интереснее. Придумывать архитектуру, искать оптимальное системное решение, разбираться в очередной технологии/инструменте - это восторг.
Лучи добра всем и удачи в своих проектах. #AWS
🔥11
Эстетика учебы в универе, современность.
Меня так прут современные инструменты! Открыла pdf на ipad учебник, захотела вставить фрагмент в конспект, выделила, скопировала и на маке вставила. Уруру. Закладки, выделения, красивые книжки с цветными графиками. Сама себе завидую :) #Математика, #Учеба, #UOL
🔥156👍1
На экзамене по математике можно использовать только одну страничку для черновиков. Оо 1 страничку на 4 часа экзамена по математике… Блин, они реально стебутся что ли?
UPD. Плохо не знать английский на хорошем уровне и учиться на нем. Как мне подсказали речь о шпаргалке, а не о черновике. А это значит, что все очень даже неплохо! Спасибо! Обожаю вас! #Математика, #Учеба, #UOL
😱2
Рабочее. У нас нет этапа тестирования. Еще мы не знаем всех юзер-кейсов. Хорошо, если задача не очень сложная и можно по требованиям догадаться как проверить результат, но хуже, если задача затрагивает целый комплекс данных и операций.
Еще наш деплой еще не до конца автоматизирован, а некоторые настройки можно внести только вручную.
Как итог, даже если внимательно и аккуратно настраивать все при выкате, проверять на тестовых окружениях, можно словить ошибки на проде.
Это была оправдательная вводная 🙂

Короче, после выката задачи, в которой я была довольно уверена, хотя она была большой и сложной, обнаружилось довольно много багов. Первый пользовательский опыт с новой версией функционала был слит в унитаз. Чет, вспомнились разработчики киберпанка.

У меня есть доступ к пользователям напрямую и я вижу о чем они жалуются в чате. По мере обнаружения проблем я их фиксила, отписываясь в общей группе о том, что я пофиксила вот это и вот это. Так вот, доктор, меня все игнорируют! При всех моих усилиях пользователи между собой: коллеги, попробуйте повторить одно и то же действие снова, у меня внезапно оно сработало успешно со второго раза! (ну да, пошел я нахер с тем, что я просто починила баги и теперь у вас все работает).

Arise! #Работа
😁4🤯2
Антипост.

Посмотрела первый сезон Врата Штейна. В процессе меня дико триггерило на аналогии командной работы в IT, при чем не могу объяснить почему, на подсознательном уровне. ГГ (главный герой), кажется, совсем не ученый, а очень харизматичный и эмпатийный лидер. Не хочу по косточкам разбирать эту анимешку, тем более, что я еще не досмотрела до конца, но мне понравилось.
А до этого с удовольствием глянула Initial D 1995 года, теперь при взгляде на старые машины, особенно японские испытываю какие-то ностальгические эмоции. Когда начинала смотреть, меня почти отпугнула старая рисовка, особенно то, что персонажей будто школьник рисовал, такие упоротые лица… Но в итоге втянулась и с удовольствием посмотрела до конца и даже заглянула в мангу.

Удивительно менялся мой вкус на фильмы с возрастом. Когда я училась в школе и все смотрели сейлормун и покемонов, разные фильмы и сериалы, я читала книжки, потому что у меня было 3 базовых канала по ТВ и не было интернета, да и не давали мне особо смотреть телевизор. Наличие компа со второго класса тоже не сильно мне что-то давало, так как у меня было к нему очень мало доступа (его или специально ограничивали или он был просто занят родителями/старшим братом). В школе я даже в видео-игры не очень любила играть, у меня плохо получалось с управлением, да и в целом я быстро теряла интерес.

После школы я пыталась догнать всех и, когда появлялась возможность, смотрела подборки лучших фильмов. Но я предпочитала кино со смыслом и вообще искала одухотворенности и просветления. Отрицала все популярные фильмы “без смысла”. Так первые фильмы марвел прошли мимо, как и многие другие.

В 22+ когда все заканчивают вузы, а мой скомканный на тот момент жизненный путь вытащил меня в рекламное агентство, где я стала руководителем после упоротого труда и быстрого познания всего на практике вместо учебы, я стала проще относится ко многому. В школе я всегда думала, что буду заниматься интеллектуальным трудом, а в итоге я и официанткой поработала, и продаваном, и в коллцентре, и горшки/полы/унитазы мыла в детском доме, и жила в разных трущобах в окружении самых разных людей. Это как-то сбило мое высокомерие и заносчивость, кажется. Нет, я не перестала считать себя умной, но стала попроще относится к себе и к окружающим, в том числе к фильмам и творчеству. Стало как-то пофиг на грамматические ошибки, сбилась гонка за одухотворенностью, я перестала рисовать и писать стихи, а начала углубляться в дизайн, менеджмент, айтишку в целом. Именно тогда я познакомилась с Марвел, начала смотреть боевики, да и вообще все подряд.

В 25+ мне переоткрыли аниме. Переоткрыли в плане того, что до этого я знала только про сейлормун и покемонов. Я познакомилась с Тетрадью смерти, фильмами Миядзаки, посмотрела Хикару и го, Самурай Чамплу, какие-то дорамы, узнала про яой как понятие, но в целом все еще была лишь ведомой по чужим вкусам, не пыталась смотреть что-то сама. Мне понравилось, но я тогда еще не втянулась в это. У меня не было особых интересов ни к чему, разве что к онлайн игре Perfect World, в которой я потратила много часов своей жизни и денег. Это было довольно азартно, но я не жалею, так как там встретила довольно много интересных людей, да и это было веселое время. #Аниме, #Жизнь, #Истории
👍5🔥5
После 30 мне повезло встретить человека, который вычистил остатки дерьма из головы и переоткрыл по сути мне мир заново. Я занялась программированием, что хотела сделать очень давно и еще проще, кажется, стала смотреть на себя и вещи / людей вокруг. Раньше я неосознанно слишком парилась на счет репутации, что можно говорить, делать, а что слишком глупо. Да и сейчас еще парюсь, но стала позволять себе больше, так сказать. Вот даже этот дневник пишу довольно откровенно, хотя для кого-то он однозначно кажется слишком детским и наивным. Так вот, помимо всего прочего, я в 30+ снова переоткрыла для себя аниме и уже влюбилась в него на всю глубину. Я не смотрю все подряд тайтлы как истинные фанаты, но я предпочитаю найти и посмотреть новое аниме, чем сериал или фильм. Я откинула нетфликс, перестала следить за новинками кино, так как они проигрывают анимешкам во всем. Я стала читать мангу и расстраиваюсь, когда у интересного аниме нет продолжения даже в манге. Я различаю манхуа (китайская), манхву (корейская) и мангу (японская) по стилю рисовки, в смысле, что я прям прониклась. И уже давно тайтлы подбираю себе сама, а не следую чьим-то советам и вкусам.

Короче, стереотипы и заложенные нам кем-то установки - зло. Без них живется как-то приятнее и полнее. UWU #Аниме, #Жизнь, #Истории
🔥9👍6
👨‍💻4😁2👍1
Сны.

Сегодня во сне меня неайтишные знакомые представили человеку, который типа мегакрутой спец в айти, профи. И наш разговор начался с того, что он мне задал три технических вопроса прям как на собеседовании. Абсурд какой-то. Он спросил про какую-то очень специфичную тулу для линукса. Не запомнила название, но ее скорее всего не существует в природе. Второй вопрос был про структуру данных, название явно указывало на то, что это какой-то вид графа, но опять же я не запомнила название и это явно тоже на самом деле не существует. И третий вопрос я не запомнила.

После того как я не смогла дать точный ответ ни на один из его вопросов, он высокомерно усмехнулся, что я так себе специалист.

В свою очередь я уточнила кем он работает и тоже сделала свои выводы. Вот и поговорили.

А в начале моего изучения программирования я закрывала глаза и у меня бежали строки логов или строки кода. Я постоянно думала о задачах и не могла нормально выспаться. Даже не ожидала, что мозг может на столько офигеть от нагрузки из-за учебы.

Не хочу это как-то анализировать, просто решила поделиться.

На работе сейчас заканчиваю сервис нотификаций на веб-сокетах, который я сделала на базе AWS сервисов lambda function, API Gateway (REST + WS), DynamoDB + UI на CloudFront + S3 (React). Очень хочу рассказать некоторые детали, но распишу уже после того как окончательно завершу задачу, а так как я ухожу в отпуск, то это по ходу будет только в сентябре.

В отпуске планирую учиться. 4 сентября экзамен по математике, сдавать будут через онлайн платформу Inspera. Уже сделала пару тестовых запусков платформы, там tinymse-редактор с возможностью вставить латекс-код, правда не самый удобный. Плюс даже есть как будто урезанный grammarly, который проверяет только орфографию, кажется. Надо подготовиться, а то нервничаю.

Купила себе домен devlogirl.com по имени текущего канала. Но пока ничего с ним не сделала. Если все же что-то замучу, поделюсь. Хы #AWS, #Жизнь, #Работа, #Учеба
🔥9👍3🤔1
Конспект по математике на английском и немного русском https://xmind.app/m/Krpc6j
Это модуль по вычислительной математике. Я закончила все темы, осталось экзамен, который должен был быть по плану сегодня, но оказалось, что он не сегодня а 21-22 числа. Что же… Хорошо, больше времени на подготовку, больше нервов.

Друзья, этому дневнику уже почти 3 года или всего 3 года. Это самый долгий срок, кажется, для моего личного проекта. При чем у меня нет конкретной цели здесь, только путь. Мне очень приятно, что здесь есть люди, которые подписаны почти с самого начала и кто до сих пор читает мои длиннопосты, зачастую не причесанные и шероховатые.

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

1. Бытовое. В отпуске внезапно сгоняла на Бали, чтобы открыть счет на wise. Цели моих путешествий удивляют меня саму. Впервые поехать на остров просветленных и серферов ради счета. Бали мне не понравился, деревня, ужасное движение, пешком особо не погуляешь. Хотя поездка на водопады с друзьями мне понравилась, еще еда на порядок вкуснее, чем тут, да и закаты на океане прекрасны! Отдельное слово о wise - офигенно удобная штука, прям такое ощущение, что этот сервис делала команда Тинькова. Плюс одна симка, плюс один номер телефона. У меня уже набрались: московский, турецкий, грузинский, малазийский и вот теперь индонезийский номера. Все приходится поддерживать в рабочем состоянии. Тык-тык между симками.
2. Бытовое 2. Попробовала сделать swift между Турцией и wise. Переводила 100 долларов, заплатила 15 долларов комиссии сверху в самом начале. Получила 65 долларов, из которых 5 долларов ушло на комиссию обработки платежа со стороны wise. Внимание, где еще 35 долларов? Я так и не добралась до ответа. Но делать еще swift-переводы расхотелось. Посмотрим как придет зп на вайс.
3. Выкатила нотификации, вернувшись с отпуска на тестовый контур. Оно работает, но я офигела как много всего пришлось задействовать, при этом кода вроде немного получилось. Реально, чуть позже постараюсь собраться и нарисовать схемку как оно работает.
4. Пока делала задачку, пришлось в регулярках поковыряться. Узнала прикольную штуку как сделать ключевые группы в шаблоне для регулярки и потом забирать значения по ключу:


compound_key_match = re.fullmatch(r"(?P<main>\w+)\[(?P<second>\w+)\]", value)
if compound_key_match:
main = compound_key_match["main"]
second = compound_key_match["second"]
)


https://docs.python.org/3/library/re.html#re.Match.groupdict

5. Я тут обнаружила, что Adobe пакет для личного использования стал вполне себе подъёмным по деньгам. Давно-давно я немного увлекалась дизайном и мне хотелось научиться монтировать. В целом даже кое-какие основы монтажа я знаю, спасибо опыту на телике. Плюс я когда-то пыталась учиться рисовать, да и планшет брала с пером, так как хотелось иногда снова попробовать рисовать. В общем, не знаю куда, но хочу еще впихнуть в себя изучение графики и тп, хочется подизайнить, порисовать что-нибудь. Поизучать современные возможности графического ПО.

Пока все.

PS. Кайфанула от One Piece от Нетфликс. #Жизнь, #Конспекты, #Математика, #UOL, #Python
🔥12👍2👏1
Готовлюсь к экзамену, разбирая задачки с прошлых экзаменов, которые специально для этого приложены к курсу. Так вот загадка из задачки:

ii. 99 people take a test. Their scores out of 100 are:
56, 79, 77, 48, 90, 68, 79, 92, 7156, 79, 77, 48, 90, 68, 79, 92, 71
Work out the mean, median, and mode of their scores, and show your work.

Хм, это какой-то подвох? 99 человек и 18 результатов, остальное сделать нулями? Да нет, бред какой-то. Да еще и запятая пропущена… да еще и о! числа задублированы 2 раза! А, так это 9 + 9 человек! Ха… В общем квест - сначала исправь ошибку в тексте, а потом реши задачу… #Учеба, #UOL, #Математика
🤯5🌚2
В платформе для экзамена Inspera есть такой плагин для формул. Частично он понимает латекс, но я никак не могу понять как с его помощью записать матрицу( Бином смогла записать, базовые всякие штуки - норм, но вот матрицы - никак. Может, кто знает как это можно сделать? Чет извращаться таблицами не очень хочется :( #Учеба, #UOL
Чем ближе экзамен по математике, тем больше у меня паника, что я ничего не смогу. Смотрю на задания прошлых лет и кажется, что я ни одно из них не смогу решить без помощи интернета. Я прорешала один вариант из трех, но с большим трудом. И в целом, глядя на каждое задание, мозг начинает отключаться из-за мысли, что я не справлюсь. Успокаивает только мысль, что надо набрать хотя бы 39 баллов из 100, чтобы сдать.
Очень не хватает практики, очень мало было задач, чтобы набить руку. При этом тем очень много в одном экзамене. Я понимаю, что часть из этих тем должна была остаться еще со школы, типа тригонометрии, базовой работы с функциями и графиками, и это сугубо моя личная проблема, что школьную программу я почти не помню, хотя у меня не было проблем с математикой в школе.
Но пофиг, я справлюсь, наверное. Помню как в школе сдавала физику по ЕГЭ. Я нифига не учила физику всю дорогу, не очень мне было интересно, поэтому готовилась в последний момент и так себе. Пришла на экзамен в жутчайшем стрессе, меня потряхивало, пока решала задачи, была уверена, что завалю экзамен и вышла из него даже раньше времени, потому что понимала, что больше я не смогу ничего сделать. Пока ждала результатов мысленно попрощалась со всеми своими планами на поступление. Одновременно одноклассник сдавал биологию, и вот он был 100 процентов уверен в своем результате. Хех. Я тогда набрала 63 балла, а вот он завалил на 30+ баллов вроде бы. Это уже в пересчете на 100-бальную. Мне хватило на поступление и даже с общагой, хотя балл по математике у меня тоже был невысоким - 74. Только я все равно в итоге скипнула тот вуз, потому что не хотела быть инженером, ха! Мне тогда хотелось творчества, и вот я здесь.

Ладно, 39 баллов наберу!, это же не проблема, правда? Я все же делала чет, готовилась, не могу же я завалить, это ведь надо быть полным раздолбаем, что завалить, так ведь? 🙂

Знаете, что самое коварное - результат будет только через полгода. Ты такой уже все забыл, булки расслабил и хопа - получите-распишитесь, идите на пересдачу. #Учеба, #UOL
🔥10😨2🤗2😱1😢1
Сдача экзамена была забавной.
Писала и думала, что за мной следит камера и пишет звук, старалась вести себя тихо. Читала, что зачитывание вслух вопросов может стать подозрительным и добавить “флаг” к твоей сдаче. А я иногда проговариваю для себя вопрос, чтобы лучше понять. Пришлось делать это максимально тихо)
Иногда пила воду и думала о том, что не слишком ли шумно я это делаю и как это выглядит для камеры.
Время пролетало очень неравномерно. Вот, я смотрю и прошло только 20 минут, вот 40 минут, вот час, а потом раз и осталось 40 минут!
Я боялась, что буду долго возиться с формированием pdf для сдачи, поэтому за 20 минут до конца дорешала самую жирную задачу из оставшихся, которые я не успела, и пошла фоткать свои рукописи.

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

У универа были требования к калькулятору, к тому, чем вообще можно и нельзя пользоваться, но по факту пришлось соблюдать только такие вещи как тишину в процессе, нельзя было наушники одевать, нельзя пользоваться браузером. Калькулятор даже не видно на камере, как и записи, которые используешь или не используешь. Правда, это первая сессия, в которой они использовали Инсперу.

Кстати, не обнаружила ошибок в вопросах к экзамену! Все задания вроде были адекватными. Но я думаю, что набрала меньше баллов, чем на midterm, потому что много заданий не успела сделать. Я старалась не нервничать и не торопиться. Перепроверять свои ответы, потому что я часто допускала ошибки по невнимательности на какой-то ерунде. Что же, в одном я уверена - экзамен я не завалю, если не случится чего-то непредсказуемого, просто балл будет невысоким.

Поздравьте меня с получение статуса полноценного студента, так как после этой сессии с меня сняли статус Perfomance-based-admission. Этот статус назначают всем, кто поступал без экзаменов, у меня даже IELTS не требовали. Для таких студентов в первую сессию дают взять только 2 предмета, а для обычных студентов доступно до 6 предметов. Если первые два midterms сданы успешно, то статус снимали. Правда, теперь они обновили правила и снимают статус только после успешной сдачи всей сессии, а результаты экзаменов приходят только к концу следующей сессии, поэтому текущий поток сможет снять этот статус только через год. Это жесть на самом деле.

После экзамена и обновления статуса мне открылась наконец регистрация модулей для следующей сессии. Да, тут есть требования сколько и какие ты модули должен успешно закончить для получения диплома, плюс какие конкретны модули идут для какой специализации, но во время учебы ты сам выбираешь какие модули проходить, в каком порядке и количестве (но не более 6 за сессию как писала выше). На эту сессию я взяла 3 модуля, а четвертый хочу перекрыть за счет курса Google support с курсеры, который они засчитывают вместо своего модуля How computer works. Это тупо дешевле, интереснее и проще, да и я его почти закончила.

Мои новые модули:
⁃ Вторая часть введения в программирование. Сложность 6 из 8 по оценкам других студентов, но вероятно это сложность для тех, кто не программировал до этого. Сдача проектом.
⁃ Дискретная математика. Сложность 7 из 8 (сложнее только Основы CS, даже интересно почему они такие сложные). Пройденный модуль математики оценивался в 4 из 8. Экзамен. В общем, меня этот модуль несколько пугает. Что ж…
⁃ Алгоритмы и Структуры данных, часть первая. Сложность 5 из 8. Экзамен
Короче, из 8 модулей первого вводного блока, я выбрала 3 довольно сложных уровня, но очень надеюсь, что для меня будет болью только математика. #Учеба, #UOL
🔥4👍31👏1😁1
После следующей сессии станут доступны модули следующего блока и вот там есть довольно интересные предметы. Вообще, что мне нравится в этой программе - это то, что набор предметов прям хорош. Если не считать вводное программирование на JS, которое мне было не очень интересно, то в целом картинка в перспективе интересная. И по-честноку, ну прикольно же свой платформер запилить на старте. Да и математика в плане подбора тем - была хороша. То есть, все темы в целом очень и очень годные в плане специализации. Я не жалею, что вписалась. Все предыдущие проблемы теперь выглядят незначительными шероховатостями, потому что, думаю, универ хорошо меня бустанет в итоге.


PS. Попробовала исправить свой пост с помощью чатгпт, но он его обрезал и сделал каким-то механическим. Хнык. Оставила как есть, со своими несовершенствами и простыней текста. Страдайте! #Учеба, #UOL
🔥81👍1
Добила по-быстрому между универскими сессиями сертификат Google IT Support. https://www.coursera.org/account/accomplishments/professional-cert/FUCRAEP9UFVC
Мне в нем больше всего понравились два модуля:
⁃ The Bits and Bytes of Computer Networking. Отличный блок про устройство сетей. Прям годно для базового понимания.
⁃ IT Security: Defense against the digital dark arts. Тут про безопасность. Хоть я его и пролетела буквально галопом, но он отлично идет в дополнению к блоку про сети, так как содержит много всего про разные способы атак и защиты сетей.
Тут мои конспекты:
https://xmind.app/m/qYXD5G
https://xmind.app/m/Cx3tiK - тут далеко не все, что было в курсе, так как я не все конспектировала. #Курсы, #Конспекты, #Учеба
🔥10
gzip

Я тут познала gzip.

Впервые уперлась в ошибку из-за лимитов lambda function на размер payload https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html. Суть в том, что лямбда не хочет отдавать больше 6MB за раз. Скажете, а нафига тебе так много? Можно ведь на s3 сложить и с него потом раздать, но суть в том, что тогда либо s3 должен быть публичным, либо опять же надо делать проксю, которая будет отдавать из s3. Чисто технически да, так и надо сделать, но я пока сделала временное решение через сжатие, которое потребовало буквально лишь пары строк кода на бекенде:


import gzip
import json
from aws_lambda_powertools.event_handler import Response


@app.get(“path”)
def some_route():
data = json.dumps({“result”: “some result”}).encode("utf-8")

return Response(
status_code=200,
body=gzip.compress(data),
content_type="application/json",
headers={"Content-Encoding": "gzip"},
)


Мы используем aws_lambda_powertools для роутинга, ну и другие фишки этой либы для работы с лямбда функциями.

Заголовок Content-Encoding дает браузеру понять формат респонса и браузер его автоматически распаковывает, поэтому никакой обработки на стороне фронтенда не требуется, при этом размер данных сократился в несколько раз, что позволило войти в нужные лимиты.

Чуть позже буду менять логику, разобью респонс на части, но как хотфикс текущее решение сойдет.

Да и в целом по-моему прекрасная опция поджать контент. Странно, что раньше я о ней не знала.


PS. Балдура прекрасна! Пока межсессионная тишина можно поиграть.
PPS. Что за мода убивать классных персонажей пошла в анимешках/манге? >_<
“На небе и на земле, лишь я один достойный!” #Python, #AWS
🔥11