Задать вопрос
  • Имеется ли ответственность за участие в разработке нелегальных сайтов?

    Юрисдикция под вопросом. Например, сделанный российским программистом продукт полностью легален в России, но нарушает нормы приватности в странах Европы.
    Изготовление продукта - одно.
    Эксплуатация его, совсем другач задача и иной круг ответственных за это лиц, исключающий разработчика.

    Есть еще понятие "заведомо преступный умысел", когда изначально разработчик в курсе злодейских замыслов заказчика, и этот вопрос на тостере и в кэшах поисковиков тому доказательство.

    Disclaimer. Я далек от экспертности в юридических вопросах и всё вышенаписанное лишь желание поразмышлять.
    Ответ написан
  • Как удалить разницу между двумя директориями?

    Может, rsync поможет?
    rsync \
      -av \
      --delete \
      --existing \
      dir1 dir2
    Ответ написан
    1 комментарий
  • Генерируемый список Js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    См. Node.insertBefore()

    Что-то типа:
    function insertFirst(id) {
      const li = document.createElement('li'); // создали новый листайтем
      li.innerText = "меня тут не стояло";
      const parent = document.getElementById(id); // это ul
      const first = parent.firstChild; // это первый li до вставки
      parent.insertBefore(li, first); // впихнули новый li перед бывшим первым
    }
    Ответ написан
  • Не могу понять работу метода .map?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    function camelize(str) { // на вход приходит строка
       return str      // вот тут пока ещё строка
         .split('-')   // здесь из этой строки сделали массив, разбив её по символу дефиса
                       // ниже пошёл массив ["lol", "kek", "cheburek"]
         .map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) // что-то сделали с каждым элементом массива
         .join(''); // соединяет ['my', 'Long', 'Word'] в 'myLongWord'
     }


    Теперь упростим непонятную строку.
    К ней пришёл массив, у которого вызывается метод map() – он просто применит функцию в нём к каждому элементу массива. На выходе получится новый массив.
    .map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) //**
    
    // то же самое, что:
    .map(
      function(word, index) {
         return index == 0 ? word : word[0].toUpperCase() + word.slice(1);
      }
    )
    
    // то же самое, что:
    .map(
      function(word, index) {
        if (index == 0) {
          return word;
        } else {
          return word[0].toUpperCase() + word.slice(1);
        }
      }
    )


    Метод массива .map() вызывает функцию, которая в нём аргументом, для каждого элемента массива и передёт в неё следующие три параметра:
    1. Текущий обрабатываемый элемент массива.
    2. Индекс текущего обрабатываемого элемента в массиве.
    3. Массив, по которому осуществляется проход.
    Ответ написан
    1 комментарий
  • Получится ли сэкономить память с yield?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Почему бы не измерить использование памяти во всех вариантах?
    БольшойМассив так и так остаётся в памяти и не копируется целиком в array_slice(). Что будет, если передать его в array_slice()по ссылке – уменьшится использование памяти?

    Почему бы вообще не работать со ссылкой на массив и не запоминать положение "курсора"?
    reset(), next(), current() – вот это вот всё..

    Второй вариант - выгрузить массив из памяти в файл, и читать чанки оттуда с нужной позиции. Например, если массив содержит 32-битные целые, то записать весь массив в бинарный файл, по 4 байта на число. См. pack() и unpack(). Оффсет в файле равен индексу числав массиве * 4 байта.
    Ответ написан
    4 комментария
  • Почему не получается перезаписать символ в двумерном массиве?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Строку разбили по пробелам на слова. И затем у каждого слова пытаетесь заменить первый символ на его заглавную версию. Но вот такой доступ к строке как к массиву букв работает только «для чтения»:
    mass[i][0]

    Нельзя просто взять и .. заменить символ в строке.

    См. Доступ к символам:
    отрывок документации
    Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:
    return 'кот'[1]; // вернёт "о"
    При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу Object.defineProperty() для дополнительной информации.


    Вариант решения – сделать из каждого слова настоящий массив букв:
    const titleCase = str => str
        .toLowerCase()
        .split(' ')
        .map(word => {
          const chararr = word.split('');
          chararr[0] = chararr[0].toUpperCase();
          return chararr.join('');
        })
        .join(' ');
    
      titleCase("I'm a little pea"); // I'm A Little Pea
      titleCase("I love the sky and the trees"); // I Love The Sky And The Trees
    Ответ написан
  • Почему nginx не отдаёт html файл?

    Допустим на сервере в папке /home/user/privacy_policy лежат два файла
    index.html и policy.html

    И такой конфиг для этого локейшн:
    location /privacy-policy {
      alias /home/user/privacy_policy;
      index index.html;
      try_files $uri index.html =404;
    }


    Тогда, по идее, будут работать такие ссылки:
    ## вернут содержание index.html:
    https://site.ru/privacy-policy
    https://site.ru/privacy-policy/
    https://site.ru/privacy-policy/index.html
    https://site.ru/privacy-policy/trololo.zip
    
    ## вернёт содержание policy.html:
    https://site.ru/privacy-policy/policy.html
    Ответ написан
  • Как сделать простой php-роутер?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    На github есть много популярных (по числу звёзд) реализаций php router'а.

    Задача типичная, решений много.

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вместо onClick используйте addEventListener()


    Upd. Корректнее вешать единственный общий обработчик на родительский элемент - он «поймает» все клики на элементы внутри себя.
    Ответ написан
    3 комментария
  • Танцы с обьектом и деструктуризацией?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    ({email} = body)
    Оно?

    Пример:
    {
      const body = {
        email: 'myEmail'
      };
    
      console.log(
        ({email} = body)   // Object { email: "myEmail" }
      );
    }


    См. Object Destructuring - Assignment without declaration
    Ответ написан
    Комментировать
  • При распознавании речи проигрывать аудио-файлы связанные с определенными словами из текста речи?

    Надёжнее и проще убрать текстовое значение слов из цепочки.

    Микрофон слушает всё подряд – некоторые звуковые паттерны, которым обучен, триггерят действие (воспроизведение аудиофайла).

    Примерно так работают голосовые команды видеорегистраторам – например Xiaomi 70mai при стоимости ок 1500 руб. Слушают постоянно, "понимают" всего несколько команд. Прошивка с русификацией делает, в т.ч. и эти распознаваемые команды русскоязычными.
    Ответ написан
    Комментировать
  • Как можно созать видео динамичнеских графиков?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Точно можно сделать в Adobe After Effects: они умеют читать данные и связывать любые свойства с прочитанными параметрами. Но пока не придумал, как автоматизировать плавную смену позиций соседних стран, поднимающаяся всегда сверху над опускающейся.

    Другой вариант, сделать весь график и его анимацию в веб-среде, с помощью тех же D3.js и затем экспортировать её в видео программно или просто записью экрана.
    Ответ написан
    Комментировать
  • Корректировка JS кода ( сложение, вычитание )?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Раз используется jQuery почему бы сразу не отбирать нужные чекбоксы. И считать сумму их цен. При этом предыдущее значение цены никому уже не нужно, никаких вычитаний.
    function Check() {
      var price = 0;
      var PriceBoxes = $('[name=Price][type=checkbox]:checked');
      if (PriceBoxes.length) price = $.makeArray(PriceBoxes)
        .map(el => +el.value)
        .reduce((p,c) => p+c);
        
      $('.message').val(price);
    }


    Ответ написан
    4 комментария
  • Как через php перезагрузить nginx?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Можно просто по крону раз в 15 минут делать не перезагрузку самого nginx, а только перечитку конфигов.

    в кронтабе для root, с проверкой корректности конфигов:
    15 0 0 0 0  nginx -t  &&  nginx -s reload > /dev/null 2>&1


    Ещё лучше сделать bash-скрипт, где в случае непрохождения теста конфигов, отправлять письмо с восклицаниями.
    Ответ написан
    Комментировать
  • Как один div спрятать, а другой вывести после нахождения на сайте более одной минуты?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬


    Только вместо 3000 (3 секунд) поставьте 6E4 (60000, минуту)
    Ответ написан
    Комментировать
  • Как с 3 номеров сделать 1, с меняющимся тегом span?

    В разметке указать только один телефон, в дата-атрибуте перечислить все телефоны.
    Скриптом разбирать номер на части и обновлять разметку:
    Ответ написан
    1 комментарий
  • Как отменить удаление элемента с помощью mutationobserver?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В коллбэк передаётся ссылка на удалённый(-е) элемент(ы).

    Аргумент коллбэка – массив MutationRecord'ов. При единичном удалении там один элемент. У него есть свойство removedNodes — это NodeList удалённых элементов.

    spoiler
    (1) […]
    ​  0: MutationRecord
    ​​  addedNodes: NodeList []
    ​​  attributeName: null
    ​​  attributeNamespace: null
    ​​  nextSibling: #text "
      "
    ​​  oldValue: null
    ​​  previousSibling: #text "
      "
    ​​  removedNodes: NodeList(1)
    ​​​    0: <li id="to-delete">
    ​​​    length: 1
    ​​​    <prototype>: NodeListPrototype { item: item(), keys: keys(), values: values(), … }
    ​​  target: <ul id="someElement">
    ​​  type: "childList"
    ​​  <prototype>: MutationRecordPrototype { type: Getter, target: Getter, addedNodes: Getter, … }
      length: 1
    ​  <prototype>: Array []


    Можно тут же их попробовать вставить назад в родителя, хотя бы в конец:
    Ответ написан
    Комментировать
  • Как передать id элемента через переменную js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Путаете id элемента и сам элемент.

    HTML:
    <div id="my-div">Привет!</div>

    JS:
    var id = "my-div"; // это id
    var el = document.getElementById(id); // элемент
    el.getBoundingClientRect() // должно работать
    Ответ написан
    1 комментарий
  • Как удалить фон без потери информации?

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

    Надо сделать хорошую маску – картинку в оттенках серого, где чем светлее пиксель, тем виднее будет исходная. Где пиксели черные – полная прозрачность.

    Предложу один из вариантов решения, на основе стандартных инструментов почти любого редактора.

    Рассмотрите каждый из каналов, R, G и B – где наиболее контрастно выглядит разница между объектом и фоном?
    В данном случае это в канале красного, R. Возьмём его за основу для будущей маски.

    Скопируйте его, и Уровнями поднимите контраст, глядя на гистограмму, чтобы от чёрного до белого были пиксели. Потом инвертируйте маску и примените к слою с исходной картинкой.
    результат
    5d5bb9c49e101149369921.png
    Ответ написан
    5 комментариев
  • Как сделать проверку что если хотя бы один чек бокс выбран?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    В обработчике проверять коллекцию чекбоксов до первого включенного и ставить класс родителю.

    По картине трудно посоветовать конкретнее. Лучше бы привели разметку.
    Ответ написан
    Комментировать