• Как правильно сделать задержку кадра в SDL2?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    появляется текст, который потом не пропадает.

    Потому что нужно перерисовать изображение, например, с помощью функции SDL_RenderClear
    Ответ написан
    Комментировать
  • Не удаляются файлы в папке, что может быть?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    У пользователя нет прав на удаление файлов. Попробуйте через sudo.
    Либо по какой-то причине раздел примонтирован как readonly.
    Ответ написан
    3 комментария
  • Как использовать принятый двумерный массив из функции?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Не советую использовать i,j во вложенных циклах, т.к. когда-нибудь перепутаете j с i
    Используйте осмысленные названия переменных.

    Еще можно double[SIZE_Y][SIZE_X] вынести в отдельный тип, чтобы не запутаться в коде:
    typedef double matrix[SIZE_Y][SIZE_X];
    
    matrix myAwesomeMatrix = {{1,2,3}{4,5,6}{7,8,9}};


    код
    #include <iostream>
    #include <cmath>
    
    const int SIZE_X = 3;
    const int SIZE_Y = 3;
    typedef double matrix[SIZE_Y][SIZE_X];
    
    
    void transposeMatric(matrix& in, matrix& out, int size)
    {
       // col == column
      
      for (int row = 0; row < size; ++row)
      {
        for (int col = 0; col < size; ++col)
        {
            out[row][col] = in[col][row];
        }
      }
      
    }
    
    int main()
    {
        matrix tmpUnitMatric = {{1,2,3},{4,5,6},{7,8,9}};
        matrix T;
        
        transposeMatric(tmpUnitMatric, T, SIZE_Y);
        
        for (int row = 0; row < SIZE_Y; row++)
        {
          for (int col = 0; col < SIZE_X; col++)
          {
            std::cout << std::fixed << T[row][col] << "\t"; 
          }
          std::cout << std::endl;
        }
    }
    Ответ написан
    Комментировать
  • Зачем асинхронность?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    но для чего ее можно использовать еще?

    Например, заваривание чая человеком:
    Включаете чайник с водой. Пока вода греется, кладёте пакетик чая, сахар в кружку. Тут можно и посуду начать мыть. Когда чайник выключится, наливаете в кружку и размешиваете. Продолжаете мыть посуду.

    А если делать все синхронно, то придется ждать и ничего не делать, пока нагреется чайник, потом заваривать чай и мыть посуду. Очевидно, это не эффективно.

    Замените человека на поток, чайник с водой на сетевые запросы, кружку с чаем, посуду на обработку данных.
    Ответ написан
    Комментировать
  • Как правильно добавлять скрипты в Nuxt.js?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    jquery и vuejs вместе?

    $ npm --save jquery bootstrap-vue bootstrap

    В nuxt.config.js :
    modules: [
        'bootstrap-vue/nuxt',
      ],
    Ответ написан
    Комментировать
  • Как передать двумерный массив в возвращаемую функцию?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    #include "iostream"
    
    const int size = 3;
      
    double maxElemUnderD(double &matric[size][size])
    {
      double elem = 0;
      
      for (int i = 1; i < size; i++)
      {
        for (int j = i; j < size; j++)
        {
          if (matric[i][j] > elem)
          {
            elem = matric[i][j];
          }
        }
      }
    
      return elem;
    }
    
    int main()
    {
      double eps = 0.01;
      double maxElem;
      double matric[size][size] =
      {
        {2, -1, 3},
        {-1, 4, 2},
        {3, 2, 5}
      };
    
      maxElem = maxElemUnderD(matric);
      
      std::cout << maxElem << std::endl;
      
      return 0;
    }
    Ответ написан
  • Что не так с transition-group или почему "children must be keyed"?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    When Vue is updating a list of elements rendered with v-for, by default it uses an “in-place patch” strategy. If the order of the data items has changed, instead of moving the DOM elements to match the order of the items, Vue will patch each element in-place and make sure it reflects what should be rendered at that particular index. This is similar to the behavior of track-by="$index" in Vue 1.x.


    https://vuejs.org/v2/guide/list.html

    thats why you should have use :key="item"

    источник:
    https://stackoverflow.com/questions/53194769/vuejs...
    Ответ написан
    Комментировать
  • Насколько адекватно работать с DB из nuxt сервера?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Если вас устраивает производительность сервера на Nodejs, то делайте как serverMiddleware. В таком случае у вас инфраструктура проекта будет проще.
    Ответ написан
    Комментировать
  • Насколько вообще нужны менеджеры состояний?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Redux используется как "глобальная переменная", в которую можно положить и взять из любой точки приложения.

    Вот в этой статейке более подробно расписано.
    Ответ написан
    Комментировать
  • Vue Как отправить такой запрос на api?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    axios использует эту библиотеку ( и про это написано в README библиотеки, поэтому читайте документацию) для серилизации параметров, вот пример того, что вы хотите получить:
    var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false });
    assert.equal(unencoded, 'a[b]=c');


    Ваши параметры должны быть такими:
    {
     params: {
        filter: {filter: this.filter.q},
     },
     paramsSerializer: function (params) {
         return Qs.stringify(params, {arrayFormat: 'brackets', encode: false})
     },
    }
    Ответ написан
  • Как делать кеширование Nuxt SSR для смартфонов и ПК?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Если страница перерисовывается скриптами в зависимости от устройства, то вы не сможете закешировать рендер, это работает только когда у вас страница формируется с помощью css стилей.

    Как вариант решения - использовать разные роуты под разные представления.
    Ответ написан
    3 комментария
  • Физика движения шара?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    То, что вы пытаетесь реализовать, называет численным интегрированием уравнений движения, на хабре есть обзорная статья на эту тему.
    Реализуйте самый простой метод.

    Также вам нужно понимать хоть что-то из линейной алгебры.
    Ответ написан
    Комментировать
  • Архитектура highload websocket проекта?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Из-за особенностей работы сборщика мусора в Go у вас скорее всего возникнут проблемы, если ключи в map'е содержат указатели (включая структуры их содержащие).

    Вот накидал способ хранения сокетов немного в другом виде без указателей в ключах:
    const n = 4 // длина идентификатора комнаты в байтах
    type (
    	noop struct{}
    	WebSocket struct{} // сокет
    
    	Sockets []WebSocket
    	RoomKey [n]byte
    	
    	Index uint32
    
    	Room map[Index] struct{}
    	Rooms map[RoomKey] Room
    )
    
    var sockets = make(Sockets, 0, 2000000)
    var rooms = make(Rooms, 1000)
    var lastSocketRoomKey RoomKey
    
    func insert(ws WebSocket, rk RoomKey){
    	room, _ := rooms[rk]
    	// тут создание комнаты, если ее нет
    	// ...
    	
    	sockets = append(sockets, ws)
    	
    	last := len(sockets) - 1
    	room[Index(last)] = noop{}
      
            // сохраним ключ комнаты последнего сокета
            // чтобы можно было исправить индекс при удалении
            copy(lastSocketRoomKey[:], rk[:])
    }
    
    func remove(i Index, rk RoomKey){
    	// удаляем сокет,
    	// переместив последний в массиве на место удаляемого
    
    	last := len(sockets) - 1
    	sockets[i] = sockets[last]
    	sockets = sockets[:last]
    
    	// удаляем сокет из комнаты
    	room, _ := rooms[rk]
    	delete(room, Index(i))
    
    	// чиним индекс перемещенного сокета
    	roomOfLast := rooms[lastSocketRoomKey]
    	delete(roomOfLast, Index(last))
    	roomOfLast[Index(i)] = noop{}
    }


    Когда вам нужно разослать сообщения, в моем примере доступ к сокету будет происходить примерно так:
    for _, index := range rooms[roomkey]{
         // sockets[index] -- сокет в комнате с roomkey
         
        // т.к. из-за особенности структуры искать сокет в комнате получается невыгодно долго, 
        // придется удалять закрытые сокеты "ленивым" способом во время рассылки, 
        // либо заполнять массив индексов и после уже удалять эти сокеты из общего хранилища
        // функцией remove(index, roomkey)
    }


    Очевидно, что в данном примере доступ к sockets и rooms не должен происходить из разных горутин.
    Ответ написан
    Комментировать