BEARlogin Dev
رفتن به کانال در Telegram
Примус починяю. Канал с хокку тут https://t.me/devs_hokku По сотрудничеству @bearlogin
نمایش بیشتر767
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
اطلاعاتی وجود ندارد30 روز
آرشیو پست ها
Вопрос
Есть такой метод
class UserService {
...
async updateUser(id, data) {
await this.user.update(id, data);
await this.logger.log('User updated', id, data);
}
...
}
Не спрашивая у chatgpt скажите, что тут не так?
Upd1. С кодом, входными данными все в порядке, дело в другом.
Ответ напишу в 13.30Заменит ли AI разработчиков?
Думаю, каждый об этом задумывался. И слышал противоположные мнения: от того, что да, всех заменит железный болван, до того, что волноваться не о чем.
Но истина всегда не на максимумах или минимумах. Она посередине.
AI УЖЕ заменил разработчиков. Но не так, как ты думаешь.
Он не пришёл и не сказал: «Всё, кожаный мешок, твоё время ушло, теперь кодим мы». Он изменил систему.
Сильные разрабы стали ещё сильнее.
По сути, AI — это экзоскелет, который усиливает твои способности.
Если ты ходить не умеешь, экзоскелет не поможет. Скорее, твои навыки ещё больше атрофируются.
Так что AI не заменяет людей, но делает сильных сильнее, а слабых — бесполезными.
Так работает естественный отбор.
А вы что думаете по этому поводу?
P.S. я советую людям, которые сейчас проходят обучение на разраба - вырубайте AI помощников, совсем, наглухо.
Можно пользоваться только AI-чатами, чтобы лучше разобраться в какой то теме, и то, не факт что вам верно чатгпт все объяснит. Может такую ахинею занести, что на собесе просто ржать все будут.
—-
Делаю слабых сильными, чтобы вас не заменил AI или чтобы пройти испытательный срок и не вылететь, пишите в ЛС @bearlogin — разберемся :)
BEARlogin dev — подпишись!
Жена звонит:
— Где твоя машина? На парковке нету...
Я завис... 🤔 Где машина-то?..
Вспоминаю: остановился у кафе, зашел, поел… и ушел домой пешком. 🚶♂️
Определенно пора отдохнуть. 😅
Знаете, сейчас многие пишут: "Блин, а вот вдруг оно выстрелит, а ты не дождался. Не будет обидно?"
Но дело совсем не в этом.
Этот выход — это победа.
Я победил FOMO длиной в 2,5 года.
Это результат полугодовой трансформации.
Еще летом, в июле, я наткнулся на SkillsLab и начал изучать коммуникацию, манипуляции и практики противодействия.
Потом прочитал книгу Никиты Непряхина "Я манипулирую тобой".
И в какой-то момент я УВИДЕЛ.
Как будто шоры спали.
Я прозрел и наконец-то разглядел всю сеть манипуляций, психологического насилия и контроля, которой опутали меня и всю команду.
Это было как в Матрице — как будто принял красную таблетку.
После этого я пытался повлиять на ситуацию.
Прямо говорил фаундерам, что они манипулируют, что это вредит проекту, что люди выгорают из-за их подхода.
Но не достучался.
"Выгорания не существует. Это просто слабые люди собрались и не смогли дойти на Эверест."Таков был их ответ. А дальше произошёл случайный, но ключевой момент. Я наткнулся на пост Айюба, где он рассказывал, что работа с коучем помогла ему прочистить мозг. До этого я уже искал коуча, но всё время натыкался на каких-то цыган. Но тут Айюб поделился контактом. Я написал и пошёл в работу. Буквально за два занятия я начал приходить в себя. Я понял, чего я хочу, куда двигаться, с кем работать и кем быть. Мы разобрали всю ситуацию со стартапом. И коуч задал мне один вопрос, который всё решил:
Андрей, за сколько ты был бы готов и дальше подвергаться психологическому насилию?Я задумался и ответил: "Ну… за миллион долларов в месяц." Тогда последовал второй вопрос:
То есть ты утверждаешь, что люди имеют право применять психологическое насилие, если платят миллион долларов?Я задумался. И сказал: "Нет." Тогда коуч повторила первый вопрос:
Андрей, за сколько ты был бы готов и дальше подвергаться психологическому насилию?И в этот момент всё стало ясно. Я ответил: "Ни за сколько." BEARlogin dev — подпишись! #стартапы #манипуляции
Знаете, сейчас люди пишут, спрашивают, что вот, а вдруг стартап выстрелит, а ты недождался
Экзитнулся
Вчера я принял решение выйти из стартапа Funlee, которому отдал 2,5 года.
В итоге — дырка от бублика, испорченные отношения с семьей из-за постоянной занятости, бесконечные созвоны. Полное отсутствие заботы о людях, манипуляции в духе "чёрное — это белое", жизнь в режиме ожидания и обещания "вот-вот выстрелит, скоро в тайланде жить будем, порш поедем покупать тебе", игнорирование фактов и всех практик создания и вывода на рынок SaaS продуктов, а главное — полное отрицание фаундерами необходимости платить команде, пока стартап не начнёт генерировать миллионы.
В общем, кушать что то нужно и детей с женой кормить, поэтому выхожу на рынок.
- CTO, технический лидер, тимлид или архитектор. Код писать не стесняюсь и люблю.
- Технологии, языки схватываю быстро
- Рассмотрю и корпоративные компании, и стартапы, но только если фаундеры понимают ценность оплаты труда команды и нет токсичной атмосферы.
📌 Резюме прикрепил, если есть контакты HR — буду благодарен если скинете.
Zustand подписка только на конкретные изменения стора
Если вам нужно подписаться на изменение какой то части стора, то используйте миддлварь subscribeWithSelector
import { create } from "zustand";
import { subscribeWithSelector } from "zustand/middleware";
const useStore = create(
subscribeWithSelector((set) => ({
count: 0,
user: { name: "Alice", age: 25 },
increment: () => set((state) => ({ count: state.count + 1 })),
}))
);
// Подписка ТОЛЬКО на `count`
useStore.subscribe(
(state) => state.count,
(newCount, prevCount) => {
console.log(`Счётчик изменился: ${prevCount} → ${newCount}`);
}
);
Теперь подписка сработает только при изменении count, а изменения user её не триггерят.
--
Подготовлю к собесам, помогу с рабочими задачами и росту хардов/софтов. Уперся в потолок с з/п, ответственностью? Помогу с ростом грейда от миддла до синьора.
Если необходимо менторство - пишите @bearlogin
BEARlogin dev — подпишись!
#react #zustandТут пишем отзывы по менторской работе со мной. Только отзывы, остальные сообщения удаляю.
Зачем нужен useSyncExternalStore
Вопреки расхожему мнению, оно нужно не только для подключения внешних стейт-менеджеров.
Эта штука в целом работает с внешними источниками состояний.
Что такое этот источник состояния? В целом интерфейс евойный состоит из двух трех функций:
1. subsribe - которая используется, чтобы подписаться на изменение чегобытонибыло
2. getSnapshot - которая используется, чтобы получить то самое чтобытонибыло
3. getServerSnapshot - которая используется, чтобы это самое чтобытонибыло на стороне сервере
При ближайшем рассмотрении весьма и весьма полезная штукенция...
Рассмотрим пример с созданием хука для отслеживания изменения ширины окна
//Без useSyncExternalStore
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
}
export default function WindowWidthComponent() {
const width = useWindowWidth();
return <div>Ширина окна: {width}px</div>;
}
//Вариант с useSyncExternalStore
import { useSyncExternalStore } from "react";
function useWindowWidth() {
// Подписка на изменения
const subscribe = (callback) => {
window.addEventListener("resize", callback);
return () => window.removeEventListener("resize", callback);
};
// Читаем текущее состояние
const getSnapshot = () => window.innerWidth;
return useSyncExternalStore(subscribe, getSnapshot);
}
export default function WindowWidthComponent() {
const width = useWindowWidth();
return <div>Ширина окна: {width}px</div>;
}
Или вот восхитительная тема с mediaQuery
import { useSyncExternalStore } from "react";
function useMediaQuery(query) {
const mediaQuery= window.matchMedia(query);
const subscribe = (callback) => {
mediaQuery.addEventListener("change", callback);
return () => mediaQuery.removeEventListener("change", callback);
};
const getSnapshot = () => mediaQuery.matches;
return useSyncExternalStore(subscribe, getSnapshot);
}
export default function MediaQueryComponent() {
const isLargeScreen = useMediaQuery("(min-width: 1024px)");
return (
<div>
{isLargeScreen ? "Большой экран" : "Маленький экран"}
</div>
);
}
А в чем разница под капотом? Она как суслик, ее не видно, но она есть.
1. Поддержка Concurrent Rendering — гарантирует согласованность состояния даже при приостановке или перезапуске рендера.
2. Мгновенная синхронизация — состояние всегда актуально на момент рендера, без задержек, свойственных setState.
3. Меньше лишних ререндеров — React сравнивает значения из getSnapshot и вызывает рендер только при изменении.
4. Поддержка SSR и гидрации — позволяет задать серверное состояние через getServerSnapshot, устраняя расхождения между сервером и клиентом.
В общем, интересная тема, на мой взгляд, нужно брать!
Подготовлю к собесам, помогу с рабочими задачами и росту хардов/софтов. Уперся в потолок с з/п, ответственностью?
Если необходимо менторство - пишите @bearlogin
BEARlogin dev — подпишись!
#собеседования #reactПомогите Паше найти работу
Ребят, бро ищет работу фронтом или фулстеком в React или React+NodeJs в целом по хардам крепкий джун, но при этом хорошо решает бизнес задачи, есть аналитическое мышление.
Кому не сложно, закиньте вашим HR, поможем всем миром, как говориться :)
ЛС Паши @eremenko_pa
#frontend #react #nodejs #nestjs #резюмешка
Пока я не очень в состоянии писать полноценные посты, буду делиться интересной инфой, что нашел.
Сегодня вот интересная инфа по задержкам https://gist.github.com/jboner/2841832. При этом в комментах есть свой "юмор", типа расчета задержек в бананах 😀
Не тяните с обращением к врачу.
Я вчера понял, что если кашляешь месяц, то стоит сходить к врачу, а не ждать, что все пройдет само. Даже если температуры нету. Пневмония 🤧
#заболел
Вот кто ставит 👎, вы там покажитесь, комент напишите, или вы на бобину обиделись? 😀 Или это один человек 6 аккаунтов зарегал, сидит ставит?
Прост тема холиварная, понимаю, ну давайте похоливарим.
FSD: дело было не в бобине...
Часто слышу критику FSD: "Слишком много папок, слишком много правил, это избыточно!".
Но хочу сказать, что FSD — это не про количество папок. Это про направление зависимостей и архитектурные границы.
Ты не обязан сразу строить многоэтажный небоскрёб, если у тебя пока маленький проект. Начать можно просто.
Кстати, само название FSD (Feature-Sliced Design), на мой взгляд, не совсем корректно. Это не "дизайн, разделенный на фичи". Скорее, это методология, которая помогает структурировать код, организуя его вокруг бизнес-функционала и уровней ответственности, позволяя соблюдать принципы Low coupling и High cohesion. Можете в комментариях предложить своё название. Лично я бы назвал это Business-Sliced Design — чтобы невозможно было интерпретировать методологию упрощённо и требовалось изучение её сути.С чего начинать? На старте достаточно трёх слоёв: 1. app/ — конфигурация приложения: роутинг, провайдеры, глобальные стили. 2. shared/ — переиспользуемые, не связанные с бизнесом компоненты, утилиты, стили и т.д. 3. pages/ — страницы приложения и используемые ими компоненты.
src/
app/
App.tsx
routes.ts
shared/
ui/
Button/
index.tsx
pages/
catalog/
ui/
CatalogPage.tsx
ProductList.tsx //кандидат на вынос
index.ts
recommended/
ui/
RecommendedPage.tsx
ProductList.tsx
index.ts
Сначала можно оставить всё в pages, если функциональность используется только там.
Но как только начинаешь дублировать код, либо твой слайс хочет что то импортировать у соседей, то логично вынести его в widgets.
src/
app/
App.tsx
routes.ts
shared/
ui/
Button/
index.tsx
widgets/
product-list/
ui/
ProductList.tsx
model/
useProducts.ts
index.ts
pages/
catalog/
ui/
CatalogPage.tsx
index.ts
recommended/
ui/
RecommendedPage.tsx
index.ts
А затем продолжаешь углублять структуру. Например, если два widget используют схожую логику или функциональность, то логично вынести её в features. Дальше это движение продолжается по мере необходимости.
Что касается entities и shared, то здесь есть определённая специфика. Об этом я расскажу в следующих постах.
Вынос в новый сегмент какого то функционала не является самоцелью. Я бы сказал, даже наоборот — если можно не выносить и остаться в рамках одного слайса — оставайтесь.
Таким образом FSD подходят для любых проектов на старте, позволяя сразу закладывать возможности для масштабирования и помогает соблюдать принципы низкой связанности и высокого зацепления.
Ставьте 🔥, если хотите больше практических примеров и советов по FSD.
BEARlogin dev — подпишись!
P.S. советую этот экстеншн для генерации слайсов https://marketplace.visualstudio.com/items?itemName=SbokyZahodi.fsd-slices
#архитектура #frontend #fsd
Подготовлю к собесам, помогу с рабочими задачами и росту хардов/софтов. Уперся в потолок с з/п, ответственностью?
Если необходимо менторство - пишите @bearlogin