• Как построить правильную архитектуру на AWS для веб-приложений?

    @vitaly_il1
    DevOps Consulting
    На это можно посмотреть с двух точек зрения - практической и учебной. Если цель научиться чему-то новому, то начинайте потихоньку. Я бы начал в frontend, его проще задеплоить в S3, чем изучать serverless. Заработает - добавить Cloudfront. Заработает - добавить CI/CD, проще всего на основе GitHub.
    Ответ написан
    4 комментария
  • Как сделать, чтобы блок не уходил за пределы родительского?

    serjikz
    @serjikz
    web-developer
    1. Измерить блок-родитель
    2. Установить ограничение в точке, где будет останавливаться передвигающийся (ширина родитея наверно отнять сколько-то px так как у вас рамка там ну и точка остановки может должна быть ещё левее чем рамка начинается, вычислить это так)
    3. При движении вычислять каждый раз координаты правой грани передвигающегося блока и если координаты правой грани равны или больше чем ограничение - то приравнивать позицию left как координату ограничения минус ширина передвигающегося блока.

    Это решит выпадания из родителя слева и справа.

    Нужно чтоб не выпадал из потока (грубо говоря вниз не уезжал) - задайте элементу position: relative; или используйте margin-left/translateX для передвижения

    В целом тут js-а не много. Писать готовое решение не хочу вам, чтоб подумали и погуглили самостоятельно, как это можно сделать всё))

    CSS тут не поможет, position тут не причем, двигать можно хоть меняя margin-left, хоть translateX(), хоть будет передвигаемый с absolute (тогда блок родитель схлопнется, имейте ввиду, абсолютное позиционирование выводит блок из потока), хоть с relative, как угодно.
    Ответ написан
    Комментировать
  • Ошибка при деструктурирующем присваивании аргументов функции?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Нужно самой деструктуризации дать значение по умолчанию:
    function hello ({ lol, kek } = {}) {
      //..code
    }

    При этом и отдельным параметрам так же можно задать умолчания:
    function hello ({ lol = 1, kek = 2 } = {}) {
      //..code
    }
    Ответ написан
    1 комментарий
  • Есть ли подобные лампы в продаже?

    @lonelymyp
    Хочу вылезти из минуса по карме.
    Готовые вероятно есть на алиэкспрессе

    А если самоделку...
    Рукоятку джедайского меча можно надыбать в магазине игрушек, а саму лампу проще всего взять готовую светодиодную матовую типа Т8-G13-600 (600 это длина, бывают разные)
    Т.к. такая лампа запитывается с двух сторон, надо будет её расковырять и кинуть провод с одного конца через всю лампу под платой светодиодов до второго конца (но если повезёт, можно будет сразу припаять оба провода с одной стороны)
    Ну и оба провода питания вывести с одной стороны и спрятать в ручку меча.
    Ответ написан
    Комментировать
  • Как работает сборщик мусор с колбеками Promise?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Сборщики мусора (далее GC) бывают разные, в том же v8 используется сразу 3 типа GC в зависимости от поколения объектов (упрощенно молодое, старое и сложные случаи), но в большинстве своем принцип работы сводится к просчету достижимости из некоторого корня в дереве объектов (например глобального объекта, но не только его). v8 не является исключением, и его GC содержит C++ api для создания таких корней. Из JS мы данным api можем воспользоваться лишь косвенно, через сущности языка предоставляемые либо самим v8 либо платформой (браузером, node.js, deno и т.д.)
    Чтоб было понятно давайте рассмотрим простой пример:
    const h = 'Hello world!';
    const n = 'nothing';
    setTimeout(() => {
      console.log(h);
    }, 1000);
    У нас есть строковые переменные h и n. Переменная n нигде больше не используется и ее память очистится при ближайшей работе GC. А вот переменная h оказалась в замыкании созданном стрелочной функцией. И хотя в JS мы не можем достучаться до h имея ссылку на эту функцию, сама функция все таки имеет ссылку на h, а значит h не может быть уничтожена пока не будет уничтожена сама функция. В терминах GC ссылка на h будет серой, то есть сама ссылка на h недоступна из корня напрямую, но сейчас мы проверяем объекты, которые на нее ссылаются и истина будет зависеть от них (подробнее можете погуглить "mark black white and gray memory in gc").
    Давайте посмотрим на саму стрелочную функцию, которая держит h в замыкании. Из кода видно, что мы ее передаем в функцию setTimeout, о которой известно, что это api предоставленное платформой (а значит вероятно какая-то часть написана на C++), а так же, что она асинхронная. Платформе реализующей setTimeout наша функция понадобится после асинхронного ожидания и никто платформе не сможет гарантировать, что во время этого ожидания не будет работы GC, поэтому ей ничего не остается, кроме как запросить у v8 создание нового корневого дерева объектов, в которое и будет положена ссылка на данную функцию.
    После же выполнения таймаута платформе больше не нужна наша функция, поэтому ссылка на нее будет удалена из дерева объектов. А так как других ссылок на функцию нет, и она больше не доступна ни из одного корня - GC удалит из памяти и функцию и строку связанную h, которая так же стала недоступна из корня.

    Посмотрим на пример из вопроса. У нас есть стрелочная функция, которая удерживает на себе инстанс компонента через this ссылку (так как стрелочные функции замыкают this). Саму функцию в памяти удерживает промис порожденный вызовом loader('url'), так как мы отдали её в метод then. Других ссылок на данную функцию нет, а значит и сама функция и ее замыкание (инстанс компонента) будут "жить" не менее "жизни" промиса.
    Скажем был отправлен запрос на сервер, но потом компонент в котором был объявлен промис и колбек был удален.
    И после удаления приходит ответ от сервера, и он выполнит колбек. Это значит что колбек остался в памяти со всеми переменными контекста
    Если других ссылок не осталось, то инстанс компонента будет удерживаться от очистки через промис.

    Теперь стоит разобраться с самим промисом. У него может быть 3 состояния - pending, resolved или rejected. После перехода в состояния resolved или rejected промис может выполнить сохраненные колбэки в ближайшем микротаске, а после он удалит на них ссылки из себя, в следствии чего, память удерживаемая замыканием колбэка может быть очищена (при отсутствии на нее других ссылок, достижимых из какого-либо корня).
    В состоянии pending промис может потенциально находится бесконечно долго, при этом ссылаясь на все колбэки переданные ему в методы then, catch или finally, а значит так же косвенно ссылаясь на их замыкания. И тут все зависит от того, кто ссылается на данный промис, и достижим ли он из корня. И да, промис вполне может быть удален из памяти так и не дождавшись своего завершения.
    интересное умозаключение
    Если Promise - это обещание, то в данном случае оно будет нарушено?


    В комментах к вопросу есть еще один интересный пример:
    function getSomething(){
      return new Promise((resolve, reject)=>{
        if(sys_condition){
           resolve();
        } 
      })
    }
    
    function testPromise(){
      let config = {....}
      getSomething().then(()=>{
         #use config
         goOn(...config)
      })
    }
    
    testPromise();
    У нас есть вызванная 1 раз функция testPromise, которая получает из функции getSomething промис, в который с помощью метода then сохраняет колбэк, удерживающий в замыкании переменную config. Сам промис она нигде не сохраняет, что здесь очень важно.
    В функции getSomething мы просто возвращаем промис созданный через его конструктор, который как мы уже знаем нигде больше не сохраняется. И на этом могло бы все и закончится, без вызова колбэка независимо ни от чего. Но конструктор промиса выполняет свой колбэк синхронно, а кроме того он передает в него 2 функции - resolve и reject, которые в своем замыкании ссылаются на только что созданный промис (а это уже 2 ссылки на него, хотя мы то его никуда не сохраняли). Переменная reject никак не используется, а значит спокойно может быть удалена после завершения колбэка. Переменная resolve просто вызывается как функция внутри условия, но более тоже никак не используется и никуда не сохраняется, а значит так же может быть удалена.
    В этом примере. если sys_condition = false и resolve не вызовется, это значит что создается утечка памяти
    Нет, утечки памяти не будет. Колбэк созданный в testPromise будет удален вместе с замыканием, так и не вызвавшись ни разу.
    Ответ написан
    3 комментария
  • Отправка формы form автоматически как?

    @Mazino
    Если соответственно вопросу, то:
    document.querySelector('<Тут должен быть валидный css селектор для формы.>').submit()

    Но это сработает если форма построена правильно с точки зрения html т.е заполнены такие поля как action, метод и.т.д. Управление переходом можно осуществить на стороне бекенда, у вас php как я понял. Можно отправить адрес для перехода в заголовке Location. Стандартное поведение браузера заставит его перейти по тому адресу, который он найдет в Location: (url) ответа.
    В ином случае может потребоваться обработка и специфическая сериализация, как и построения запроса, тогда все это ложится на ваши плечи.
    Ответ написан
    Комментировать
  • Как задать динамический маршрут в дочернем элементе?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Убери ведущую / из всех children.
    Ответ написан
    1 комментарий
  • Как уйти из медицины в программисты?

    @big_hasan
    Таких "вайтишников" как вы очень много. И их постоянно прибывает в полку, потому что время от времени появляются в сети офигительные истории успеха в программировании всевозможных медиков, юристов, экономистов, строителей и т.д. Однако реальность такова, что с трудоустройством возникают проблемы даже у людей с профильным образованием и некоторым опытом.

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

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

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

    Еще стоит упомянуть, что мы вступили в эпоху так называемого глубокого машинного обучения, когда получают широкое распространение системы, имеющие некоторые признаки искусственного интеллекта. Вероятно, есть шанс найти себя в науке, на стыке медицины и IT-сферы. Я подозреваю, что разработчики, например, каких-то медицинских экспертных систем могут сильно нуждаться в экспертах в области медицины.
    Ответ написан
    Комментировать
  • Если тебе пишет HR, а ты джун JS без опыта работы, значит ли это что ты указал в описании больше чем знаешь, или что контора низкого уровня?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Что за джуны пошли?
    я как джун мало что понимаю из описании вакансии

    Раньше на собеседовании пацаны с горящими глазами сами тебе рассказывали что есть вот такая штуковина и фыркали а почему вы используете jquery ведь все сидят уже на %framework name%.
    Ответ написан
    3 комментария
  • Как реализовать команду на js?

    Alexandre888
    @Alexandre888 Куратор тега Боты
    Javascript-разработчик
    let money = Math.floor(Math.random() * 1000);  // объявляем переменную money, она отвечает за вычисление случайного числа от 1 до 999 (количество монет)
    
    let job = Math.floor(Math.random() * 4);  // объявляем переменную job, она отвечает за
    вычисление случайного числа от 1 до 3 (если вам нужно больше вариантов профессии - меняйте значение после * , тем самым будет вычисляться число из большего диапазона)
    
    if (job == 1) { // если случайное число 1 - то отправляется сообщение с первой профессией. 
    с другими вариантами ответа принцип работы тот же самый.
        message.channel.send(`Вы работаете поваром и получаете ${money} монет`)
    } else if (job == 2) {
        message.channel.send(`Вы работаете учителем и получаете ${money} монет`)
    } else if (job == 3) {
        message.channel.send(`Вы работаете доктором и получаете ${money} монет`)
    }
    Ответ написан
    2 комментария
  • Как быть медлительному разработчику?

    Robur
    @Robur
    Знаю больше чем это необходимо
    уже больше полугода, и за это время зафейлил большую часть сроков по таскам

    Я за последние 8-10 лет зафейлил большую часть сроков по таскам. Потом понял что проблема в сроках.

    беру время с запасом, но часто и того не хватает.

    Какой запас? Есть давно выведенный эмпирический закон - оценку опытного разработчика надо умножать на pi, если вы джун и сами время определяете, то 2*pi, если вы хотите работать хардкорно, и 3*pi если более близко к реальности.

    Подскажите, как вы ведете задачи, чтобы укладываться в сроки?

    Надо ставить реальные сроки. Но оценка - одна из самых сложных задач. Если только вы не клепаете конвеером одно и то же. Ну и анализ постфактум, то что реально можно улучшить-изменить, надо исправлять.

    И не по теме, как относитесь к медлительным коллегам?

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

    Я например могу сделать что-то супербыстро, пока мне объясняют задачу, в стиле "х**к, х**к и в продакшен", но предпочитаю делать дольше но лучше. Поэтому таски закрываю позже чем мог бы, но это такой код и результат, в котором я и окружающие уверены. Он и через полгода будет хорош, и багов в нем на порядок меньше.
    Ответ написан
    1 комментарий
  • Как быть медлительному разработчику?

    @vitaly_il1
    DevOps Consulting
    А какой feedback от куратора? Может быть это вам кажется что тупите а на самом деле все ОК, начальство довольно?
    Я уже много лет как старый DevOps, но очень-очень часто бьюсь целый день над какой-нибудь ерундовой проблемой :-)
    Ответ написан
    Комментировать
  • Как защитить JS код?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Защитить JS нельзя, т.к. он выполняется на клиенте, а не на сервере.
    Можно усложнить чтение с помощью обфускации. Это отсеет 90% любителей, но особо упорных это не остановит и они прочтут твой код. Тем более, что есть инструменты, помогающие в деобфускации: деобфускаторы, бьютифайеры и пр.
    Хочешь скрыть код - уходи из фронтенда и добро пожаловать в бэкенд, на сервер.
    Ответ написан
    Комментировать
  • Существует ли type-c хаб с выходом на mini-DisplayPort?

    Существуют докстанции для ноутбуков, в них может содержаться необходимый вам набор портов.
    https://www.dns-shop.ru/catalog/f86801706bc84e77/d...
    Ответ написан
    Комментировать
  • Сущетсвует ли способ получения информации с веб страницы в автоматическом режиме с помощью JS без хака?

    @rPman
    Да, если у вас нет возможности установить на пользовательские машины ваше приложение (или к примеру плагин в браузер) то у вас только один путь - написать веб приложение и попросить заходить на него пользователям.

    Тупой пример - открывайте вебсайт в iframe и обновляйте по таймеру. Чуть более правильно - вы должны найти запрос на сервер, с помощью которого вы сможете определить, изменились ли данные или нет, и на своем веб-сервере в бакэнде выполняйте его в цикле с интервалом, как только данные изменились - отправляйте по вебсокет требование обновить страницу (iframe) у пользователей.

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

    Еще проблема, если вы отправите запрос на обновление страницы, пока пользователь работает с этим сайтом, его не сохраненные данные будут потеряны - вас будут тихо ненавидеть, т.е. нужно отслеживать события клавиатуры и мышки и не делать обновление, если они были недавно.
    Ответ написан
    4 комментария