Дневник разработчицы
406 subscribers
111 photos
9 videos
14 files
145 links
Откровенные истории о проектах, работе, учебе и открытиях в мире программирования. Присоединяйтесь и вдохновляйтесь вместе со мной!
Download Telegram
#Жизнь #Сингапур
Я все время удивлялась тому, какие тут воспитанные дети. Очень тихие, никто не бесится. Сидишь в кафе, там почти за каждым столом по ребенку разных возрастов, а то и по несколько, но при этом тихо и спокойно.

Так вот, довольно известный факт, что в Сингапуре применяются телесные наказания. Но кроме того, они оказывается разрешены и в школе. А на местном маркетплейсе Лазада продают специальные трости для наказания детей. https://www.lazada.sg/products/pdp-i2439777605-s14446444099.html
Отзывы…
😱5🔥4🤬2
#Жизнь
Впервые нашла у себя седые волосы. Они незаметны и в начале мне даже показалось, что это просто такой блеск. Докопалась и таки выдернула один такой, рассмотрела и поняла, что он и правда седой.

Я понимаю, что я не выгляжу как в 20, я уже пережила всякие мысли типа, что после 30 жизни нет и тп. Я понимаю, что я уже ближе к 40, чем к 30. Но все ж. Как-то грустно немного.

Я все еще чувствую себя девчонкой, а родители в этом возрасте переехали из Архангельска в Великие Луки с двумя детьми и собакой. А я в Сингапуре, работаю и учусь в универе, еще 2 сессии впереди. А потом еще и магистратура, наверное. И вообще ощущаю, будто все только начинается. Какие к черту седые волосы?
7👍3😁3😢3
#Учеба #UOL
Отправила очередной проект по учебе. У меня он так тяжело шел, что я несколько выходных много прокрастинировала и мало делала, в итоге пришлось сидеть до 5 утра в день дедлайна, чтобы закончить его.

Самое противное в этом проекте - это фреймворк, который надо использовать p5.js без npm, сборщиков и тп. Просто куча функций из глобальной области видимости с такими названиями как text(), image() и тп. Попробуй случайно не переопредели это.

Помимо этого, ты не можешь использовать обычный html и верстку, это все кастомное. Сиди с канвасом, считай x, y, добавляй отступы, все сам. Нельзя просто изображение с камеры запихнуть в html, надо делать это в глобальном канвасе. Все их примеры использования далеки от нормального программирования. При этом в требованиях к работе - вы должны писать профессиональный код и тп. Блин, чуваки, ваш подход устарел и в корне непрофессиональный, о чем вы вообще?

Ладно, это просто универ, учебная работа. Хотя сам проект мог бы быть довольно интересным. Как я уже писала, я подобное делала в cs50 и там было гораздо круче.
https://cs50.harvard.edu/x/psets/4/filter/more/
🔥62👏2
#Жизнь Рабочее место.
2🔥268👍2
Week_2_Written_communication_skills,_Part_2_Assertive_communication.md
10.3 KB
#UOL #Учеба Ничего себе, в новом модуле универа прям софт-скиллам учат, про STARR рассказывают и тп.
🔥31🤩1
#Учеба
Прохожу вот этот курс от IBM, чтобы зачли в универе как один из модулей https://www.coursera.org/professional-certificates/ibm-data-science
Делала курсовую по визуализации, впечатлилась от фреймворка dash https://dash.plotly.com/, он нужен для того, чтобы датасаентисты клепали дашборды. Под капотом у него фласк, реакт и куча всякого замешано. Можно писать html на питоне, создавать шаблоны для динамических страничек. Прикол в том, что он умеет подгружать данные без перезагрузки страницы при изменении фильтров, но весь UI ты спокойно пишешь на питоне. Найс!
Код на курсе, конечно, был говно с точки зрения структуры, но я если честно ради фана потыкала бы в этого зверя еще.
Еще забавный момент, что работу проверяло с помощью AI. LLM изи поставила мне максимальный балл, что очень порадовало.
Продолжаю проходить этот курс, сейчас на 9 модуле из 12. Хех, чуток осталось.

UPD. На сколько же любой курс проще, чем курс по ML от Яндекс и МФТИ! Я прохожу текущий курс и все еще вспоминаю попа-боль, когда проходила их курс, который я так и не прошла до конца, к сожалению.
🔥101
#Работа

https://www.ks.uiuc.edu/Research/namd/mailing_list/namd-l.2020-2021/0138.html
Когда вместо стаковерфлоу или чатгпт, надо читать чужие переписки, чтобы решить проблему.

