• Сертификаты для frontend-разработчика - какие получить?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    лучший сертификат для frontend-разработчика - это его github аккаунт с крутыми проектами. акцент на "крутыми".
    Ответ написан
    Комментировать
  • Есть ли accessibility linter?

    @AnneSmith
    самая ленивая
    Ответ написан
    Комментировать
  • Объясните про валютный контроль и ИП?

    potter_ru
    @potter_ru
    1. Открыть ИП. Тут вроде все просто.
    При выборе системы налогообложения не поленитесь узнать стоимость патента для вашего вида деятельности.
    Может оказаться, что в вашем регионе/городе использвать ПСН вам будет выгоднее, чем УСН с 6% от дохода.

    3. Зарегистрироваться в Эльбе для бухгалтерии.
    Можно и самому все делать. Это в принципе не сложно, что на УСН, что на ПСН.

    4. Перевести текущий контракт на русский. Можно самому? Заверять насколько я понял не нужно.
    Спросите в банке. В одном у меня приняли как есть на английском, в двух других требовали заверенный нотариально перевод.

    1. Раз в месяц я должен отправить инвойс или акт работодателю с номером счета, со списком выполненных работ (Это обязательно? у меня бессрочный контракт, таски могут быть разные).
    У меня примерно так и выходит, но без списка. Заказчику он не нужен, валютному контролю тоже, им только счет и акт нужен.

    2. Деньги падают в $ на транзитный счет, там банк проверяет сделку, инвойс (акт) и контракт я так понимаю?
    Когда деньги пришли, вы должны будете в течение 15 рабочих дней предоставить в банк справку о валютных операциях, справку о подтверждающих документах (+ сами документы - счет и акт) и распоряжение насчет пришедшей суммы. Банк проверит справки и выполнит рапоряжение. распоряжение может быть на перевод валюты на ваш текущий валютный счет, ил на продажу валюты за рубли с зачислением вырученной суммы на ваш рублевый счет.

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

    4. С рублевого счета я могу отправлять/делать с суммой что угодно?
    С рублевого или валютного счета ИП отправьте дньги себе на счет физ.лица (это тоже операция подпадающая под валютный контроль и требует справки о ВО, но она простая) и уже оттуда делайте с ними что угодно.

    P.S Если уже какое то время получал от этой фирмы зп на paypal и выводил на счет в Сбере, может это как то всплыть?
    очень маловероятно. в назначении платежа надеюсь не было слова зарплата :)
    И вообще, когда станете ИП, сразу забудьте про слово "зарплата". Все что вам придет на счет от клиента это ваш предпринимательский доход.

    Желаю удачи !
    Ответ написан
    Комментировать
  • Как сравнить массивы и найти новый элементы?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Две операции при аяксе:
    1. Начальная (полная) загрузка сообщений (сразу при загрузке страницы = инициализация пула сообщений и его заполнение с проверкой статуса прочтения из LocalStorage)
    2. Инкрементальное обновление сообщений: пришло новое - добавили к себе в пул сообщений (ID+сообщение).

    Когда прочли - записали ID и статус сообщения: прочитано/не прочитано в LocalStorage (также, дополнительно можно и серверу сообщить через AJAX, что клиентом изменён статус сообщения с ID таким-то...).
    Это для гостя.

    Но лучше - использовать залогиненного пользователя и базу данных, совместно с LocalStorage.
    И все статусы прочитанных сообщений - хранить также и на сервере.
    Ответ написан
    Комментировать
  • Английский. Где учить в интернете?

    @AnneSmith
    самая ленивая
    радио, прежде всего слушать радиопрограммы или аудио подкасты, пока тошнить не начнет
    словарь - только английский толковый, никаких переводов на русский

    начинайте с простого материала, хоть даже с детских передач и мультиков, чтобы набрать минимальный разговорный, а потом только аудио, видео перебивает слишком большим количеством визуальной информации, и ушам не нужно напрягаться, чтобы понять на слух

    аудирование - самый сложный навык, поэтому ему учатся с рождения, потом учатся говорить, а уже только потом читать и писать

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

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

    осилите преподавателя-носителя языка хоть по скайпу - это будет идеально, но это должен быть именно преподаватель, который умеет преподавать english as a second language - ESL

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

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

    не слушайте никого, кто будет говорить, что вам сначала нужно выучить грамматику
    сначала надо освоить разговорный английский, хоть на уровне 5-летнего ребенка, а потом вы сами сможете понимать, что и как вам учить
    Ответ написан
    1 комментарий
  • Как в forEach использовать await?

    @RidgeA
    никак

    лучше так:

    const ids = await fetch('/api/ids/').then(response => response.json()).then(response => response.ids);
    const promises = ids.map((id) => fetch(`/api/items/${id}`).then(response => response.json()));
    const items = await Promise.all(promises);
    Ответ написан
    Комментировать
  • Почему some отрабатывает, а every нет?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    every()каждый») – более строгий, чем some()некоторые»)

    every() вернёт true только, когда по всем элементам выполнено условие.
    some() вернёт true, как только хотя бы в одном встретится выполнение условия.

    В вашем примере можно переписать без some() старым добрым indexOf():
    const availableVersions = versions.filter(
      version => !!~item.version_ids.indexOf( version.id )
    );

    Fiddle

    !!~ из любого значения, кроме -1, вернёт true, а для -1 вернёт false.
    Ответ написан
    Комментировать
  • Как при выборе значения в одном селекте, сбрасывать другие?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Добавляете selected каждому элементу items, используете его в v-model, также отслеживаете переключение списка в родителе и сбрасываете selected всех элементов, кроме переключенного. Как-то так.

    UPD. В комментариях было высказано мнение, будто бы предлагаемое решение является хаком, потому что...

    ...это делается за пределами компонента. Плюс надо добавить selected для каждой карточки. Их может быть много. Нужно как то событиями реализовать.

    1) За пределами компонента - а как иначе-то? Ведь изменение одного экземпляра компонента должно затронуть другие.

    2) Добавление selected - не проблема. Делайте map массива items, закидывая в каждый элемент этот selected. Типа так. Или можете устанавливать значения selected с помощью $set в методе onCardChanged, типа так (а вот это уже действительно хак).

    3) "Событиями реализовывать" - но ведь так и сделано. У вас была реализована генерация события input, обработку которого я и добавил.

    UPD. Хотя можно оставить selected свойством компонента (дефолтное значение только объектом сделать), пусть хранит id элемента items и выбранный пункт выпадающего списка:

    <vue-select
      :value="selected.id === item.id ? selected.option : null"
      :options="item.versions"
      @input="selected = { id: item.id, option: $event }"
    ></vue-select>
    Ответ написан
    4 комментария
  • Объясните про валютный контроль и ИП?

    kawabanga
    @kawabanga
    2. Открыть валютный счет в банке. Вот тут не все так просто. Я живу в небольшом городе, банков здесь немного, всяких Точек, Модульбанков и Альфа-банков здесь нет. Как быть? Можно ли пользоваться Сбером? (Есть Россельхозбанк, Совкомбанк, ВТБ24, Сбер).

    Узнайте о банках, которых у вас нет. Точно скажу что Модуль Банк раньше ездили в города, в которых они отсутствуют. Да и от банка вам много не надо.

    3. Зарегистрироваться в Эльбе для бухгалтерии.

    Зачем? Зачем тратить 9-15К за то что вы сами можете за час раз в год сделать?

    4. Перевести текущий контракт на русский. Можно самому? Заверять насколько я понял не нужно.

    Если вы ИП на упрощенке, и если сумма ваших обязательств менее 50К долларов, то паспорт сделки не нужен. Пусть спецы поправят, но в Модуле мне именно так сказать.

    Вроде все?
    1. Раз в месяц я должен отправить инвойс или акт работодателю с номером счета, со списком выполненных работ (Это обязательно? у меня бессрочный контракт, таски могут быть разные).

    Нет, если это не требует работодатель.

    2. Деньги падают в $ на транзитный счет, там банк проверяет сделку, инвойс (акт) и контракт я так понимаю?

    Банк все делает сам, цена вопроса для Модуля - 300 руб транзакция до 200К кажется.


    4. С рублевого счета я могу отправлять/делать с суммой что угодно?

    если вы ип на упрощенке 6%, то вы можете делать с этими деньгами что угодно. Не забывая платить в пенсионный годовые взносы, налог 6% (а еще узнайте у себя в городе про налоговые каникулы для ИП), и 1% на все что выше 300К.
    Ответ написан
    5 комментариев
  • Объясните про валютный контроль и ИП?

    avanesov
    @avanesov
    Посмотрите в сторону Тинькофф банка, у них вроде есть валютные счета для ИП + у них есть бесплатная бухгалтерия, они бесплатно рассчитывают вам налог (на основе поступающих на счет суммы + сможете указать другие операции, которые были не через Тинькофф) + есть налоговый и пенсионный календарь, не надо никому ничего платить.

    Скорее всего (но я не уверен) налоговая попросит доказать, что ваша сделка не является контролируемой (делается это легко, нужно просто удовлетворить трем пунктам и написать заявление.
    Ответ написан
    5 комментариев
  • Как перебрать массив?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Вот вам для примера
    https://jsfiddle.net/yarkov_aleksei/v2tuxeyb/1/
    const groups = [
    	{ id: 1, name: 'group 1', items_ids: [1, 2, 4] },
      { id: 2, name: 'group 2', items_ids: [8, 2, 3] },
      { id: 3, name: 'group 3', items_ids: [12, 1] },
      { id: 4, name: 'group 4', items_ids: [] },
      { id: 5, name: 'group 5', items_ids: [] },
    ]
    
    const result = groups
    	.filter(group => group.items_ids.length > 0)
      .reduce((prev, next, i, acc) => prev.concat(next.items_ids), [])
    
    console.clear()
    console.log(result) // [1, 2, 4, 8, 2, 3, 12, 1]
    console.log([...new Set(result)]) // [1, 2, 4, 8, 3, 12]
    Ответ написан
    Комментировать
  • Что за фигня с приравниванием в js?

    Ptolemy_master
    @Ptolemy_master
    Не мешало бы немного ознакомиться с объектами в JavaScript. Когда вы "приравниваете" объекты, вы на самом деле приравниваете ссылки. То есть разные переменные указывают на один и тот же участок памяти. Для того, чтобы избежать этого поведения, следует использовать "клонирование". Делать это можно разными способами, от ручного (создаете вручную объект и приравниваете по очереди все поля от другого) до библиотечных, почти все либы jQuery, Angular etc. имеют функции клонирования.
    Вот, по ссылке, почитайте https://stackoverflow.com/questions/728360/how-do-...
    Ответ написан
    4 комментария
  • Как улучшить код?

    vahe_2000
    @vahe_2000
    я не понимаю что вы делаете наверное работайте на redux или flux.вы можете использовать try/catch и await вместо then.может что то вроде этого .что поделать с let record.вы даже не использовали.из чего вы взяли item

    .then((response) => {
                item = response;
                success = true;
              })


    async createItem() {
        this.isLoading = true;
    
        try {
          let res = await this.$fetch(`/api/items/${this.params.id}/new/`, {
            method: "POST",
            body: JSON.stringify(this.createItemBody)
          });
          let json = await res.json();
    
          await this.dispatch("fetchSecondItem", id);
          this.items.push(json);
          this.dispatch("notification", {
            type: "success",
            message: "Item was created."
          });
          this.isLoading = true;
          this.resetForm();
        } catch (err) {
          this.isLoading = false;
          console.log(err);
        }
      }
    Ответ написан
    Комментировать
  • Вопрос по промисам, что я упустил?

    zo0m
    @zo0m
    full stack developer
    так вы уже обработали ошибку выше, внутри login() функции.
    Пробросьте ошибку дальше а не просто пишите в лог.
    .catch(err => {
    window.console.log(err);
    throw err;
    }
    );
    Ответ написан
    1 комментарий
  • Как лучше написать функцию для add/remove event listeners?

    teknik2008
    @teknik2008
    Расскажите про GOLANG. Мне интересно
    Мое виденье, хотя можно реализовать через события, а не через элементы. Но вообщем кешировать обработчики, в общем хранилище.
    Тык
    class Elems {
        constructor() {
            this.listeners = new Map();// коллекция элементов и обрабочиков
            this.options = { triggers: ['click'] }
            this.el=document.documentElement;
        }
    
        toggle(){}
    
        show(){}
    
        hide(){}
    
        clickOutsideHandler(){}
    
        addEvenetsListeners() {
            /**
            * Функция обновления коллекции обработчиков на элементе
             * 
             * @author teknik2008
             * @param {HTMLElements} el - элемент для которого устанавливаетсся обработчик 
             * @param {string} event - событие которое на которое устанавливаетсся обработчик 
             * @param {function} handler - обработчик события
             * @returns {void}
             */
            let listeners = this.listeners;
            function addListenersCollections(el, event, handler) {
                if (!listeners.has(el)) {
                    let model = {};
                    model[event] = [];
                    model[event].push(handler);
                    listeners.set(el, model);
                    return;
                }
                let model = listeners.get(el);
                model[event] = event in model ? model[event] : [];
                model[event].push(handler);
                listeners.set(el, model);
            }
            this.options.triggers.forEach((event) => {
                switch (event) {
                    case 'click': {
                        let elHandler = this.toggle.bind(this);
                        this.el.addEventListener('click', elHandler, false);
                        addListenersCollections(this.el, 'click', elHandler);
    
                        let documentHandler = this.clickOutsideHandler;
                        document.addEventListener('click', documentHandler, false);
                        addListenersCollections(document, 'click', documentHandler);
                        break;
                    }
                    case 'hover': {
                        this.el.addEventListener('mouseenter', this.show.bind(this), false);
                        this.el.addEventListener('mouseleave', this.hide.bind(this), true);
                        break;
                    }
                    case 'focus': {
                        this.el.addEventListener('focus', this.show.bind(this), false);
                        this.el.addEventListener('blur', this.hide.bind(this), true);
                        break;
                    }
                    default:
                        throw new Error(`This ${event} is not defined.`);
                }
            });
        }
    
        removeEventListener() {
            let listeners = this.listeners;
            let elems = [this.el, document];
            this.options.triggers.forEach((event) => {// тут я понял что можно было коллекцию сделать через события, но я думаю мысель понятна
                elems.forEach(el => {
                    if (!listeners.has(el)) {
                        return;
                    }
                    let model = listeners.get(el);
                    if(!(event in model)){
                        return;
                    }
                    let handlers=model[event];
                    handlers.forEach(handler=>{
                        console.log(el,event,handler)
                        el.removeEventListener(event,handler);
                    })
                })
            })
        }
    }
    Ответ написан
    Комментировать
  • Почему не удаляется event listener?

    teknik2008
    @teknik2008
    Расскажите про GOLANG. Мне интересно
    Через декоратор
    let _this=this
    let hideHandler=(e)=>{_this.hide(e,this)}
    this.overlay.addEventListener('click', hideHandler);
    //...... где-то по коду
    this.overlay.removeEventListener('click', hideHandler);
    Ответ написан
    Комментировать
  • Как лучше всего использовать вложенные лупы?

    boratsagdiev
    @boratsagdiev
    Для полного flat'а вложенных массивов:

    const flattenArr = (arr) => {
    
    	const flatArray = [];
    	const parseArray = (arr) => {
    		arr.forEach(item => Array.isArray(item) ? parseArray(item) : flatArray.push(item))
    	}
    	parseArray(arr)
    
    	return flatArray
    }


    jsbin.com/guyisequwa/edit?js,console
    Ответ написан
    Комментировать
  • Как лучше инициализировать класс по классу в HTML?

    Обычно вызывается функция, которая находит все элементы с нужным классом, а затем создается MutationObserver с коллбэком в виде той же функции.
    Ответ написан
    3 комментария
  • Как лучше установить значение по умолчанию?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Можно применить деструктуризацию + значение по умолчанию:

    constructor({ closable = true }) {
      this.isClosable = closable;
    }

    Можно проверять наличие свойства:

    this.isClosable = props.hasOwnProperty('closable') ? props.closable : true;

    Или проверять на равенство undefined:

    this.isClosable = props.closable === undefined ? true : props.closable;
    Ответ написан
    Комментировать
  • Как лучше установить значение по умолчанию?

    Stalker_RED
    @Stalker_RED
    Выражение (false || true) всегда вернет true, в том-то и смысл оператора "или".

    var props1 = {closable: false, foo: 'bar'}
    var isClosable1 = props1.closable !== undefined ? props1.closable : true;
    
    var props2 = {foo: 'bar'}
    var isClosable2 = props2.closable !== undefined ? props2.closable : true;
    
    console.log(isClosable1, isClosable2)
    Ответ написан
    Комментировать