artalog
4.2K subscribers
531 photos
40 videos
39 files
896 links
Развернутые ответы на вопросы в чатах, мысли от рабочих процессов.
Вопросы - @artalar.
Download Telegram
Хочется распечатать и заламинировать 😅
🔥36😁183🤮1💩1
Войтивайти

Как быстро? Ща расскажу вам секретный секрет.

Чем, в первую очередь, отличается джун от мидла? Самостоятельностью. А чем во вторую? Тех скилами. Так что нужно качать в первую очередь?

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

Я это все к чему. Поймал себя на мысле, что мне, как лиду, нужны люди, которые очень хорошо знают всю платформу, таким я больше доверяю. Но таких очень мало! Что делать? Ок, понижаем планку, теперь мне нужны люди, которые не важно что знают, но умеют решать задачи, а ревьюить / рефакторить - уже моя задача за ними, лишь бы они основную массу бойлерплейта накидывали. Мне нужна прослойка над ChatGPT 🙂

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

Попробуйте сделать большой пет проект таким методом, может быть с другими начинающими разработчиками. Потом наймите на ревью лида с многолетним опытом (не просто синьора).

Ну и самый главный и практичный совет начинающему разработчику. На собеседовании убедите лида не в том что вы что-то знаете, а в том что вы умеете решать задачи и он может на вас положиться - вот это дорогого стоит.
👍3411🔥3🤔3💩3
А есть расширение на vscode, которое при упавших тестах в пост-пайплайнах показывает пейвол с предложением сходить на упавшую джобу?
Media is too big
VIEW IN TELEGRAM
Делаю ультралегкоходную щепочницу.
👍6
Forwarded from BEARlogin
Typescript теперь в телеграм Prisma Json

Значит дошли руки разобраться, что же делать с Json в призме, так как приводить типы порядком надоело (ну или затыкать рот компилятору as any)
Нашел такую вот замечательную либу https://github.com/arthurfiorette/prisma-json-types-generator

Суть такая — добавляем в схему еще 1 генератор, обязательно после основного генератора призмы.
generator json {
provider = "prisma-json-types-generator"
// namespace = "PrismaJson"
// clientOutput = "<finds it automatically>"
// (./ -> relative to schema, or an importable path to require() it)
}
Затем где то в области видимости компилятора TS, например в src/index.ts пишем глобальный неймспейс и прописываем наш существующий тип.
declare global {
namespace PrismaJson {
type FormData = FormDataContract;
}
}

В схеме пишем комментарий
model Form {
/// [FormData]
formData: Json
}


Запускаем генерацию и Profit, в сущности теперь типизированное поле!

Всем призма!

Bearlogin Dev

#prisma #typescript
🔥5😨3👍21
BEARlogin
Typescript теперь в телеграм Prisma Json Значит дошли руки разобраться, что же делать с Json в призме, так как приводить типы порядком надоело (ну или затыкать рот компилятору as any) Нашел такую вот замечательную либу https://github.com/arthurfiorette/prisma…
Поясню недовольным 🙂

Первое и самое главное, json используем для часто меняющихся данных (структурно) во время разработки. Чем ближе фича к стабильному релизу - тем важнее выносить структуру в схему.

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

По поводу миграций. Вопрос больной офк. Сначала см. пункт 1. Если в проде все же json остался по какой-то причине, миграции приходится делать руками. Но это не самая большая проблема, главное не забывать версионировать АПИ и валидировать версию и на беке и на фронте (UX-френдли просьба перезагрузить аппу).
Forwarded from Reatom новости (artalar)
reatomGql - пример фабрики для работы с urql.

TypedDocumentNode - стандарт для типизации GraphQL, код легко портировать для аполо. Кстати, новый https://github.com/0no-co/gql.tada тоже его использует.

Обратите внимание на withStatusNotification, он работает с любым AsyncAction. Это хороший пример гибкого переиспользования логики на реатоме, вы выносите ее в оператор и применяете там где надо. Это лучше чем зашивать эту логику в основную фабрику API (reatomGql в примере), не раздувает кофигурацию и типы, связанность меньше.
3🔥2💩2👍1
Сегодня в 14-00 (gmt+3) в artalogg поговорим на темы:

