• Нужно ли использовать iife?

    Xuxicheta
    @Xuxicheta
    инженер
    пока не приняли это https://github.com/tc39/proposal-do-expressions можно использовать iife как замену
    let name = 'vasya';
    if (cond1) {
      name = 'pavlek';
    }
    if (cond2) {
      name = 'semen';
    }

    мы можем убрать let использовав iife
    const vasya = (() => {
      switch (true) {
        case cond2: return 'semen';
        case cond1: return 'pavlek';
        default: return 'vasya';
      }
    })()


    Пример может не идеален (вообще надо бы именованную функцию), но я иногда так делаю. Наглядней, чем let и цепочка условий.

    Замыкания тут вообще не причем, любая функция в js образует замыкание, и iife конечно в том числе. В моем примере вот оно используется, но это не является обязательным.
    Ответ написан
    Комментировать
  • Может ли провайдер видеть настройки моего роутера и клиентов?

    DevMan
    @DevMan
    зачем ему это видеть, если параметры подключения провайдер сам отдает и, естественно, знает их?
    что творится на вашем роутере/сети прову фиолетово, пока это не нарушает функционирование его сети.

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

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Почему не срабатывает computed свойство?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    valid: false к каждому в form[]
    и if(!item.valid){ знаком не ошиблись?

    5d81121f394a4466652655.png
    form.valid вы не ставите свойство реактивным, так что надо изначально его ставить в data
    Ответ написан
    8 комментариев
  • Как настроить linux так, чтобы на нем было несколько пользователей и у каждого свои права на проекты?

    @Tabletko
    никого не трогаю, починяю примус
    Что вы называете "танцами с бубном"?
    Я бы сделал по группе на каждый проект и указал их группами владельцев каталогов соответствующих проектов. Потом, по необходимости, добавлял пользователей в эти группы
    Ответ написан
    Комментировать
  • Как обновить значение в store?

    0xD34F
    @0xD34F Куратор тега Vue.js
    set(count) {
      this.$store.commit('setCount', {
        count,
        index: this.index,
      });
    },
    Ответ написан
    Комментировать
  • Как конвертировать JSON массив в JavaScript массив?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const newData = JSON.parse(data).map(Object.values);
    Ответ написан
    Комментировать
  • Стоит скачать Safari на Windows для тестирование сайтов?

    GavriKos
    @GavriKos
    Safari тащемта нет под Windows. Если мы говорим о адекватных современных версиях.
    Ответ написан
    2 комментария
  • Есть ли в природе аналог CSS Grid?

    wapster92
    @wapster92 Куратор тега CSS
    Скрипты для имитации никогда не работали хорошо, но кто-то ими обходился. А так float в последствии спас всех bootstrap, с появлением flex многих все устроило но в ie-9-10 он все равно работал с багами. До float были таблицы, до таблиц не было css все обходились HTML атрибутами. Как то так.
    Ответ написан
    1 комментарий
  • Почему я не могу использовать this в C#?

    myjcom
    @myjcom
    The * or -> operator must be applied to a pointer

    Не так
    "К указателю должен быть применен оператор * или ->",

    А так
    Оператор * или-> должен быть применен к указателю

    Используй точку
    https://docs.microsoft.com/ru-ru/dotnet/csharp/lan...
    Ответ написан
    Комментировать
  • Как получить все элементы с определенным id и применить к ним какую либо функцию?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    id обязательно должны быть уникальными. Нельзя использовать один id для нескольких элементов.

    Зато className может присутствовать у многих элементов. Назначьте всем слайдам класс slide-item

    Upd. примерно так можно, коротко и просто:
    Ответ написан
  • Где практически применить язык Си?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    На языке C можно программировать вообще всё. Соответственно "простой обыватель" может написать то, что ему нужно.
    Ответ написан
    Комментировать
  • Как в созданный массив сделать push из query?

    Stalker_RED
    @Stalker_RED
    Он не пустой, он заполнился.

    Но заполнился он только во время выполнения query, а если ты выведешь его содержимое ДО ЭТОГО, то да, он изначально был пустой.

    Что делать - научиться писать асинхронно.
    Ответ написан
    2 комментария
  • Как исправить ошибку при большом количестве fetch запросов?

    Stalker_RED
    @Stalker_RED
    Можно.
    Купить сервер пошустрее, или купить побольше серверов.

    Или научиться хоть немного думать о производительности еще на этапе проектирования :)

    UPD: sheeel, вот ты мне не веришь, хотя скорее всего зря. Я там в комментах писал как проверить.

    Попробую объяснить на пальцах что такое оверхед, и где у тебя архитектурный косяк.

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

    И все счастливы.

    А потом вдруг слесарю понадобилось 50 гаек. И он 50 раз посылает помощника за гайками. И каждый раз парень носит по одной. И кладовщик (он чуток поумнее этого парня), уже не заглядывает в журнал чтобы узнать какой стеллаж ему нужен, у кладовщика для этого кеш в голове есть! Но он вынужден все равно открывать коробочку, вынимать гаечку, и записывать в журнал. Он бы и рад отдать 50 гаек в одном пакете, он так умеет! Но он четко следует инструкциям. Запрошена одна гайка - вот вам одна. А потом после 20 гаек у кладовщика обед, и парень возвращается не с гайкой, а invalid response.

    Так вот, вы почему-то решили, что все упирается в скорость, с которой паренек бежит к складу и от склада. Это тоже важно, осбенно если склад далеко. Inviz Custos и Максим Зайцев подсказывают вам, что нужно больше пареньков, и как правильно их поставить в очередь у окошка. Это тоже важно, ага.

    Но гораздо круче было бы запросить все 50 гаек за один раз.
    Ответ написан
    1 комментарий
  • Как управлять запросами к API на клиенте?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Писать свой или искать готовый механизм очереди с контролем времени.

    В очередь (массив) класть запрос (метод, параметры) и callback. Либо промисы.

    Держать массив с временем ответов последних 100 (30) вызовов. Если самый древний более 10 (5) секунд назад, можно выполнить очередной.

    Как-то написал вот такую
    кривую реализацию


    Модуль очереди:
    /**
     * Hold Your Horses!
     * Promise-based dispatcher that respects frequency limits.
     * It queues requests so that no more than N are processed within 1 second.
     * Those can go in parallel.
     *
     * Instantiate the new HH with options, specifying time limit.
     * Method .add(function) adds a new job to the queue.
     * Argument function should return Promise object that starts to process only after the function is called.
     * @return Object Promise.
     */
    
    function HorsesHolder(options) {
      options         = options || {};
      this.rps        = options.rps || 3; // requests per second
      this.parallel   = options.parallel || this.rps; // max parallel running jobs
    
      this.times      = []; // -1: slot is busy, 0: slot is free, positive timestamp - time slot's job has finished
      for (let i=0; i<this.rps; i++) this.times.push(0); // [0, 0, 0] initially
    
      this.queue      = [];
      this.inprogress = [];
      this.debug      = !!options.debug;
      
      this.debug  &&  console.log("%s ms: [HH] initialized", this.ts());
    }
    
    
    HorsesHolder.prototype.add = function(promiseMaker) {
      var self = this;
      
      return new Promise(function(resolve, reject) {
        self.queue.push({
          resolve: resolve,
          reject: reject,
          promiseMaker: promiseMaker,
        });
        
        self._ping();
      });
    };
    
    
    // Decide: work or wait
    HorsesHolder.prototype._ping = function() {
    
      if (this.queue.length === 0) {
        this.debug  &&  console.log("%s ms: [ping] queue is empty", this.ts());
        return;
      }
      
      const best = this._bestTime();
      
      if (best === -1) {
        this.debug  &&  console.log("%s ms: [ping] cannot go: %s", this.ts(), JSON.stringify(this.times));
        return;
      }
      
      const index = this.times.indexOf(best);
      
      this.debug  &&  console.info("%s ms: [ping] exec now at index %d", this.ts(), index);
    
      this._execute(index);
    }
    
    
    /**
     * Out of current times[] finds the best to occupy, if possible;
     * otherwise -1
     */
    HorsesHolder.prototype._bestTime = function() {
      let best = -1;
    
      for (let i=0; i<this.rps; i++) {
        const time = this.times[i];
        if (time === 0) return 0;        // can go now - nothing better!
        if (time < 0) continue;          // previous not finished yet
        if (this.ts() < time + 1000) continue; // not yet
    
        if (best === -1) best = time;
        else best = Math.min(best, time);
      }
      
      return best;
    }
    
    
    HorsesHolder.prototype.ts = function() {
      return (new Date()).getTime();
    }
    
    
    HorsesHolder.prototype._execute = function(index) {
      this.times[index] = -1; // mark busy
      const job = this.queue.shift();
      this.inprogress.push(job);
    
      const self = this;
      
      job.promiseMaker()
      .then(function(r) {
        self.debug  &&  console.info("%s ms: [HH] Job done at index %d", self.ts(), index);
        job.resolve(r);
      })
      .catch(function(err){
        self.debug  &&  console.error("%s ms: [HH err] Error at index %d: %s", self.ts(), index, err.toString());
        job.reject(err);
      })
      .finally(function(){
        self.inprogress.splice( self.inprogress.indexOf(job), 1);
        self.times[index] = self.ts();
        setTimeout(() => self._ping(), 1000);
      });
    }
    
    export default HorsesHolder;


    Модуль работы с VK API:
    /*global VK*/
    /**
     * Function returns Promise for each VK API call.
     * Respects the 3 call per second limit.
     *
     * by Sergei Sokolov <hello@sergeisokolov.com> 2019.
     */
     
    import HorsesHolder from '@/utils/horsesholder';
    
    const debug = true;
    
    const HH = new HorsesHolder({ debug });
    
    
    export default function asyncVK(methodName, data) {
    
    	return HH.add(() => {
    
    		data = data || {};
    		if (!data.v) data.v = 5.92; // VK API version https://vk.com/dev/versions
    		
    		return new Promise((res, rej) => {
    			VK.Api.call(
    				methodName,
    				data,
    				r => {
    					if (r.error) {
    						debug && console.error("[asyncvk] VK API call error:", r.error);
    					}
    					
    					
    					if (r.response) {
    						
    						res(r.response);
    						
    					} else if (r.error) {
    						
    						rej(r.error);
    						
    					} else {
    						
    						debug && console.error("[asyncvk] VK API bad response:", r);
    						
    						rej(r);
    						
    					}
    				}
    			)
    		});
    	});
    }


    Ответ написан
    1 комментарий
  • Где искать Middle/Senior backend Node.js разработчиков?

    @MasterMike
    Вопрос не в том, где они тусуются.
    Вопрос в том, что вы им готовы предложить )

    upd. Ну и это, "сильно благодарна" - это сколько в $? )
    Сколько там нынче берут за хант программиста средней руки, полторы его зарплаты или больше? )
    Ответ написан
    Комментировать
  • Как настроить домашний сервер на Linux?

    kotomyava
    @kotomyava
    Системный администратор
    Зачем вам вообще графический интерфейс на сервере? Для описанных задач он совершенно не нужен.
    Для удалённого доступа замечательно подходит ssh.
    Для торрентов есть transmission, имеющий cli и web интерфейс.

    Как основу лучше использовать что-то более распространённое, например, debian/ubuntu или centos в серверном варианте. Будет куда проще найти информацию.
    Ответ написан
    9 комментариев
  • Что такое vue.js, насколько он мейнстримен и насколько эффективен?

    Fragster
    @Fragster
    помогло? отметь решением!
    Что это
    Vue (произносится /vjuː/, примерно как view) — это...
    для чего его разработали?
    Чтобы не думать над DOM, а думать над структурой данных и их изменением.

    Сложилось впечетление, что это некое хипстерское неэффективное поделие. Это ведь не так?
    нет, работает вполне эффективно и быстро

    Его ведь используют в каких-нибудь крупных проектах?

    https://github.com/vuejs/awesome-vue#appswebsites Кстати, aliexpress на нем работает. Ну и евроньюс.

    Насколько он упрощает разработку?

    По сравнению с purejs и jquery - очень сильно, по сравнению с другими (react/angular) меньше преимущество, но (ИМХО) оно все равно есть

    Насколько быстро он работает?

    Оверхед малозаметен

    Разработчики предлагают использовать его в паре с Node.JS, но что насчет более мейнстримного в веб-разработке PHP?

    Я использую в связке с laravel, например для создания взаимосвязанных элементов форм. Вполне удобно, но очень хочется все сделать spa (потому как очень удобно все делать в одном месте). А тут уже получается требование server side рендеринга для поисковых ботов, что невозможно без nodejs.

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

    Стоит. Любая задача, где отображаемые данные зависят от ввода пользователя. Даже корзина интернет магазина с кнопками изменения количества и удаления - даже если каждая из них шлет данные на сервер по ajax. Формы из нескольких этапов, всякие калькуляторы и прочее и прочее.
    Ответ написан
    2 комментария
  • VueJS: где лучше хранить css, в компонентах .vue или main.css?

    @quadabrashell
    Vue-way - хранить стили в .vue, для того оно и придумано. Компонентный подход улучшает восприятие кода.

    css-файл можно оставить только если, например, он уже остался от верстальщика и лень раскидывать по компонентам.
    Ответ написан
    2 комментария