Задать вопрос
  • Как правильно хранить аватарки пользователей на 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, то на роутере настраивается мост между портами. Остальные потребители трафика в вашей квартире прекрасно будут себя чувствовать в локальной сети, которую подымет роутер.
    Ответ написан
    Комментировать
  • Выборка агрегированных значений с учетом null?

    @alexalexes
    Сможете воспроизвести Oracle выражение Rank() over (partition by ... order by ...) в MS SQL, то будет легко.
    select last_move.book_id, last_move.rack_id, last_move.board_id,  -- последнее местонахождение книги
               first_move.date_from, -- дата первого появления на складе
               last_move.date_to -- дата последнего перемещения
    from
    -- подзапрос, получаем первые записи появления каждой книги на складе
    (select *
       from (select t.*, rank() over (partition by t.book_id order by t.date_from) rnk
                  from table t)
    where rnk = 1) first_move
    
    join
    -- подзапрос, получаем последние записи перемещения каждой книги на складе
    (select *
       from (select t.*, rank() over (partition by t.book_id order by t.date_from DESC) rnk
                  from table t)
    where rnk = 1) last_move
    
    -- сопоставляем записи
    on first_move.book_id = last_move.book_id
    Ответ написан
    3 комментария
  • Что можно создать на чистом JS без знаний верстки( HTML5/CSS3)?

    @alexalexes
    JS создан как обслуживающий язык программирования для DOM-модели документа HTML.
    Его прямая обязанность манипулировать объектами документа и поддерживать обмен запросами с сервером. Для локальной машины, где он выполняется, среда ограничена, никаких вам доступа к файловой системе, процессам ОС. JS ограничен своей средой выполнения внутри браузера.
    Хотите писать на JS с полноценным окружением, то вам нужно обратиться к node.js. Но это уже backend-разработка.
    Ответ написан
    Комментировать
  • Как перевести сайт на русский язык?

    @alexalexes
    Машинный перевод будет очень топорный, если контент со специфической тематикой.
    Вообще, сейчас куча всяких программных комплексов, например, Lingvo, также можно напрячь какой-нибудь API, если нужно провернуть перевод в режиме онлайн.
    Ответ написан
    1 комментарий
  • Может ли MySQL 5.7 принимать в процедуры и INSERT-запросы VARCHAR-переменные в сыром виде (сырые строки)?

    @alexalexes
    Строка запроса при обработке SQL интерпретатором уже будет рассматриваться синтаксическим аппаратом SQL, в нем уже не отличишь, что реально имели ввиду, когда подставляли параметры.
    Предобработка такой строки регулярными выражениями, хоть может дать толк на отдельных тестовых примерах, но не убережет вас от sql-инъекций.
    Разработчик внешнего приложения должен быть сурово наказан за то, что формирует запрос вот так:
    $sql = "insert into table_name(name) value('".$str_param."')";

    А его приложение должно быть исключено из продакшена, как содержащее уязвимость, позволяющее атаковать sql-инъекциями, до того как не будет внесен фикс такого плана во всех случаях (!!!), где приложение контактирует с СУБД, а не только в этом запросе:
    $sql = "insert into table_name(name) value(:param1)";  //текст запроса с метками для вставки параметров;
    $prep_sql = $sqlconnect->prepare($sql); //подготовка SQL-запроса, фактически, синтаксический разбор и выявление меток, куда вставлять параметры, проверка ошибок;
    $prep_sql->bindParam('param1', $str_param, STRING_TYPE); //связываем параметры с метками в запросе, проверяем тип входного параметра;
    $prep_sql->execute(); //выполняем запрос

    PS: Последний пример написан на псевдокоде, но посыл должен быть понятен.
    Ответ написан
    Комментировать
  • Запрос периода времени в течение дня?

    @alexalexes
    Если вам нужно дать номер интервала для каждой записи, то вот запрос.
    Потом используйте любую группировку и аналитику для расширения запроса, как вам удобно.
    SELECT t.event_date,             -- атрибут таблицы типа datetime, для которого определяем интервал, выведен для того, чтобы наблюдать за процессом отладки
    case                                                                         -- SQL-конструкция вида "case  when ... then ... else ... end", с помощью которой можно выводить не только конкретное значение атрибута, но и задавать условие, при котором конечное значение  результата будет вычисляться по-разному в пределах одной выбранной записи.
      when TIME_TO_SEC(t.event_date) >= inter.begin AND TIME_TO_SEC(t.event_date) <= inter.end                           -- если t.event_date, выраженное в суточных секундах, находится в отрезке [inter.begin,  inter.end], также выраженных в суточных секундах,...
      then floor((TIME_TO_SEC(t.event_date) - inter.begin) / inter.width)           -- ... то вычисляем количество полных  интервалов
      else null         -- иначе, если время не попадает в период отслеживания, то выводим "пусто", чтобы явно указать, что значение не находится в интересуемом периоде
    end as full_interval_number      -- кол-во прошедших полных интервалов, начинается с 0
    FROM table t,                     -- ваша таблица
        (select TIME_TO_SEC('09:00:00') as begin,            -- начало дневного периода
                TIME_TO_SEC('18:00:00') as end,                 -- конец дневного периода
                TIME_TO_SEC('00:15:00') as width                -- ширина интервала
         ) inter                    -- параметрический подзапрос, все настраиваемые константы в одном месте - удобно при отладке
    Ответ написан