• Как в зависимости от выбора в Select менять form?

    syxme
    @syxme
    Можно сделать 2 формы (изначально невидимые).
    Через js сделать видимую форму по select.
    Ответ написан
    Комментировать
  • Sql запрос, как сделать вложенные объекты?

    syxme
    @syxme Автор вопроса
    SELECT json_build_object(
                   'id', w_user.id,
                   'email', w_user.email,
                   'pass', w_user.pass,
                   'group', m_group,
                   'roles', t_roles,
                   'is_locked', w_user.is_locked,
                   'created_at',w_user.created_at,
                   'updated_at',w_user.updated_at
               ) as result
    FROM
        w_user
        LEFT JOIN (SELECT w_group.id,
                          json_build_object(
                                  'id', w_group.id,
                                  'name', w_group.name,
                                  'city', cities) as m_group
                   FROM
                       w_group
                       LEFT JOIN (SELECT w_group_city.group_id, json_agg(w_city.*) as cities
                                  FROM
                                      w_group_city
                                      LEFT JOIN w_city ON w_city.id = w_group_city.city_id
                                  group by w_group_city.group_id) j_w_group_city
                                 on w_group.id = j_w_group_city.group_id) j_w_group
                  on w_user.group_id = j_w_group.id
        LEFT JOIN (SELECT t_user_roles.*, json_agg(t_user_roles.*) as t_roles
                   FROM
                       w_user_roles t_user_roles
                       LEFT JOIN w_role ON w_role.id = t_user_roles.role_id
                   group by t_user_roles.id) t_user_roles on w_user.id = t_user_roles.user_id
    Ответ написан
    Комментировать
  • Как сделать маску для английского ввода текста?

    syxme
    @syxme
    "SHAурма".replace(/[А-я]/g,"")
    Ответ написан
    Комментировать
  • Как создать собственный язык разметки для проектирования интерфейсов (С ++)?

    syxme
    @syxme
    Хороший вариант рассмотреть базовый View из Android (там довольно просто и понятно)
    3 Этапа Measure, Layout, Draw
    Минимум классов нужно.
    Rect - Тут понятно
    Bitmap - Базовый класс для изображений
    Canvas - Базовый класс для рисования
    Paint - Базовый класс кисти для рисования
    Drawable - Базовый класс графического объекта
    MotionEvent - Базовый класс передачи событий для элементов ui(widget)
    View- Базовый класс ui (widget)
    Context - Базовый контекст
    Window - Базовый класс окна с event loop
    Handler - Система передачи событий в очередь обработки ui потока
    MessageQueue - Event loop (по факту массив лямбд для выполнения их в ui потоке )
    LayoutInflater - Класс для создания дерева виджетов из xml

    Далее еще сложнее, нужно из базового View сделать разный виджеты, типа TextView, EditView, ImageView...
    А так же виджеты для разметки дочерних виджетов (Linear, Absolute,Table и тд..)

    Рисовать всё можно на Direct2d, лучше взять direct2d 1.0 (там очень простая инициализация), в дальнейшем можно будет уже перейти на новую версию
    Желаю удачи )
    Ответ написан
    Комментировать
  • Как работает $gt и $lt в mongo?

    syxme
    @syxme
    $gt = Больше чем // date > dateInTable
    $lt = Меньше чем // date < dateInTable

    $gte = Больше чем включительно // date >= dateInTable
    $lte = Меньше чем включительно // date <= dateInTable
    Ответ написан
    Комментировать
  • Как узнать о новых событиях?

    syxme
    @syxme
    Можно использовать классический long polling
    Принцип такой:
    В таблице где у тебя обновляются, добавляются данные должно быть поле что-то типо updateTime (время последнего обновления) Если запись создаётся то updateTime = createTime.

    Для реализации long polling нужно чтоб сервер не отправлял ответ пока не пройдет timeout(В среднем 5-15сек) или не появятся новые данные.

    Пример реализации на nodejs
    function subscribe(req,res,params,callback){
    	var timeStamp;
    	if (params.timestamp){  // Если передали timestamp c которого начинать выборку данных
    		timeStamp = new Date(parseInt(params.timestamp));
    	}else{
    		timeStamp = new Date();
    	}
    	var isConnected = true;
    	req.on('close', function() { // Если пользователь закрыл соединение
    		isConnected = false;
    	});
    	console.log("timeStamp",timeStamp);
    	(function startEvents(cb,time){
    
    		if (!isConnected){
    			console.log("Connection close_end pool");
    			return;
    		}
    		model.db.find({}).sort({updateTime :-1}).exec(function (err,items){ // SELECT * FROM datatable ORDER BY updateTime DESC
    			if (items.length>0){
    				cb(null,{
    					items:items,
    					timestamp:new Date(items[0].updateTime).getTime()  // Возвращаем время для следующего соединения
    				});
    			}else {
    				if (time > 10) {
    					cb(null, {
    						items:[],
    						timestamp:new Date().getTime()  // Возвращаем время для следующего соединения 
    					});
    				} else {
    					setTimeout(function (){
    						startEvents(rQuery, group, cb, time + 1);
    					},1000);
    				}
    			}
    		});
    
    	})(callback,0)
    }

    Первый запрос будет примерно такой: localhost:8080/controller/subscribe

    {items:[],timestamp:1634803048151} //  Если ничего не изменилось 
    {items:[1,2,3,4,5],timestamp:1634803048151} //  Если что-то изменилось

    Следующий запрос будет
    localhost:8080/controller/subscribe?timestamp=1634...
    И так до бесконечности
    Ответ написан
    Комментировать
  • Как сделать keep-alive запросы на сервер?

    syxme
    @syxme Автор вопроса
    Отбой друзья)) Поспал, продебажил и увидел что первый цикл заблокирован функцией read ибо соединение не закрыто и -1 не возвращается.
    Решение проблемы:
    boolean reading = true;
    while (reading&&!Thread.interrupted()) {
        reading = ((res = input.read(buffer, 0, buffer.length)) != -1);
        if (buffer[res]==0x0){
            reading = false;
        }
        System.out.println(new String(buffer,0,res, Charset.defaultCharset()));
    }
    Ответ написан
    Комментировать
  • SDL_WaitEvent плохо работает. Что я делаю не так?

    syxme
    @syxme
    Используйте SDL_PollEvent вместо SDL_WaitEvent и лучше всего сделать ограничение framerate 16мс должно хватить.
    Ответ написан
  • Как использовать зависимость при рендере станицы handlebars?

    syxme
    @syxme
    Дело в том что вы пытаетесь связать функции серверной части с фронтом.
    const anime = require('animejs') будет доступен только в вашей программе (index.js)
    Вам нужно сделать примерно так:
    Для начала указать папку с статическими ресурсами
    app.use(express.static('public'));
    Переместить в папку public ваш скрипт animejs.js
    Добавить в loginform.hbs
    <head>
    <script src="/animejs.js" ></script>
    </head>
    Ответ написан