Короче, суть проблемы. Вот есть программа NAMD, написанная на С/С++. Для нее сделали несколько сборок - для линукса, для кластера, для запуска с CUDA. У второй версии нет поддержки ARM и макоси, а вот в третьей версии есть. Я использую третью версию, но на сервере мы используем вторую, потому что она вроде как считает точнее, чем третья.
Я локально проверила, что у меня на машине работает. Залила на сервер, у меня все отработало успешно, но чет файл с результатами пустой. Я открываю логи, а там в info потоке, даже не в потоке ошибок вижу следующее:

FATAL ERROR: Pair interaction calculation is not supported in CUDA version

FATAL!!! фатал, такой фатал, но скрипт выполнился успешно.

Они не поддерживают некоторые фичи в версии с CUDA. Что ж… ААААААААААААААА!
Придется загружать две сборки с кудо и без кудо, чтобы жонглировать ими. Как же горит.
🔥4
#Tools
Когда микрофон уже пришел, а вот лапа для него еще нет.
На фото второй стакан из-под кофе под эти нужды, в первом я неудачно вырезала дырку и он сломался.
Забавно, что громкость голоса стала лучше после того как я поменяла usb-c, по которому был подключен усилитель к ноутбуку.
🔥5👍1
#Работа #LLM
Решила ввести новый тэг, потому что #ChatGPT уже одна из, а не единственная llm модель. Так вот.

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

В целом идея мне очень нравится, в голове сложилась сразу картинка как это могло быть организовано в корпорации, как это должно быть централизовано, но все оказалось прозаичнее. Никакой инфраструктуры и процессов под это еще нет. Большая корпа к этому вопросу подошла как - кто-нибудь, сделайте что-нибудь. На самом деле я даже удивилась этому, потому что в компании очень много разного ML, работы с данными и тп. В целом и в сторону llm есть уже корпоративные подписки на копайлот и чатгпт.

Нам дали доступ еще к инструменту, который позволяет внутри задеплоить локально модель с https://huggingface.co, cобрать своего агента в очень простом редакторе, похожем на https://flowiseai.com/, ну и задеплоить свое приложение. Я посмотрела на это чудо, нашла опубликованную модель и показала руководителю затраченные ресурсы, где на модель выставлено 50 гигабайт оперативки. Пояснила ему, что будет очень дорого, если каждая команда будет под свою задачу публиковать свою модель. Плюс, что было бы еще неплохо иметь возможность получить токен для использования корпоративной большой модели.

Как я сама это видела? Я думала, что у компании будет центральный агент с возможностью подключения разных MCP и добавления их во внутренний маркетплейс. Я думала, что они сделают понятный стандартный процесс для разработки и публикации этих MCP, а также возможно для создания своих агентов. Но пока такого нет. Не уверена, что кто-то этим занимается. На предложенной платформе я увидела несколько навайбкоженных демок индусами из поддержки скорее всего.

На этой неделе будет встреча с гуру AI в компании. Даже интересно, что это будет.

Я пока попробовала локально запустить mcp на базе сваггера нашей основной платформы. Я использовала awslabs.openapi-mcp-server. Оно, конечно, запустилось, но с ошибками и там по идее надо думать на счет промптов и разделения инструментов.

В целом, задача интересная, особенно тем, что в корпе пока нет ничего и все только начинается. Даже жаль, что мы сами ничего не предлагали раньше.
5
#Учеба #UOL
Как же иногда грустно находить такие артефакты в лекционных материалах университета. Я не обращаю внимание на разные мелочи и проблемы, но вот такие вещи - прям режут глаз.
⁃ неиспользуемая переменная
⁃ использование built in названия для параметра
⁃ использование списка как дефолтного значения для аттрибута функции.
Как так то?(
😁7👍2
#Учеба #UOL
https://coursera.org/share/d880563940415bb7815b3393776a273e
Наконец добила один из двух сертификатов, которые нужны взамен модулям в универе. Просто ура. Про курс ничего не скажу. Меня не особо впечатлил, но и не разочаровал. Нормальный курс.

Начала второй https://www.coursera.org/professional-certificates/ai-engineer#courses
Не верится, что в универе осталось всего 2 сессии. Учусь последнее время просто на каком-то автомате - надо, значит надо. :)
🔥8👍3❤‍🔥2
#Работа #AWS S3
Недавно на работе добавила использование пары фичей в проекте для работы с S3:
- Пагинация для получения объектов. Делается легко с помощью https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/get_paginator.html
- Получение списка директорий в конкретной директории с помощью первого метода с указанием Delimiter="/" и использованием из респонса CommonPrefixes для получения директорий.
- Получение подписанного s3 url для того, чтобы можно было скачать файл, вместо того, чтобы раздавать его через лямбда функцию. https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/generate_presigned_url.html Есть еще подобное для загрузки файла сразу в S3.
Все три фичи очень простые, но очень полезные. Работая с S3 уже 5 лет, я дошла до этих методов только сейчас. У меня к самой себе вопрос - как так? Но на самом деле, когда находишься в постоянном потоке легко пропустить какие-то очевидные и простые вещи.
👍3🔥3
#Работа
Недавно в новой версии хрома ужесточили политики безопасности и наш весьма специфичный кейс выстрелил нам в ноги так, как никто даже не ожидал.
Внутри корпоративной сети начало блокировать запросы из iframe в другие домены, хотя во внешнем интернете и вне iframe все работает нормально. Но внутри нашего контура внезапно браузер лочит запросы как CORS с ошибкой: Permission was denied for this request to access the 'unknown' address space.. А у нас все пользователи сидят внутри сети и используют эти iframe. Как временное решение я сделала баннер, чтобы пользователи могли открыть наш UI в новом окне и продолжать использовать, потому что тогда все работает нормально даже внутри сети.

