Задать вопрос
  • Стоит скачать 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 комментария
  • VueJS: где лучше хранить css, в компонентах .vue или main.css?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    В Vue приложении используем препроцессор (scss). Кроме того используем внешние пакеты для вертикального ритма и сетки.

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

    Вариант импортировать scss-файл с определениями в каждом компоненте сразу откинули, ибо люди мы ленивые.

    Что делаем:
    Подключаем в точке входа (main.js) основной стилевой файл:
    import '@/styles/main.scss';
    import Vue from 'vue';
    //...

    В нем подключаем всякое-разное-глобальное-базовое:
    @import "base/normalize";
    @import "base/init";
    @import "base/typography";
    @import "base/code";
    @import "base/links";
    @import "base/tables";
    @import "base/buttons";
    @import "base/control-group";
    @import "base/general-form";
    @import "parts/transitions";
    ...

    Далаем два файла: env-development.scss и env-production.scss
    $NODE_ENV: development;
    @import "cfg-vars";

    $NODE_ENV: production;
    @import "cfg-vars";

    Переменная $NODE_ENV нам нужно. чтобы управлять стилями в зависимости от окружения.
    Дальше в cfg-vars.scss подключаем/пишем все необходимые глобальные конфиги
    $DEV_MODE: $NODE_ENV == development;
    $MAX_INT32: 2147483647;
    
    @import "cfg-vrhythm";
    @import "cfg-grid";
    @import "../../../node_modules/vrhythm/source/vrhythm";
    @import "../../../node_modules/bs-grid-system/source/scss/bs-grid";
    @import "../mixins";
    @import "cfg-z-indexes";
    
    $wt-family-base: "Open Sans", sans-serif;
    $wt-family-head: "Roboto Slab", serif;
    $font-family-monospace:  "Fira Code", Menlo, Monaco, Consolas, "Courier New", monospace;
    
    //==
    //== Color palette
    //== ======================================= ==//
    
    $palette-light-blue: #3c8dbc; // Primary
    $palette-red       : #dd4b39; // Danger
    $palette-green     : #00a65a; // Success
    $palette-aqua      : #00c0ef; // Info
    $palette-yellow    : #f39c12; // Warning
    
    ...


    Почти всё готово. Осталось только автоматически подключить эти конфиги к сборке.
    Идём в vue.config.js и добавляем секцию css:
    const NODE_ENV = process.env.NODE_ENV === 'development'
        ? 'development'
        : 'production';
    //...
    module.exports = {
        //...
        css: {
            extract: NODE_ENV === 'production',
            loaderOptions: {
                sass: {
                    data: `@import "@/styles/config/env-${NODE_ENV}.scss";`,
                },
            },
        },
    };


    Теперь мы спокойно пишем стили компонентов на scss прямо vue-файлах, и оставляем возможность какие-то стили писать в отдельных файлах.

    Enjoy!
    Ответ написан
    6 комментариев
  • Бесплатные среды для программирования на Vue.js/React.js?

    KornevaViktoria
    @KornevaViktoria
    Frontend Developer
    Visual Studio Code
    Ответ написан
    Комментировать
  • Как присвоить объект по значению, а не по ссылке?

    It depends
    Если все свойства твоего объекта - простые, то const newObj = { ...sourceObj };
    Если свойства объекта могут быть объектами и тебе нужно их тоже скопировать, то нужно копировать рекурсивно
    можешь подсмотреть тут
    https://github.com/mateusmaso/underscore.deepclone...
    Ответ написан
    Комментировать
  • Что такое коллекция в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Четкого определения «collection» в JavaScript не встречал. Интуитивно, коллекция это структура данных для хранения нескольких значений.

    Объект и массив, по-моему, можно отнести к коллекциям.

    В ES6 появились два новых типа данных – Map и Set, которые тоже можно отнести к «коллекциям». В переводе на Русский язык словом «Коллекция» назвали из них именно Set, предназначенный для хранения только уникальных значений. Но я бы не считал требование уникальности значений отличительным признаком «коллекций» вообще.
    Ответ написан
    2 комментария
  • Запись enum без значения?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    https://www.tutorialsteacher.com/typescript/typesc...
    enum EPhone  {
        INVALID,
        ALREADY_EXISTS,
        SUCCESS
    }

    Аналог
    enum EPhone  {
        INVALID=0,
        ALREADY_EXISTS=1,
        SUCCESS=2
    }
    Ответ написан
    Комментировать
  • Какие значения переменных в обработчиках событий?

    Вот этот кусок кода выполняется сразу, а не после загрузки или при ошибке:

    img.onload = counter++;
    img.onerror = counter++;

    Т.е. вы дважды увеличиваете счётчик на 1, и в свойствах onload/onerror зачем-то оказываются числа, а не функции. Поэтому и не работает.
    Ответ написан
    2 комментария
  • Как скрыть, CSS? script?

    См. псевдокласс :empty («пустой» на англ.)

    CSS:
    div.wices:empty {
      display: none;
    }

    Но имейте в виду, что пробелы, переносы строк – всё это делает div не-пустым в понимании псевдокласса.
    Ответ написан
    1 комментарий