• Почему jest так реагирует на import?

    @AndreySFN Автор вопроса
    Нашёл решение здесь: https://stackoverflow.com/questions/35756479/does-...
    Для тех, кому лень переходить по ссылке, вкратце, добавил в корень проекта файл ".babelrc" с содержанием
    {
      "env": {
        "test": {
          "plugins": ["@babel/plugin-transform-modules-commonjs"]
        }
      }
    }


    После чего установил es2015 transform plugin
    npm install --save-dev @babel/plugin-transform-modules-commonjs
    Ответ написан
    1 комментарий
  • Как сверстать такой блок?

    kirbi1996
    @kirbi1996
    Либо используешь флекс, либо через абсолютное позиционирование
    Ответ написан
    Комментировать
  • Как удалить объект из массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const index = arr.findIndex(n => n.id === id);
    if (index !== -1) {
      arr.splice(index, 1);
    }

    или, если нужен новый массив:

    const newArr = arr.filter(n => n.id !== id);

    Если же id имеют не уникальные значения, то создание нового массива остаётся без изменений, а модификация существующего может выглядеть так:

    for (let i = arr.length; i--;) {
      if (arr[i].id === id) {
        arr.splice(i, 1);
      }
    }

    или так (да, reduceRight используется не совсем по назначения, как и оператор &&):

    arr.reduceRight((_, n, i, a) => n.id === id && a.splice(i, 1), null);

    или так:

    let countDeleted = 0;
    
    for (let i = 0; i < arr.length; i++) {
      arr[i - countDeleted] = arr[i];
      countDeleted += arr[i].id === id;
    }
    
    arr.length -= countDeleted;

    или так:

    arr.splice(0, arr.length, ...arr.filter(n => n.id !== id));
    Ответ написан
    Комментировать
  • Как очистить кеш url редиректов?

    Afres
    @Afres
    Product Owner
    Чтобы очистить кэш редиректа в Google Chrome:
    1. Откройте новую вкладку
    2. Откройте консоль разработчика (нажать F12 или Ctrl+Shift+i)
    3. Зайти в настройки консоли и поставить там галочку "Disable cache" в секции "Network".
    4. На открытой вкладке с открытой консолью открыть сайт, редирект которого закэшировался.
    5. Profit!
    Ответ написан
    2 комментария
  • Стоит ли избегать знака присваивния := в Go при нагруженном бекенде?

    Tyranron
    @Tyranron
    Это неважно.
    Не следует "экономить на спичках" и соблюдать пустые ритуалы. Вы пишите приложение нормально, чтобы его понимали и нормально читали другие разработчики. Когда же дело доходит до оптимизации, Вы профилируете и смотрите где конкретно у Вас проблемы и затыки. Их и убираете.

    Что же касается конкретно аллокаций, то всё не совсем так (вернее, совсем не так).
    Аллокация - это выделение куска памяти в куче (heap), который потом должен быть убран сборщиком мусора. Именно потому это и считается ударом по производительности, так как добавляет работы как аллокатору, так и сборщику мусора.
    Но использование := само по себе не включает/выключает использование аллокации. Оно лишь декларирует новую переменную.
    Будет ли произведена аллокация зависит от другого. В первую очередь, от того какие Вы данные создаёте. Если это примитивный тип фиксированного размера, размещаемый на стэке (например int), то работы с кучей у Вас не будет вовсе, соответственно и аллокаций. Во вторую очередь, от такой магической штуки как escape analysis, которая может запросто разместить данные из кучи на стэке, если ей так того захочется, тогда аллокации у Вас происходить тоже не будет.

    Давайте посмотрим примеры:
    1. var i int
      i = 1
      i = 2

      0 аллокаций, так как i размещается строго на стэке.

    2. i := 1
      i := 2

      0 аллокаций, так как i размещается строго на стэке.

    3. i := new(Struct{1,2,3})
      i := new(Struct{3,2,1})

      2 аллокации, так как new разместит данные в куче и вернёт указатель на них. Но только если escape analysis не переместит это всё в стэк (что конкретно в данном случае достаточно вероятно).

    4. var i *Struct
      i = new(Struct{1,2,3})
      i = new(Struct{3,2,1})

      2 аллокации, так как new все ещё разместит данные в куче и вернёт указатель на них.



    Как Вы видите, := сам по себе никак к аллокациям не относится, и является лишь синтаксическим сахаром.

    P.S. Давеча на Хабре была отличнейшая статья про стандартную библиотеку Go, показывающая что занятие преждевременными микрооптимизациями без профилирования - вполне себе бессмысленная затея.
    Ответ написан
    Комментировать
  • Как рассчитать количество полных лет?

    hzzzzl
    @hzzzzl
    вычитаю 1 от разницы между годами, добавляю 1 если день рождения "в этом году уже был"
    d это Date(), например new Date(2000, 2, 4) - 4 марта 2000

    function diff(d) {
    	const now = new Date()
    	const addOne = now.getMonth() - d.getMonth() >= 0 && now.getDate() - d.getDate() >= 0
    	const diff = now.getFullYear() - d.getFullYear()
    	return diff - 1 + (addOne ? 1 : 0)
    }
    Ответ написан
    3 комментария
  • Что такое такое rest api?

    @eandr_67
    web-программист (*AMP, Go, JavaScript, вёрстка).
    API социальных сетей - это вполне типичные примеры реализации REST API.

    REST (RESTful) - это общие принципы организации взаимодействия приложения/сайта с сервером посредством протокола HTTP. Особенность REST в том, что сервер не запоминает состояние пользователя между запросами - в каждом запросе передаётся информация, идентифицирующая пользователя (например, token, полученный через OAuth-авторизацию) и все параметры, необходимые для выполнения операции.

    Всё взаимодействие с сервером сводится к 4 операциям (4 - это необходимый и достаточный минимум, в конкретной реализации типов операций может быть больше):
    1. получение данных с сервера (обычно в формате JSON, или XML)
    2. добавление новых данных на сервер
    3. модификация существующих данных на сервере
    4. удаление данных на сервере

    Операция получения данных не может приводить к изменению состояния сервера.

    Для каждого типа операции используется свой метод HTTP-запроса:
    1. получение - GET
    2. добавление - POST
    3. модификация - PUT
    4. удаление - DELETE

    Т.е. :

    GET-запрос /rest/users - получение информации о всех пользователях
    GET-запрос /rest/users/125 - получение информации о пользователе с id=125
    POST-запрос /rest/users - добавление нового пользователя
    PUT-запрос /rest/users/125 - изменение информации о пользователе с id=125
    DELETE-запрос /rest/users/125 - удаление пользователя с id=125
    Ответ написан
    20 комментариев
  • Как правильно подключить локальные шрифты в vue?

    delphinpro
    @delphinpro
    frontend developer
    в каждый url путь подставьте
    сейчас вы только eot подключили

    И уж, коли на Vue пилите, а значит более или менее современные браузеры, то подключайте только woff и woff2 — покроют всё.

    @font-face {
      font-family: 'Geometria';
      src: local('Geometria Thin'), local('Geometria-Thin'),
        url('~@/assets/fonts/geometria/Geometria-Thin.woff2') format('woff2'),
        url('~@/assets/fonts/geometria/Geometria-Thin.woff') format('woff');
      font-weight: 100;
      font-style: normal;
    }
    Ответ написан
    Комментировать
  • Как разместить по правому краю кнопку в Bootstrap?

    72nomer
    @72nomer
    А может кнопку обернуть в div с классом text-right?
    Ответ написан
    1 комментарий
  • Как расположить блоки в столбик?

    display: flex;
    flex-direction: column;
    flex-wrap: wrap;
    Ответ написан
    Комментировать
  • Отправка данных в POST на vue + axios?

    lavezzi1
    @lavezzi1
    const str = JSON.stringify(this.postBody);
    axios.post('http://localhost:8081/', str)
      .then((response) => {
        console.log(response);
      })
      .catch((error) => {
        console.log(error);
      });


    Ошибка то у вас какая?
    Ответ написан
    6 комментариев
  • Алгоритм переворота строки как реализовать?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    В вашем решении надо оставить только один цикл. Лучше его заменить на while. i++ и j-- выплняются каждую итерацию.

    var j, i
     while (i < j;) {
          temp = str[i];
          str[i] = str[j];
          str[j] = temp;
          i++; 
          j--;
        }
      }
    Ответ написан
    4 комментария
  • Как в Go добавлять запись в json?

    Сначала парсим файл насроек в структуру, потом добавляем туда нового клиента, потом маршалим обратно в json.

    package main
    
    import (
    	"encoding/json"
    	"io/ioutil"
    	"log"
    )
    
    type Client struct {
    	ClientId string
    	Date     string
    }
    
    type Settings struct {
    	Clients []Client
    }
    
    const settingsFilename = "settings.json"
    
    func main() {
    	rawDataIn, err := ioutil.ReadFile(settingsFilename)
    	if err != nil {
    		log.Fatal("Cannot load settings:", err)
    	}
    
    	var settings Settings
    	err = json.Unmarshal(rawDataIn, &settings)
    	if err != nil {
    		log.Fatal("Invalid settings format:", err)
    	}
    
    	newClient := Client{
    		ClientId: "123",
    		Date:     "2016-11-17 12:34",
    	}
    
    	settings.Clients = append(settings.Clients, newClient)
    
    	rawDataOut, err := json.MarshalIndent(&settings, "", "  ")
    	if err != nil {
    		log.Fatal("JSON marshaling failed:", err)
    	}
    
    	err = ioutil.WriteFile(settingsFilename, rawDataOut, 0)
    	if err != nil {
    		log.Fatal("Cannot write updated settings file:", err)
    	}
    }
    Ответ написан
    4 комментария
  • Как в django автоматически заполнить поле при создании объекта в форме?

    @blackbb Автор вопроса
    Вопрос закрыт. Разобрался.
    def form_valid(self, form):
            form.instance.user = self.request.user
            project = Project.objects.get(slug=self.kwargs['project_slug'])
            form.instance.project = project
            return super(ResponseCreate, self).form_valid(form)
    Ответ написан
    Комментировать
  • Как обновить страницу через AJAX в DJANGO?

    tema_sun
    @tema_sun
    Во вьюшке:
    def post(self, request):
            create_form = BookForm(request.POST)
            if create_form.is_valid():
                create_form.save()
                
            response = {"data": "goes here"}
    
            return HttpResponse(json.dumps(response), content_type='application/json')


    В js'e:
    $.ajax({
        method: 'post',
        url: your-url,
        data:  serialized-data
    }).done(function(response){
        console.log(response.data)
    });

    Ну или что-то аналогичное, если jquery не используете.
    Ответ написан
    6 комментариев