• Первое предложение о работе, как поступить?

    @haveacess
    Опишу свою историю. Это очень схоже с тем, что у тебя происходит сейчас. Возможно, будет ценно.

    Примерно 2 с половиной года назад я закончил колледж, тоже в РБ кстати) Начал искать работу и просто принял первое предложение. Это был фулл-стек. Я зеленый джун который думает что он особо никому и не сдался. Да и еще разгар пандемии. Вобщем да, я принял первый же оффер и переехал в Минск.

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

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

    И вот спустя 2 года - я ищу работу, снова. Ибо понимаю - на фулл-стеке далеко не уедешь. Фронт мне не зашел особо. Поэтому ищу бэкенд. В поисках уже месяца 3-4 (активно). Пока еще ни одного оффера.
    Еще большую роль сыграла СВО, ибо год назад я тоже пытался уйти из текущей компании - но не хватило деняг. Оффера были, но не то что хотел. Как итог контракт был продлен. А сейчас уходил просто в никуда в надежде на светлое будущее)

    Ну и очень чувствую разницу - если ранее в твое развитие готовы были вкладывать, и платить даже нормальные деньги на испыте 600-800 баксов. Только приди. Сделаем из тебя бэкендера.
    То сейчас планка существенно повысилась - джун - чувак уже с опытом 1-2 года точно. Обучать его не нужно.
    Ну и думаю все таки немного отпугивает, что я тут фулл стеком 2 года был - а тут решил в бэк переметнутся. Да и не зачем брать меня, когда есть такие же чуваки только которые работали только бэкерами все это время)

    В общем да. В историю с фулл стеком я особо не верю)

    ps. в моем кейсе очень сильно еще зарешал английский. У меня нет разговорного b1-b2. Думаю, если бы он был, возможно уже что-то бы и нашел
    Ответ написан
    Комментировать
  • Как обесцветить часть карты?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    я понимаю, что как в примере я не перебью стили,

    нет, не перебьете.

    Решение вроде очевидное – изначально для всех элементов svg выставить фильтр, а по клику убирать его. У body разумеется убрать фильтр совсем. Иначе никак.
    Ответ написан
    9 комментариев
  • Первое предложение о работе, как поступить?

    Судя по обозначенным минусам - вы уже для себя всё решили.

    Я бы посоветовал, тк это первый опыт, всётаки сходить на испытательный, а если все беспокойства оправдаются - со спокойной душой уйти


    Зарплата - 500 долларов до испыта, 700 - после.

    Есть неиллюзорный шанс, что:
    1. К долларам это ни разу не привязано
    2. После испытательного так и останется 500.


    Дело в том, что позвали меня на позицию Full-stack(junior). Если бы это был фулстек веб(нода+реакт), допустим, скорее всего я бы согласился.

    Но тут надо разбираться с любыми технологиями, которые нужны заказчику(компания аутсорс). Мне сразу сказали, что надо будет и с мобилками работать и уметь деплоить и с кубернетисом работать.


    Всему можно научиться. Уточняй какой стек и думай, хочешь ли ты в этом развиваться.


    Так же из-за специфики работы, пм будет общаться с заказчиком, но будут очень частые случаи, когда надо будет созваниваться с заказчикам, уточнять какие-то моменты + презентовать продукт по результатам работы.

    Это норма для небольших компаний.


    3.Знакомые опытные ребята говорят, что фулстек джунов не существет и это вообще треш.

    Фулстек сеньоров тоже)
    Если хочешь жёстко по хардам прокачиваться, то надо более узко специализироваться.
    Ответ написан
    Комментировать
  • Первое предложение о работе, как поступить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Джуны и в лучшие времена были не нужны, а теперь тем более. Поэтому хвататься надо за любую возможность, а потом сжав зубы получать свой первый год непрерывного опыта, с которым будет проще потом устраиваться.
    Ответ написан
    1 комментарий
  • Как спроектировать приложение? Или как лучше хранить данные?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Картинки, документы, архивы и прочие файлы хранятся как обычные файлы в файловой системе. В базе данных хранится путь к ним.
    Если файлов много и возможно совпадение названий, то файлы переименовывают по какой-либо единой схеме (например, GUID).
    Ответ написан
    Комментировать
  • Как работает авторизация?

    @strelok011
    Поделюсь своим опытом:

    1. Отправлять - нормально. на сервере ты не хранишь пароль в открытом виде, а хранишь хэш. Если устройство скомпрометировано, ты никак не сможешь защититься.
    2. В куке ты передаешь данные. там может храниться до 4кб разного хлама, зачем тебе это хранить на сервере? Главное что ты туда должен положить - аксесс токен, которым будет подписываться каждый запрос на авторизованные эндпойнты. Кука - просто один из механизмов для хранения и передачи этого токена с клиента на сервер. Можно точно так же отдать явным респонсом вместо куки, просто это потенциальная дыра безопасности на клиенте.
    3. Токены хранишь на сервере, у них должно быть время жизни. Классика - пара часов, плюс к нему рефреш токен, которым можно перевыпустить новый. UPD Про уникальные токены - почитай например про JWT токен
    4. на клиенте ты в браузере не должен ничего читать. Запрос на бэк для клиента будет типа "не подписанным", просто вместе с запросом на бэк полетит и инфа из куки, которую уже ты должен собрать и определить статус клиента.
    5. Выше понятно, но тем не менее - при смене пароля просто убиваешь все ранее выпущенные токены авторизации вместе с рефреш токенами. В дальнейшем любой эндпойнт, требующий авторизации, будет возвращать какую-то ошибку, на которую фронт должен переводить пользователя в окно авторизации. Особой магии тут нет.
    Ответ написан
    4 комментария
  • Почему возникает ошибка при записи в базу данных(serial)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Как поправить запрос, что бы у меня айдишники автоматически заполнялись по мере их увеличения в бд, а не приходилось руками хардкодить цифры


    На то он и serial что бы при вставлении не указывать это поле, оно будет автоматически увеличиваться на один при добавлении новой записи.
    Ответ написан
    1 комментарий
  • Как связать nodejs с postgress в docker?

    akelsey
    @akelsey
    Если порт опубликован, то он не только на localhost слушает, а на интерфейсе хоста где поднят докер контейнер.
    Создать правило на фаерволле если он включен, на порт 5432, и в настройках приложения подключаться к 192.168.x.x:5432 (ну или какой у вас там айпи адрес машины на которой поднята PG)
    Ответ написан
    Комментировать
  • Как обработать post запрос на nodejs?

    black1277
    @black1277
    Вольный стрелок
    Есть простые и сложные запросы CORS. Когда запрос сложный - браузер отправляет 2 запроса сначала OPTIONS затем основной. GET - простой запрос - поэтому у вас всё работает правильно. POST - тоже простой запрос, но если изменить ему Content-Type на 'application/json' он становится сложным. Ваш сервер не отвечает на предварительный запрос OPTIONS, поэтому браузер блокирует ответ. Читайте подробнее, например здесь
    Ответ написан
    Комментировать
  • Для чего нужен eventemitter?

    alexbaum
    @alexbaum
    JS-разработчик, наставник.
    Подход "Подписчик-Издатель" (EventEmmiter) нужен для разделения частей приложения на независимые модули.

    Например, нужно показывать на странице сколько товаров в корзине.

    Подход с вызовом функций:

    const renderCart(count) {
      $('#cart').text(count);
    }
    
    const renderFooterNavCart(count) {
      $('.footer .cart').text(count);
    }
    
    const addToCartHandler() {
      const count = $('.footer .cart').text() + 1;
    
      renderCart(count);
      renderFooterNavCart(count);
    
      // Если добавится еще виджет с отображением количества товаров в корзине —
      // нужно найти этот обработчик и добавить сюда функцию отрисовки
    }


    Подход "Подписчик-Издатель":

    const renderCart(count) {
      $('#cart').text(count);
    }
    
    const renderFooterNavCart(count) {
      $('.footer .cart').text(count);
    }
    
    const addToCartHandler() {
      const count = $('.footer .cart').text() + 1;
    
      emitEvent('cartCountCanged', count)
    }
    
    subscribe('cartCountCanged', (count) => {
      renderCart(count);
      renderFooterNavCart(count);
    })
    
    // Если добавится еще виджет с отображением количества товаров в корзине —
    // вызвать 
    
    subscribe('cartCountCanged', (count) => {
      // виджет(count)
    }
    
    // в любом месте приложения.
    Ответ написан
    1 комментарий
  • Как получить размер файла из массива?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Например: Buffer.prototype.length, Array.prototype.length и т.д. в зависимости от типа и структуры вложенного файла.
    Ответ написан
    Комментировать
  • Как поправить верстку?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    .description {
      width: 100%;
      max-width: 0;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }


    Дополнительные варианты

    <td class='description'>
      <div class="textbox">
        <span> TEXT </span>
      </div>
    </td>


    .textbox {
      width: 100%;
      display: inline-grid;
    }
    
    .textbox span {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }


    Или:

    <td class='description'>
      <div class="textbox"> TEXT </div>
    </td>


    .textbox {
      width: 100%;
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 1;
      -webkit-box-orient: vertical;
    }

    Ответ написан
    Комментировать
  • Base64 формат картинки, что делать на фронтенде?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    что делать на фронтенде

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

    На серьёзном хайлоад проекте это была бы, условно, смерть серверам по трафику.
    Но клиенты с не самым хорошим интернетом отлетели бы ещё раньше. А не самый хороший это даже мобильный 4g в средних условиях приёма сигнала. 470кб это очень, очень много для всего лишь одного запроса. Тяжелее запрос - дольше время до отрисовки.
    Ну и мобильный интернет далеко не у всех безлимитный. А не в России и подавно.

    А ещё есть лимиты на длину строки. В разных движках причём разные. Так что, теоритически, наверное, можно упереться в лимит строки и картинка не отобразится или будет битая.
    Ответ написан
    7 комментариев
  • Как сформировать объект?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Вот так:

    const result = data.reduce((acc, { value, isValid, field }) => {
      acc[field] = value;
      return {...acc};
    }, {});
    Ответ написан
    Комментировать
  • Как работать с датами в джаваскрипте(склонять даты)?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    https://momentjs.com/docs/#/displaying/fromnow/
    moment().locale('ru').fromNow()
    Ответ написан
    Комментировать
  • Как расположить точки на окружности?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Этот пример не затрагивает CSS, а реализован только на JS. Так как углы на JS измеряются в радианах, а длина окружности равна количеству радиан, равному числу пи * 2, (приблизительно 6.28, это количество радиусов из которых состоит окружность) организовываем цикл от нуля до пи * 2. А вот шаг итераций задаём поделив 6.28 на количество точек, которое нам нужно равномерно расставить на окружности.
    <canvas id=canvas width=200 height=200></canvas>
    let r = 90; // радиус
    let amountOfPoints = 7; // количество точек
    let x, y;
    let ctx = canvas.getContext('2d');
    for(i = 0; i < Math.PI * 2; i += Math.PI * 2 / amountOfPoints){
    	x = canvas.width / 2 + r * Math.sin(i);
    	y = canvas.height / 2 + r * Math.cos(i);
    	ctx.fillRect(x, y, 2, 2);
    }
    Ответ написан
    Комментировать
  • Как расположить элементы по кругу?

    D1mar1k
    @D1mar1k Автор вопроса
    Сделано с любовью и JavaScript
    Давно не заходил, решил так:

    const calculateCoordinate = (count, r, cx, cy) => {
        const sectors = [];
        let startAngle = -90;
        let endAngle = 0;
        let maxCard = 6;
        for (let i=0; i<count; i++)  {
            if (i<=maxCard-1){
                const angle = 360/maxCard;
                endAngle += angle;
                const rad = Math.PI / 180;
                const x = cx + r * Math.cos(startAngle * rad);
                const y = cy + r * Math.sin(startAngle * rad);
                startAngle += angle;
                sectors.push({x, y});
            } else {
                const angle = 360/(count-maxCard);
                endAngle += angle;
                const rad = Math.PI / 180;
                const x = cx + r * 2 * Math.cos(startAngle * rad);
                const y = cy + r * 2 * Math.sin(startAngle * rad);
                startAngle += angle;
                sectors.push({x, y});
            }
        }
        return sectors;
    };


    При реализации учитывал максимальное кол-во фишек - 20шт. Максимальное кол-во радиусов - 2
    Ответ написан
    1 комментарий
  • Как сверстать speech bubble?

    gazes12
    @gazes12
    Подключаете иконки через https://fontawesome.com/. Текст в иконке делаете через псевдоэлементы.
    Ответ написан
    Комментировать
  • Удалить свойство или сделать его значение undifened?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    1) Не стоит вручную устанавливать undefined. Если значение нужно убрать - хорошая практика устанавливать null
    2) Не стоит использовать глобальные переменные без острой необходимости
    3) delete используют скорее не для обнуления значения, а для удаления свойства из объекта чтобы оно не участвовало в перечислении\не отправлялось на сервер и тд. Так что тут есть разница между delete и установкой undefined.
    Ответ написан
    Комментировать