Вы не вошли.
[левел-ап][айти]
Продолжаю работать над задачами в стартапе, когда выдаётся время.
Сделал вкладки, сделал так, чтобы можно было переключаться между ними и видеть контент.
Работал над компонентом, который делает запрос к БЭ и выводит список объектов. Долго не мог понять, почему получаю 400 в респонсе, всё правильно же. После дебага понял, что вставил в запрос не тот токен
aws-иблиотека очень удобно даёт доступ к сессии, откуда можно вытащить токены юзера: auth, access и refresh. У каждого своё применение, я экспериментировал с ними, и как-то не обращал внимания на ту строчку кода, что возвращала не тот токен. Зато теперь работает, можно залогиниться и увидеть список объектов.
Наш дизайнер сделала практически уже финальную версию продукта, и я начал работать над стилями. Тут хватает своих трудностей начиная от попыток сделать максимально похоже на то, что в фигме и заканчивая тем, как всё отображается в разных браузерах.
Использую Tailwind, мне он кажется удобным и быстрым в плане создания всего с нуля.
Вечером заканчивал работу, как раз намучался с фоном - чтобы он постепенно выцветал, чтобы выцветал белым, в нужном направлении, но чтобы в самом начале был ярким. Остался почти доволен. Пошёл пройтись. Любовался темнеющим небом с последними красками заката.
Пришёл обратно, открыл ноутбук - фона нет
Я не знаю, почему он прекратил отображаться.
Но всё равно закоммитил свой прогресс. Буду разбираться завтра.
[дыбр][off-road]
На позапрошлых выходных ездили на курс использования лебёдки на внедорожниках и вытаскивания застрявших.
Курс отличный: подробно объяснили физику процесса, использование блоков, расчёт нагрузки и геометрические конфигурации, когда пытаешься вытащить другую машину. Показали много разного оборудования и объяснили, как выбирать, как и когда использовать, безопасность.
Много разных способов застрять и что может пойти не так при вытаскивании. Не надо позволять тросу лебёдки скользить в руках, когда сматываешь. Стальной трос может иметь волокно, которое порвалось и торчит. Ещё трос может подобрать в себя колючку от кактуса, всё это может проткнуть перчатки. Электрический кабель от лебёдки надо привязывать на бампер, когда не используешь, иначе он может упасть вниз - в грязь, пыль, и придётся выковыривать всякую фигню оттуда, застрявшую между маленькими штырьками.
"Знаете, откуда мы это знаем?" - То и дело справшивал инструктор.
Потом была практика - поехали на тренировочную площадку, и инструкторы конструировали сценарии, когда кто-то застрял. Сначала было просто - встать прямо и сзади и вытащить тросом.
А потом - машина застряла на подъёме, впереди неё дорога расходится по сторонам, буквой Т, а за верхней перекладиной - обрыв. И вот тут пришлось подумать, рассчитать нагрузку, как использовать блоки и под какими углами встать.
Рассчитали. Потянули.
Застрявшая машина проехала три фута, а дальше никак
Не хватает мощности. Подумали, попробовали другую конфигурацию. Снова сначала немного, а потом никак, и одна из вытаскивающих машин уже начала двигаться. Надо бы другой угол, а места нет, сзади лава "скалы". В общем, время вышло, и инструктор показал конфигурацию - оказалось, мы не там прицепили блок.
Встретили пару из Германии (они уже давно живут здесь), которая приехала на микроавтобусе, типа Спринтер, оборудованном для того, чтобы путешествовать. Жена сама сделала классную мебель, а муж - электричество и воду (для готовки и пр).
Автобус очень удобный внутри, но неудобный как внедорожник - низкий, длинная база, высокий и узкий. Но и для автобусов хватает красивых и [относительно] диких мест.
Так что всё было очень классно, много полезного, понравилось. Но также очень жарко, и я приуныл под конец, хоть был в шляпе и много пил.
анон-левел-апер
На позапрошлых выходных ездили на курс использования лебёдки на внедорожниках и вытаскивания застрявших.
Вау и интересно и очень полезно. Как здорово, анончик.
Вау и интересно и очень полезно. Как здорово, анончик.
Ещё как! Спасибо))
[левел-ап][айти]
Остался почти доволен. Пошёл пройтись. Любовался темнеющим небом с последними красками заката.
Пришёл обратно, открыл ноутбук - фона нет![]()
Я не знаю, почему он прекратил отображаться.
Но всё равно закоммитил свой прогресс. Буду разбираться завтра.
Исправлено! Я просто случайно убрал запятую в строке со стилем
Для своего приложения сделал два новых компонента: форма добавления класса с возможностью также добавить ему расписание и форма добавления нового студента.
Едва я закончил и протестировал их, довольный собой, как сразу же понял: мне нужны компоненты для управления всеми классами и всеми студентами.
Должен быть список существующих с возможностью отредактировать, удалить, добавить новых. А мои компоненты для создания должны быть модалами(окошками), которые открываются по нажатию кнопки.
Задался вопросом, как лучше задизайнить модалы, где должна быть функция, отправляющая запрос на БЭ, учитывая, что список классов и студентов должен обновляться сразу после создания.
Работаю.
анон-левел-апер
[левел-ап][айти]
В своём приложении сделал форму, где можно увидеть расписание класса по дням недели. Сделал кнопку для удаления - кликаешь на слот со временем, и слот удаляется.
Думал, что сделаю быстро и легко. Но что-то пошло не так.
У меня было отличное состояние потока в начале и середины недели, меня несло, я был счастлив и очень вдохновлён, и сделал много запланированного для этого приложения. А в пятницу я понял, что устал
И решил просто сделать удаление. Чтобы ты в открытом окне (модале) нажал на удаление слота, и слот бы удалился из базы и из UI, прямо из открытого окошка бы исчез.
Сделал, как я думал.
Нажимаю на кнопку, fetch запрос на удаление успешен.
А в UI слот так и висит, а должен исчезнуть.
Ну приехали.
Начал дебажить.
Вижу, что какая-то фигня в функции, которая обновляет переменную состояния для расписания - якобы нет в ней такого ключа.
Голова еле соображала, хотелось спать. Быть может, надо было кодить чуть менее интенсивно на этой неделе и больше отдыхать лел.
В пятницу понять причину не смог и вечером уехал фехтовать.
Рано утром сегодня дебажил снова.
Дебажил-дебажил.
А потом меня осенило.
Что вместо одного ключа я передаю в переменную состояния, хэш-таблицу, другой. Вместо номера дня передаю айди класса
Почему-то в пятницу мой уставший мозг решил, что в переменной состояния у меня абсолютно все расписания, сгруппированные по классам.
А у меня там расписание для одного конкретного класса, сгруппированное по дням.
Фикс занял пару строчек. Дебаг - несколько часов.
Мораль: не дизайнить и не писать новые фичи, когда чувствуешь, что устал и плохо соображаешь.
Ваш Кэп.
анон-левел-апер
[левел-ап][айти][нытьё]
Делаю компонент для расписания классов - там можно посмотреть их, добавить, удалить.
В выборе нового дня сделал выпадающий список с именами дней, на которые класс не поставлен.
Всё было хорошо, но появилась проблема.
Кнопка ОК, общая для всего компонента, которая его закрывает окошко с ним, находится поверх этого выпадающего списка.
Я промучался половину дня со стилями, пытаясь поместить её под список. Слои, манипуляции тем, в каких отношениях компоненты между собой, родительские компоненты.
В итоге я вдруг понял, что можно просто показывать эту кнопку только когда списка нет, conditional rendering
И это заработало!
Правда, была проблема с тем, что общее вью прыгало вверх-вниз при открытии и закрытии списка, но это потому, что меньшее вью кнопки появлялось и исчезало. Я тогда оставил вью кнопки на месте, а саму кнопку сделал невидимой. Скачки прекратились.
Но появилась другая проблема: некоторые кнопки списка заблокированы для нажатия невидимым вью - я сначала не смог нажать их, чтобы выбрать день. Открыл Inspect в тулах разработчика в браузере, ну и там оно.
Я тогда сделал так: по нажатию кнопки, что открывает список с днями, это вью сохраняет свою высоту, а ширина становится минимальной.
Теперь всё работает, как я хочу.
Но у меня разболелась голова.
Наверное, со стилями лучше работать уже после логики, особенно если они не так просты.
[фехтование]
Маэстра начала постепенно учить и другому оружию - шпаге и сабле, не только рапире. И это здорово, потому что сплошная рапира месяц за месяцем - это скучно. Да, постоянно приходят и уходят новички, надо начинать сначала, в группе люди разного уровня, а маэстра одна. Но наконец!
Это забавно, когда первый-второй урок по той же шпаге, и ты думаешь, что вдруг сейчас будет что-то сложное, что ты пока не знаешь, и тебе нервно, а маэстра показывает что-то начальное, вроде укола в локоть или запястье.
Ок, это не самая простая вещь, но многие уроки именно шпаги начинаются с этого, когда подразумевается, что студент уже освоил основы фехтования с рапирой.
Ты повторяешь упражнение три-пять раз, как делал уже много раз, потом ротация, а остальные студенты хорошо если попадут в локоть маэстре один раз, остальные - далеко мимо. При этом не все новички в фехтовании, но они, видимо, работали исключительно с рапирой.
И потом они подходят и спрашивают, сколько лет я уже в фехтовании, на что я отвечаю, что где-то парочку, а со шпагой по идее меньше года. Кто-то явно расстроенный, и я говорю, что ничего страшного, это же первый раз, со временем и практикой всё получится.
Также маэстра таки снова втянула меня в обучение преподаванию!
Ок, у неё были только опытные студенты, и нас было чётное число, так что она сказала, что мы попробуем более продвинутые вещи и будем меняться ролями. Это было неплохо, и мне было даже интересно, потому что надо было сообразить, как координировать свои действия как учитель, как спровоцировать студента на нужную реакцию в нужное время. Так что унывать и бомбиться было не из-за чего, и это хорошо. Жаль, этот урок был на рапирах.
Я хочу больше моей любимой шпаги
[дыбр]
На выходных сходили в классное заведение с японским барбекю.
Приглушённый свет, столики отделены друг от друга стенами чуть ниже человеческого роста, в середине каждого столика - газовая горелка, накрытая решёткой.
Заказываешь несколько позиций из меню - мясо, овощи, морепродукты - тебе их приносят сырыми в маринаде, зажигают горелку, и ты сам их готовишь до той степени, что нравится. Но официанты рекомендуют оптимальное время.
Мы заказали несколько видов говядины - форма, толщина, количество жира (откуда эти куски), креветок, овощи и грибы.
Мясо только что с газа огня было очень вкусным
Потом зашли в соседнюю кафешку, и я взял молочный чай с жасмином. Что здорово - можно выбрать количество сахара или вообще от него отказаться.
анон-левел-апер
Отредактировано (2025-08-27 02:43:16)
[левел-ап][айти]
Когда появилось время, сделал для стартапа
1) стартовую страницу - добавил фон и логотип к форме логина
2) заголовок с названиями таб, кнопкой для просмотра аккаунта и разлогинивания (в выпадающем списке), переключение между табами, и это всё юзер видит после логина.
На самой первой, дефолтной, табе список объектов с бэка, который получается по запросу с токенами залогинившегося юзера.
Самым сложным было приблизить расположение объектов и их дизайн к тому, что дизайнер сделала в Фигме.
Но я сделал очень близко и узнал много нового.
Про настройки (контраст, например), который можно применять к картинке в Tailwind. Про градиент и прочее.
Попрактиковал React, который обычный, просто для web.
Ещё сложным было кастомизировать форму логина aws amplify - добавить тень, убрать границы, сдвинуть надпись, поменять надпись на кнопке восстановления пароля. Я так и не смог пока кастомизировать так, как задумано, значок с глазом для показа пароля.
У aws amplify в доках написано - а вот вы юзайти объект темы и там задавайте стили через токены компонентов!
Я сделал, а стилей не видно.
Нуууу, стили не для всех компонентов ещё поддерживаются. Почему? Ну пока вот так. Но вот вам список всех токенов для компонентов. Какие из них работают для стилей, а какие нет? Угадайте сами!
Исхитрился и некоторые вещи сделал через старый добрый CSS файл. Но всё равно некоторые вещи не получается сделать, хоть убейся
Как же я люблю open-source
Но другой настолько же удобной библиотеке у нас для вас нет
Ну ок.
Подозреваю, что придётся отказаться от компонента формы логина и сделать свой компонент. Это всё ещё можно сделать с использованием встроенного функционала для управления сессией юзера и всем прочим, ради чего я и выбрал эту библиотеку.
Будет любопытно попробовать и посмотреть, получится ли воспроизвести Фигму на 100% или хотя бы 99%.
[дыбр]
Внезапно заметил, что где-то в 8 уже темно. Так почти прошло календарное лето
У нас оно в этом году было не особо жарким, и я не жалуюсь, разве что иногда утра бывали серыми и унылыми, а по вечерам дул противный ветер, от которого ёжишься.
Зато не было жарищи, хоть она у нас и сухая.
Впереди ещё как минимум целый месяц летней погоды, просто темнеет всё раньше.
анон-левел-апер
[левел-ап][айти][стартап]
Показала стартовую страницу с логотипом и логином. Всем понравилась Сказала, что попробую ещё другой подход, чтобы полностью кастомизировать пару полей, на том и порешили.
Столкнулась ещё с таким: логинюсь на красивой стартовой странице, открывается дефолтная вкладка со списком объектов с бэка, а фон стартовой страницы так и висит.
Логично, потому что он сделан фоном. Форма логина исчезает после того, как юзер войдёт, и появляется другой контент, а изменение фона не было прописано.
Что с этим делать?
Решила пока не возиться с навигацией - я не очень уверена, что она нужна в Single Page Application, но опыта у знаний у меня пока мало, может, я и не права.
Попробовала применить идею, что после логина стартовый экран закрывается другим фоном. Он всё ещё существует, просто самым нижним слоем, новый фон его закрывает.
В принципе, у меня на стартовом экране очень мало нод, таким образом использование памяти и нагрузка на производительность не должны быть большими, так что как первое решение сойдёт.
Можно попробовать conditional rendering для фона: если юзер залогинен, то единственным слоем один фон, иначе другой. Попробую, пожалуй.
И внезапно чувак из стартапа, который занимается бэком, принимает основные решения и, как я понимаю, занимается и организационными вопросами, написал и спросил, смогу ли я поговорить сегодня вечером, у нас внезапные изменения.
анон-левел-апер
[айти][стартап]
Как я и ожидал, изменения были не совсем к лучшему.
Они оформляются официально, наняли юриста, а юрист им сказал, что по закону штата они не могут иметь сотрудников, которым не платят зарплату.
Не вдаваясь в детали, скажу что это новый закон для защиты работников.
Денег на этой ранней стадии ещё нет, так что платить зарплату нечем.
А это значит, что мы больше не вместе.
Штош.
Чувак сказал, что расставаться со мной не хочется, что они довольны, и что сейчас трудно найти фронтендщика. Сказал, что как появятся деньги (инвесторы, клиенты), они бы с радостью наняли меня официально.
Жаль, конечно. Мне нравилось и было интересно.
Из плюсов - я получила немало новых знаний и опыта, а заодно связей и уверенности в себе
И свободного времени теперь будет чуть больше.
[дыбр]
В этот же день, уже вечером, но ещё до звонка выбрались с подругой поесть пиццы и погулять.
Пицца была ничего так, кофе ещё лучше.
Сидели на улице, в зелёном дворике, смотрели, как всё больше людей после работы тоже идут ужинать.
Потом взяли кофе с собой и просто гуляли по тихому району с красивыми домами, огромными деревьями и пышными цветочными клумбами, в золотом вечернем свете.
Это было очень здорово и умиротворяюще, так что вечер никоим образом не был испорчен.
анон-левел-апер
[нытьё][историческая реконструкция]
Кто дебил? Я дебил.
Перепутал даты реконского выезда (это был бы мой первый реальный выезд), заметил только когда уже бронировал отель - полез в почту проверять, на всякий случай, и понял, что бронирую не на те даты.
А на "те" даты мы с мужем уезжаем в путешествие.
Так что на этот выезд я не еду.
Написал письмо с извинениями - мы с другими реконсами уже столько успели напланировать с моим участием((
Стыдно, неловко, досадно и обидно, очень.
А ещё хотел с утра, пока прохладно и солнце не слишком злое, сходить на фермерский рынок, купить вкусного ржаного хлеба, да пока всем этим занимался, стало слишком поздно, всё к этому времени уже обычно раскупают.
Ну вот что такое, а
анон-левел-апер
[левел-ап][айти]
Заканчиваю очередной компонент, управление классами, где можно их добавлять, удалять, редактировать и управлять их расписанием.
Добавляю маленькое изменение или улучшение - а с ним маленький баг-другой. Число багов растёт быстрее числа улучшений К счастью, пока маленькие и легко отслеживаемые.
Поймал себя на мысли, что неплохо было бы иметь QA на этом маленьком проекте
А впереди у меня ещё огромные планы на рефакторинг!
анон-левел-апер
[левел-ап][айти]
Начал работать над проверкой, что расписание по дням и часам уникально для каждого класса, и что юзер видит соответствующее сообщение при попытаться назначить класс на уже занятое время. А ещё лучше, конечно, предложить выбрать из списка, где доступны только незанятые слоты.
Внезапно понял, что классы могут проводиться в разных аудиториях/залах! И уникальность может строиться на этом! Ну ок, пока сделаю только по дню и времени, аудитории добавлю в TODOs.
А ещё что помимо студентов в школе/на курсах могут быть и преподаватели, и их тоже надо учитывать - сколько часов они отвели.
Проект растёт сильно быстрее, чем я успеваю дизайнить и имплементировать
А ещё понял, что уже делаю рефакторинг - у меня есть функция, чтобы сделать запрос для расписаний конкретного класса, она принимает айди класса. А сейчас я понял, что мне нужны расписания всех классов для проверки уникальности.
Пора писать новую функцию, которая получает все расписания, а потом вытаскивает для конкретного класса и назначает это нужной переменной.
Узнал новую фичу гитхаба: если в коммит сообщении написать "Fix #100500", где #100500 - номер ишью, то оно автоматически станет помечено как закрытое, не надо будет самому нажимать на кнопку.
Вкалывают роботы, счастлив человек!
анон-левел-апер
[левел-ап][айти]
Закончил (почти) компонент для управления классами.
Фичу, где юзер не вводит время, на которое надо поставить класс, вручную, решил сделать отдельно - она важная, но требует значительной работы и по фронту, и по бэку.
Почти готов аналогичный компонент для управления студентами. Он проще, там только добавляешь студента (имя и фамилия), редактируешь имя и фамилию, удаляешь.
Теперь я хочу снова показать тренеру и получить его очередной фидбек, как первого юзера.
[дыбр]
Осень уже чувствуется. Уже не так жарко. Какая-то пустота в небе и вообще в воздухе, словно всё застыло. Первые штрихи цвета в листве.
Листьев не обожгло,
Веток не обломало…
День промыт, как стекло.
Только этого мало.
анон-левел-апер
[дыбр][фото]
Осень наступила, так что время наконец выложить зимне-весенние фото!
Розовые магнолии начинают зацветать в январе.
Также в январе-феврале зацветает Magnolia Doltsopa - её лепестки скорее бело-желтоватые, близко к цвету топлёного молока.
Здесь растёт ещё южная магнолия, она просто белая, но цветёт она практически круглый год, на фото её нет, но она похожа на Magnolia Doltsopa, разве что лепестки пошире и поплотнее.
Все эти магнолии пахнут нежно и приятно, но розовая и Doltsopa, имхо, чуть слаще и интенсивней, чем обычная южная.
анон-левел-апер
Роскошные магнолии, анон!
Роскошные магнолии, анон!
Спасибо! Они и издалека выглядят чудесно, как розовые облака, особенно в хмурую погоду, знаки весны
анон-левел-апер
[левел-ап][айти]
Показал тренеру в очередной раз обновлённое приложение и получил фидбек.
Он хочет возможность иметь классы, которые не повторяются во времени. Скажем, раз в год мы рубим бамбуковые маты. И они должны быть привязаны к конкретной дате, а не просто к дню недели и времени.
Репорт, сколько студентов посещало каждый класс. Это у меня есть. Но я вдруг понял, что название класса меняется в зависимости от месяца - в январе у нас двуручный меч, в июне шпага, и так далее.
При этом это всё попадает под категорию "стандартный класс". Но было бы хорошо смотреть, какое оружие пользуется большей популярностью.
Пока не знаю, как лучше задизайнить. Чувствую, что надо делать привязку класса ко времени (месяц и год) в любом случае.
Простое по студентам: у них должны быть контакты и индикатор, что нужные документы подписаны.
И совсем по мелочи: однородный стиль для кнопок, потому что я сделал два разных, и мы сошлись на том, какой лучше.
Осталось закончить компонент со студентами (почти готов), поработать над фидбеком, и приложение в его основной форме будет готово!
Потом займусь аутентификацией и авторизацией и тем, как работает на iOS и Android. А ещё рефактор, фикс багов, улучшения типа кэширования и пр.
анон-левел-апер
[левел-ап][айти]
Недавно словил 500 ошибку, когда хотел посмотреть посещения студентами классов. Она справедливо говорила, что у None не может быть атрибутов.
Начал разбираться.
Это потому, что я разрешил модели для посещений иметь None для айди студента и класса, а они внешние ключи. Сделал это в целях аудита и репортов, чтобы если даже студент и класс удалены, данные по посещению и платежам всё ещё были бы в системе.
Также я добавил дополнительные поля для имён студентов и классов, чтобы хранить их, когда объекты, на которые ссылаются внешние ключи, удалён, и имена нельзя вытащить оттуда.
Проверял добавление, редактирование и удаление классов и студентов, вот этот кейс и случился
Пофиксил тем, что добавил в Джанго модель атрибуты (и вообще узнал про них ), чтобы они возвращали айди объекта, только если он существует.
Вроде заработало, но начал проверять другой, хоть и связанный функционал, снова 500 ошибка, хоть и в другом месте.
Вкратце: я отправляю PUT, чтобы обновить записи с посещениями, а в теле запроса NaN'ы, и бэк не принимает.
Почему наны? Потому что у меня нет айдишников удалённых объектов, а функция на фронте собирает их и строит тело запроса, используя их как ключи в словаре.
Два варианта: 1) переделать управление вложенным объектом на фронте, чтобы ключами были имена классов и студентов или же 2) добавить в модель посещений ещё поля для хранения айдишников удалённых классов и студентов и использовать их
Вот это я надизайнил, ааааа
Лол, несколько раз хотел отправить пост, а Холиварка тоже пятисотые выкидывает, да что за день такой. Ну хоть эти не моя забота
анон-левел-апер
[дыбр]
У нас ВНЕЗАПНО дождь!
Я как раз на прошлой неделе наконец съездил на автомойку, ещё кекнул про себя, что наверняка теперь скоро дождь пойдёт.
Потом сам же себя обнадёжил: ну какой дождь у нас в начале сентября! Скорее жара и лесные пожары. Дожди начинаются в конце октября-ноябре обычно.
Сегодня услышал тихое постукивание по окну, посмотрел, а там знатно так поливает.
Стоял и любовался, дышал этим воздухом. Люблю дожди.
Впрочем, машина всё равно под дождь не попала
анон-левел-апер
[дыбр][нытьё]
Кажется, я заболел
Третий день голова тяжёлая, болит, и я чувствую слабость и сонливость.
Вокруг люди тоже болеют.
Всё жду, когда у меня начнутся тоже насморк и кашель, чтобы быстрее уже прошло. Но может, перенесу всё легко.
Надеюсь, к путешествию полностью выздоровлю.
анон-левел-апер