• Как сделать кроссбраузерное оформление для Select?

    @alexalexes
    select-ы, чекбоксы, полосы прокрутки - это самые некастомизируемые элементы веб интерфейса.
    В качестве альтернативы используют JQuery ui виджеты.
    Ответ написан
    Комментировать
  • Почему windows xp не видит андроид-смартфоны?

    @alexalexes
    https://www.asus.com/ru/support/FAQ/1011564/
    Попробуйте установить драйвер с сайта производителя гаджета.
    Ответ написан
    Комментировать
  • Нормально ли что бекенд отдает сырые данные на фронт?

    @alexalexes
    Работать с сырыми данными на клиенте накладно всем.
    Накладно клиенту, потому что приходится работать с сопоставлением справочников, что должна делать СУБД "одной левой пяткой" при правильно составленном запросе с помощью индексов и кэша.
    Накладно инфраструктуре связи - гоняем много данных по каналам и не один раз.
    Накладно бекэнду - постоянно создавать соединение с клиентом и СУБД, разрывать соединение.
    Накладно СУБД - делать серию мелких запросов с толстой процедурой подготовки соединения, проверки прав пользователя на объекты, выполнения запросов, вместо того, чтобы выполнить запрос в один/два присеста.
    Что делать?
    Организовывать на стороне сервера грамотный API - каждая функция API при запросе к серверу должна давать порцию данных, необходимую для отображения конкретного отчета. В ответе не должно быть переизбытка данных. Если это список товаров, то отображать данные не всего списка, а от такой-то позиции до такой-то. Если у товаров есть какие-то "тяжелые" подробности, скажем, посмотреть большую фотку его, то подгружаем ее только по запросу пользователя, скажем, при наведении мыши - то есть вызываем другую функцию API. То есть функции API должны соответствовать механике работы с отчетом, а не предоставлять несвязные клочки данных.
    Ответ написан
    Комментировать
  • Какие лучше сделать отношения между таблицами?

    @alexalexes
    Упражнение
    (# Id -- идент. упражнения
    * Grp_Id -- идент. группы мышц, внеш ключ
    * Name -- Название,
    * Descr -- Описание
    )

    Мышцы
    (# Id -- идент. мышцы,
    * Grp_Id -- идент. группы мышц, внеш. ключ,
    * Name -- Название
    )

    Группа мышц
    (# Id -- идент. группы мышц,
    * Name -- Название
    )

    Воздействие упражнения
    (# Id -- идент. воздействия,
    * Ex_Id -- идент. упражнения, внеш. ключ
    * Мus_Id -- идент. мышцы, внеш ключ
    * Power -- сила воздействия или просто целевой флаг
    )

    Если вы говорите про связь "много-много", то знайте, что за ней прячется еще одна табличка, реализующая ассоциативную связь между основными объектами, и по сути это две связи через таблицу. В вашем случае, это Воздействие упражнения. Если взять концепцию графа ("много-много" - это всегда граф, а точнее его ребрышки). То, упражнения и мышцы - это вершины графа, а ребра - это как раз пары [ex_id, mus_id], вес ребра - сила воздействия. В этой же табличке можно было бы хранить ребра воздействий на группы мышц [ex_id, grp_id], в этом случае mus_id будут заполнены null-значениями, но задание говорит, что нужно связать группы мышц с упражнениями.
    Ответ написан
  • Как сформировать запрос MySQL?

    @alexalexes
    Изучите для начала как использовать MAX(), SUM(), NUMBER() в mySQL.
    Потом попробуйте эмулировать конструкции:
    Max() over (partition by ... )
    Sum() over (partition by ... )
    Rank() over (partition by ... order by ... )
    Ощутите всю "прелесть" mySQL по сравнению с MS SQL, Oracle и прочими СУБД, которые умеют эти конструкции.
    select b.id, b.name, b.sum_value, b.max_date -- а в самом конечной выборке выбираем только первые номера нумерации строк от каждого человека
    from ( select a.id, a.name, a.sum_value, a.max_date,  -- в этом подзапросе нумеруем строки в пределах одного человека
                          @rank := IF(@name2 != a.name, 1, @rank + 1) as rnk,
                          @name2 := a.name
                  from (select t.id, t.name,  -- в этом подзапросе находим сумму очков и максимум даты
                              @sum := IF(@name != name, value, @sum + value) as sum_value,
                              @max := IF(@name != name, date, @max) as max_date,
                              @name := name
                      from   
                                 (select 1 id, 'Вася' Name, 7 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date union all
                                  select 2 id, 'Вася' Name, 2 value, STR_TO_DATE('02.02.2018', '%d.%m.%Y') date union all
                                  select 3 id, 'Петя' Name, 2 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date union all
                                   select 4 id, 'Вова' Name, 2 value, STR_TO_DATE('01.01.2018', '%d.%m.%Y') date ) t, --исходные данные в виде таблицы t
                                 (select @max := 0, @sum := 0, @name := '') p
                      order by t.name, date desc
                     ) a,
                      (select @rank := 1, @name2 := '') p2
                      order by a.name, a.sum_value desc
    ) b where b.rnk = 1
    order by b.id, b.name
    Ответ написан
  • Как правильно хранить аватарки пользователей на node.js?

    @alexalexes
    https://habrahabr.ru/post/37686/
    Тут для PHP, но для любого backend концепция от этого не поменяется.
    1) Перенаправляем все ссылки для получения картинок на скрипт для проверки прав доступа.
    2) Проверяем права доступа пользователя по сессионным данным;
    3) Все ОК, сессия пользователя жива, файл существует, пользователь является владельцем файла или каким-то образом относится к нему (хотя бы для чтения) - передаем команду nginx серверу отдать файл из защищенного каталога.
    4) Не ОК, отдаем пользователю 404.
    3.1) Нет nginx ? Читаем файл серверным скриптом (лучше небольшими порциями, для экономии оперативной памяти сервера), отдаем пользователю данные с соответствующим mime-тайпом. На стороне клиента отданные данные прорисуются в img теге или в background-e DOM-элемента, не принципиально, каким образом прилетели бинарные ресурсы от сервера.
    Ответ написан
    Комментировать
  • Как прочитать текст между тегами HTML на Node.js( cheerio)?

    @alexalexes
    Это текст не между тегами, это содержимое самого тега.
    links.eq(i).html() - не оно ли?

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

    @alexalexes
    А где первичные ключи в табличках?
    Вообще, если таблицы - некие копии друг друга, то обновления записей проворачивают как-то так.
    update tab1 t1, tab2 t2   // таблицы, участвующие в Update
    set  t1.key = ?                      // устанавливаем параметр key, только непонятно, что задаем
    where t1.id = t2.id          // соответствие записей по первичным ключам

    Если нужно сделать сложное обновление, сопоставив некую совокупность атрибутов, не привязываясь к ключам, то как-то так.
    update tab1 t1, tab2 t2   // таблицы, участвующие в Update
    set t1.key = ?                      // устанавливаем параметр key, только непонятно, что задаем
    where t1.SecondName = t2.SecondName // допустим, пусть будет обновление key у тех записей, у которых есть полное соответствие атрибутов.
       and t1.LastName = t2.LastName
      and t1.ThirdName = t2.ThirdName
    Ответ написан
    Комментировать
  • Как заставить срабатывать скрипт js, в самом подгружаемом файле?

    @alexalexes
    Ajax.php - серверный скрипт, он ни в коем образе не подгружается в браузер.
    Он просто отвечает на запросы. Ответ может содержать текст, html, json или любой формат потока данных, определяемый http-заголовком ответа.
    Если ответ приходит в виде текста скрипта, то его можно подключить так:
    var script_elem = document.createElement('script'); // создаем DOM-элемент
    script_elem.innerHTML = 'alert(123456)';                 // помещаем в него код скрипта
    document.body.appendChild(script_elem);               // добавляем в документ
    Ответ написан
  • Как реализовать SQL запрос, выборка по дате?

    @alexalexes
    При этом достаю только те значения, которые имеют самый старший "ключ"

    Ваш запрос не выбирает "самым-самый", ваш запрос выбирает нечто с фиксированным параметром:

    WHERE tab2.dateMessage > 0 and tab1.indexObject = 11222

    Чтобы взять самое-самое, например, по дате, выборку нужно отсортировать.
    Обратите внимание, сортировать можно по нескольким колонкам, да и не только по колонкам.
    Ответ написан
    Комментировать
  • Как исправить размытый текст в Windows Forms?

    @alexalexes
    В поиске меню Пуск забиваем "ClearType". Выходит эта самая настройка опции. Она?
    Ответ написан
  • Копирование таблиц в базе данных?

    @alexalexes
    Вы хотели сказать столбцы?
    Добавьте их в структуру, куда нужно перенести значения, с null опциональностью.
    ALTER TABLE test2.board ADD data_razm datatime null AFTER moder;
    ALTER TABLE test2.board ADD ip        tinytext null AFTER data_razm;


    А потом сделайте сложное обновление
    update test2.board t2b, test.board tb
    set t2b.data_razm = tb.data_razm,
          t2b.ip = tb.ip
    where t2b.id = tb.id


    Наверняка, еще в реальном времени данные в таблице изменяются.
    В этом случае нужно создавать триггеры, чтобы они синхронизировали изменения в этих таблицах.
    Если есть реальное время, то сначала делаем триггеры, а потом сложное обновление.
    Ответ написан
    Комментировать
  • Как получить индекс массива внутри массива во Vue.js?

    @alexalexes
    Когда перебирать начнешь массив, тогда и получишь индексы.
    https://learn.javascript.ru/array-iteration

    У вас задача на знание голого JavaScript.
    var my_array =
    [
      {
        data: 123
      },
      {
        data: 845
      },
      {
        data: 'dsdsd'
      }
    ];
    
    my_array.forEach(function(item, i, arr)
    {
      switch(i)
      {
        case 0:
          item.operation = item.data * 5;
          break;
        case 1:
          item.operation = item.data * 2;
          break;    
        default:
          item.operation = item.data + 'qwqwqw';
      } 
    });


    PS: Про то, как нужно положить внутрь foreach this, читайте тут.
    Ответ написан
  • Как вычислить сумму часов?

    @alexalexes
    Чуть посложнее, чем предыдущая ваша задача. Постарайтесь самостоятельно разобраться, как работать со временем.
    $arraytime = ['07:01:05', '06:21:30', '08:15:15', '07:13:08', '06:02:00', '09:21:10', '12:54:48'];
    $sum = 0;
    foreach($arraytime as $time)
        $sum += strtotime($time) - strtotime('00:00:00');
    echo sprintf('%d:', $sum / 3600).date('i:s', $sum);
    Ответ написан
    Комментировать
  • Инициализация устройств через Bluetooth адаптер до загрузки системы?

    @alexalexes
    Чтобы bluetooth-клавиатура заработала сразу после старта питания нужно:
    1) Включить поддержку USB-устройств в BIOS. Опция USB Legacy Support, USB Device Function и тд.
    2) Адаптер Bluetooth должен уметь прикидываться HID-устройством на стороне хоста (HID proxy mode), если хост по какой-то причине не может поднять BT, то есть быть весьма самостоятельным устройством обмена.
    Ответ написан
  • Как вычислить кол-во в часов из двух времени?

    @alexalexes
    Как вариант.
    $starthours = '08:15:09';  $stophours = '16:45:19';
    $diff = strtotime($stophours) - strtotime($starthours) + strtotime('00:00:00');
    echo date('H:i:s', $diff);
    Ответ написан
    Комментировать
  • Что будет если раздвоить интернет кабель?

    @alexalexes
    А провайдеру вы тоже будете за 2 занятых порта платить?
    Или кабель-каналы в плинтусах уже заняты, и некуда уложить еще один?

    Кроме, физической занятости кабель-каналов и портов, никакие причины не обосновывают применения того, что есть на фото.

    Ставьте роутер на входе и разводите от него кабели во все комнаты. Если какому-то устройству нужен доступ напрямую в сеть провайдера, например IP-TV, то на роутере настраивается мост между портами. Остальные потребители трафика в вашей квартире прекрасно будут себя чувствовать в локальной сети, которую подымет роутер.
    Ответ написан
    Комментировать