Хорошо, что за эти 3 года работы мы успели перенести все наши сервисы на общий UI, поэтому хотя бы здесь не было проблемы обновить. Плохо, что не все бекенд сервисы еще перенесены на новые рельсы CICD.

Также, мы до сих пор использовали домены амазона, не привязывая их к внутренним. Все внутренние домены работают только внутри сети. Чтобы получить публичный домен, нужно пройти определенные процедуры, которые никто не хочет делать.

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

Коллега сказал, что они проверили все сервисы на тестовом контуре и все работает хорошо, даже на двух разных поддоменах одного домена. Я была удивлена, потому что знаю, что если нет явного разрешения в заголовках на использование всех поддоменов в рамках конкретного домена типа “*.domain.com”, то такая схема не должна работать. Но коллега заверил, что все хорошо, они проверили. Я наивная чукотская девочка поверила ему, мы завели домены под наши сервисы, привязали, катнули на тестовый контур и порадовались, что все работает.

На радостях новые домены, измененные в UI для запросов к бекенду, я задеплоила на демо-контур. И… увидела, что ничерта не работает. Ахах, ну конечно, сфигали им работать. После этого до меня дошло, что просто на тестовом контуре для того, чтобы можно было цеплять бекенд для разработки UI стоит разрешение на все домены. Именно поэтому на тестовом контуре все завелось без изменения бекенда.

Что ж, теперь мне предстоит задача обновить все бекенд сервисы для использования новых доменов. В целом это надо обновить общий слой, а дальше просто указать новую версию общего слоя и передеплоить весь зоопарк лямбда функций, которые мы используем для UI.
🤯4🔥2
#LLM
Claude и чтение скриншота с ошибкой:
⁃ Переврал домены в указанных урлах, приплел gcloud, когда там был только aws.
⁃ Переврал текст ошибки. Видим CORS - пишем стандартную cors ошибку, делаем стандартные подсказки. Ничего, что ошибка другая.
⁃ Прошу исправить текст ошибки, он мне снова врет, снова придумывает что-то свое.
⁃ Прошу еще раз прочитать ошибку, указываю пару слов из текста ошибки. Он снова врет, снова приплетает gcloud, когда его на скрине и близко нет.
Психанула, сходила в chatgpt. Тот выдал сразу все четко.
А мне всего лишь лениво было открыть внутреннюю сеть, авторизоваться и открыть браузер, чтобы скопировать текст ошибки из консоли.
Что за дичь?
7🥴1
#Работа
Сижу, готовлю обновление для новых доменов. Решила глянуть что-то на проде. Зашла в систему, обновила хром, открыла iframe - все снова работает без каких-либо изменений…
Вспомнила шутку про вагоны.
https://www.youtube.com/watch?v=23fBoqQxSgQ
😁51
#Работа
Кто молодец? Я молодец ^_^
Раскатала на прод новые домены.

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

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

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

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

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

Потом появился человек, который расширил наши границы возможностей, показав, что можно сделать кастомный пайплайн в корпоративном дженкинсе и открыл для меня тулу https://www.serverless.com/, когда я смотрела на SAM и планировала использовать его.

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

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

Теперь вот история с доменами. В такие моменты прям ощущаешь как важно иметь нормальный CICD, когда у тебя больше 100 сервисов. Где-то половина сервисов имеют свой UI, и их все надо было обновить. Я сегодня вмержила 2 пулреквеста и перекатила около 50 сервисов, 12 из них запуском скрипта с локальной машины.

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

Кстати, проблема с новыми ограничениями, кажется, решилась не на уровне обновления браузера, а на уровне обновления настроек dns внутри корпоративной сети, но нам об этих изменениях никто не рассказал. Что ж. Давно пора была привязать свои домены на самом деле. Но не факт, конечно, что они будут работать стабильнее.
👍73❤‍🔥1