- архитектура
- зачем нужна и какие вопросы решает
- как правильно строить связи между модулями на фронте
- сетевой слой
- интерсепторы
- gql vs rest
- trpc
- контракты, zod

Доступ: boosty.to/artalar
🔥15
Пытаюсь найти хоть какой-то адекватный пример использования xstate. Плохо получается, большинство примеров вообще не про стейт машины, а про управление состоянием. А использовать xstate для каунтера или дата фетчинга ну как-то полный оверкил.

Вот хоть какой-то адекватный пример процесса: Stopwatch. Очень простой. Но вот вы сравните и объясните мне, оно точно того стоит??

Бандлсайз этой простой модели на xstate 33кб, на реатоме 3кб.
👍12💩9🥱3😁1🤔1🌚1
Как же меня достало вручную чекать обновление зависимостей после git pull. Почему у npm / yarn / pnpm нет (или есть) флага под это? Написал скрипт, вставьте его себе перед стартом дева


{
"dev": "node deps_check.mjs && vite”,
}



import { execSync } from 'child_process';
import { createHash } from 'crypto';
import { readFile, writeFile, mkdir } from 'fs/promises';
import { resolve, dirname } from 'path';

await mkdir(resolve(dirname(''), './node_modules/.cache')).catch(() => {});
const cachePath = resolve(
dirname(''),
'./node_modules/.cache/deps_check_lock_hash.txt',
);
const lockFilePath = resolve(dirname(''), 'package-lock.json');

const lockHashCache = await readFile(cachePath, {
encoding: 'utf-8',
flag: 'a+',
}).catch(() => {});
const lockHash = createHash('sha256')
.update(await readFile(lockFilePath, { encoding: 'utf-8' }))
.digest('hex');

if (lockHashCache !== lockHash) {
execSync('npm i', { stdio: 'inherit' });
await writeFile(cachePath, lockHash);
}


Вопрос только, можно ли как-то весь выхлоп из execSync форвардить выше? спасибо, обновил.
👍181
Мне станет страшно ни когда мы начнем вместо кода хранить промпт, а когда таким образом переписанный претиер станет выдавать такие фиксы:
😁33
Теперь звук от меня вы будете слышать через FIFINE AmpliGame A8 - очень бюджетный микрофон с, на удивление, хорошим качеством, рекомендую.
👍6
Нашел у нас в коде функцию форматирования отображения большого числа, подумал, повспоминал, есть же Intl.NumberFormat!

MDN мне с ним не особо помог, но в гугле сразу нашлась статья с нужным примером. Что бы попробовать разные варианты использования и сразу увидеть наглядный результат решил вспомнить вот что: https://observablehq.com/d/d0d9dc332f8842c6
🔥24👍6😱3
Толку от этого SSR, если проблема в головах… Форма регистрации на https://practicum.yandex.ru/promo/events/b2b_motivation подгружается секунд 5, без какого-либо плейсхолдера или лоадера я просто смотрел в серый квадрат.
😁30🤔1
Как я хочу писать красивости на CSS и как приходится…
💯48
age = 2^5
🎉138🍾22💊4👏2
Чего мне не хватает в зоде, так это какого-то “parseExtends”
https://tsplay.dev/w6eMGW
💩7🤨31🤮1
tg_image_3563175577.jpeg
538.1 KB
Крутая монохромная тема: https://marketplace.visualstudio.com/items?itemName=shytikov.blanche

Такие темы всегда, почему-то, в чем-то не доделаны. Так и в этой, терминал другой расцветки. Но сам код и менюшки очень хорошо сделаны.
💩27👍6💊4🤷21🌭1
Как же круто что ТС умеет выводить тип массива на основе push в цикле. Особенно удобно, когда нужно промапить что-то с условием, а использовать flatMap или доп filter с тайпгардом из-за перфа не хочется.
👎13🔥8😁7👍1