• Как дабавить список ссылок видио на сайт?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    const links = [];
    const html = links.reduce((html, link) => html + `<a href="${link}">${link}</a><br>`, '');
    document.getElementById('links').innerHTML = html;
    Ответ написан
  • Как быстро и надежно закрывать задачи по сайту не нанимая программиста?

    nowm
    @nowm
    Могу ответить с точки зрения фрилансера:

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

    Вот несколько советов, которые помогут улучшить «возвращаемость» фрилансеров:
    • Чаще всего фрилансер готов делать работу сразу (особенно когда работает с вами первый раз), он показывает рвение и очень быстро всё делает. С вашей стороны ожидается, что вы можете оплатить работу мгновенно после того, как всё сделано и проверено как фрилансером так и вами. Если вы скажете фрилансеру, что вам нужно некоторое время, чтобы дойти до банкомата и пополнить счёт, потому что прямо сейчас не можете заплатить, это очень сильно испортит впечатление, и с большой вероятностью человек не покажет виду, спокойно без психов подождёт, когда вы ему заплатите, но в следующий раз работать с вами больше не будет. Фрилансер готов работать сразу, значит и вы должны быть готовы платить сразу.
    • Если у вас низкая техническая подготовка, и фрилансеру приходится кроме самого кода очень много общаться с вами на тему, что именно нужно делать, желание работать дальше тоже пропадает. Чем меньше требуется обсуждений и созвонов в мессенджере, тем больше веротность, что фрилансер и дальше будет с вами работать. Фрилансеры обычно не считают переписку частью оплачиваемой работы и, соответственно, чем больше времени будет занимать переписка, тем меньше будет желание продолжать работу. Фрилансер обычно хочет сразу делать работу и не отвлекаться на всякую бесплатную болтологию.
    • Если фрилансеру нужно заниматься в дополнение администрированием вашего сервера, а это заранее не обговаривалось, это тоже может испортить впечатление. Часто заказчики пишут, что им нужно поправить менюшку на сайте, а это в итоге превращается в правку менюшки, а потом залитие кода на сайт, настройка и перезапуск сервера и ещё какие-то подобные работы, которых в задании не было вообще. И, скорее всего, вы считаете само собой разумеющимся, что фрилансер должен уметь это делать, и думаете, что это нормальная практика, если он в дополнение к кодингу будет делать ещё и это. Дополнительно, если эти моменты ещё и не оплачиваются, шансы, что люди захотят с вами работать и дальше, снижаются ещё сильнее.
    • Некоторые заказчики любят показывать свой авторитет. Запомните, что для фрилансера вы не начальник, а равноправный партнёр, и он ждёт от вас соответствующего уровня общения. Если вы строите из себя начальника, люди будут придумывать любые отмазки, но повторно работать не станут.


    Вот это основные факторы, которые влияют на то, что вам ответит фрилансер, если вам понадобится помощь в следующий раз, и вы решите, что можно обратиться к тому, с кем раньше работали.
    Ответ написан
    8 комментариев
  • Как сложить числа c пробелами jquery?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Правильный подход - отделять мух от котлет.
    Числа надо держать в отдельном data-атрибуте, а не парсить их каждый раз из текста.
    Ответ написан
    1 комментарий
  • Как поменять вывод списков?

    Stalker_RED
    @Stalker_RED
    Ответ написан
    Комментировать
  • Как посчитать количество элементов массива, имеющих определённое свойство?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Конечно, можно прямо посчитать количество интересующих нас элементов:

    const countWithKey = (arr, key) => arr.filter(n => key in n).length;
    
    console.log(countWithKey(arr, 'ключ'));

    Но можно решить задачу и в более общем виде.

    Например, просуммировав данные. Функция суммирования кроме данных получает также функцию, которая из отдельного элемента данных извлекает слагаемое, в данном случае - факт наличия нужного свойства:

    const sum = (data, val = n => n) =>
      Array.prototype.reduce.call(
        data,
        (acc, n) => acc + val(n),
        0
      );
    
    console.log(sum(arr, obj => obj.hasOwnProperty('ключ')));

    Кстати, что даёт более общий вид.
    Считать можно разные суммы. Как, например, обычных массивов из чисел (sum([ 1, 2, 3 ]) // 6), так и более сложные варианты. Например, есть массив, представляющий содержимое корзины с товарами (цена, количество), надо посчитать общую стоимость:

    const cart = [
      { price: 100, count: 5 },
      { price:  10, count: 6 },
      { price:   1, count: 7 },
    ];
    
    const total = sum(cart, item => item.price * item.count); // 567

    Или, считаем количество лайков за ответы на этот вопрос (можете открыть консоль и прямо там выполнить этот код):

    const likes = sum(document.querySelectorAll('.btn_like .btn__counter'), n => +n.innerText);


    Или, можно посчитать, сколько элементов набора данных относится к той или иной группе. Функция подсчёта помимо данных получает в качестве параметра функцию, которая принимает элемент данных, и возвращает группу, к которой он относится:

    function Counter(data, key = n => n) {
      const counted = new Map;
    
      for (const n of data) {
        const k = key(n);
        counted.set(k, (counted.get(k) ?? 0) + 1);
      }
    
      return k => counted.get(k) ?? 0;
    }
    
    const keyExists = Counter(arr, obj => Object.hasOwn(obj, 'ключ'));
    console.log(keyExists(true)); // смотрим, у скольких элементов массива ключ есть
    console.log(keyExists(false)); // и у скольких нет

    Аналогично суммированию, есть разные варианты применения.

    const str = 'hello, world!!';
    
    const chars = Counter(str);
    console.log(chars('h')); // 1
    console.log(chars('!')); // 2
    console.log(chars('x')); // 0

    const persons = [
      { name: 'Вася', birthday: new Date('1999-05-22') },
      { name: 'Маша', birthday: new Date('2004-03-06') },
      { name: 'Катя', birthday: new Date('1976-05-15') },
      { name: 'Петя', birthday: new Date('1987-04-18') },
      { name: 'Коля', birthday: new Date('2000-01-01') },
      { name: 'Дима', birthday: new Date('2003-05-09') },
      { name: 'Миша', birthday: new Date('1996-02-29') },
      { name: 'Таня', birthday: new Date('1981-03-12') },
      { name: 'Олег', birthday: new Date('1992-08-24') },
    ];
    
    const birthMonths = Counter(
      persons,
      ({ birthday }) => birthday.toLocaleString('ru-RU', { month: 'long' })
    );
    console.log(birthMonths('май')); // в мае родилось три человека
    console.log(birthMonths('март')); // в марте два
    console.log(birthMonths('октябрь')); // а в октябре никто

    function* naturalNumbers(n) {
      for (let i = 1; i <= n; i++) {
        yield i;
      }
    }
    
    const numLengths = Counter(naturalNumbers(100), num => `${num}`.length);
    console.log(numLengths(2)); // среди первых ста натуральных чисел - девяносто двухзначных
    console.log(numLengths(3)); // и одно трёхзначное
    console.log(numLengths(0)); // число из нуля знаков? - конечно же нет таких

    Ответ написан
    1 комментарий
  • В чем суть такой записи в reset.css?

    nowm
    @nowm
    Это специфичное для blockquote определение, которое Eric Meyer (автор reset.css) позаимствовал у Paul Chaplin. Первая строка content: "" делает так, чтобы у blockquote исчезли кавычки — на случай, если вторая строка content: none не поддерживается браузером, потому что первая строка — это CSS 2, а вторая — это CSS 2.1. В одну строку их записать нельзя, потому что по стандарту для свойства «content» нельзя комбинировать ключевые слова «normal» и «none» с другими значениями.

    Вообще, когда встречается перечисление одного и того же свойства с разными значениями, это делается для того, чтобы обеспечить совместимость с разными браузерами. То есть, если, например, браузер не поддерживает «content: none», он применит «content: ""», а другую запись проигнорирует.

    Обычно дублирующие записи располагаются в определённом порядке. Первой записью идёт самый плохой вариант, который должен сработать везде. Затем идёт вариант, который более полно описывает вашу цель. Пример:

    .some-class {
        background: #e66465;
        background: linear-gradient(#e66465, #9198e5);
    }


    В этом коде, если браузер поддерживает градиентный фон, он сначала прочитает, что нужно использовать цвет «#e66465», а потом это перезапишется записью «linear-gradient», и итоговое значение будет «linear-gradient(#e66465, #9198e5);». Если же браузер не поддерживает градиент, он сначала прочитает, что нужно использовать «#e66465», а потом увидит неподдерживаемое определение «linear-gradient», проигнорирует его, и итоговое значение будет «#e66465».
    Ответ написан
    Комментировать
  • Как встроить на сайт сложную 3d анимацию?

    profesor08
    @profesor08
    Пример с анимацией по наведению курсора. Минусом будет тут то, что картинки надо объединить в одну длинную картинку, где все кадры следуют друг за другом по порядку. Онлайн сервисы по объединению картинок в спрайт есть.

    Ответ написан
    Комментировать
  • Что не так с Яндекс.Вебмастером?

    fangete
    @fangete
    человек
    Отправьте на переобход те страницы которые существуют
    Те которые не существуют - удалите (через Инструменты - Удаление страниц из поиска)
    Как робот переобойдет - все будет норм
    Ответ написан
    Комментировать
  • Почему директологи не хотят в штат?

    @Drno
    ПОтому что на фрилансе ты сам себе начальник. Когда хочешь начал, когда хочешь обед, когда хочешь закончил. Разонравился клиент - послал в пень... Я про рабочий день. А со своими офисами вы "доебете"... И еще в ваши офисы ездить надо, что время и гемор. еще и над душой будете стоять и советы давать и всякие КПИ накручивать, вместо норм оклада. Т.к. наши не могут придумать другую систему, кроме как угрожать потерей ЗП.
    Смысл - сам себе начальник, хотя и иногда с бОльшими заморочками
    Ответ написан
    Комментировать
  • Почему директологи не хотят в штат?

    Потому что так проще про’быватся и ничего не делать
    Ответ написан
    Комментировать
  • Есть ли библиотеки JS для синтеза речи?

    vabka
    @vabka
    Токсичный шарпист
    Что значит "хорошее качество"?
    Синтез силами ОС будет считаться?
    Если да, то в браузере есть встроенное API для синтеза речи:
    https://developer.mozilla.org/ru/docs/Web/API/Web_...

    Если хорошее качество - на уровне Яндекса, то нет, и быть не может.
    Ответ написан
    Комментировать
  • Как систематизировать знания?

    Adamos
    @Adamos
    Да все мы самоучки и пропустили "небесный инструктаж", как это называет Ричард Бах.
    Ощущение неполного понимания обозначает границу между тем, что вы действительно освоили, и тем, что еще нет. По мере накопления опыта граница будет расширяться, но не исчезнет никогда. Комфортно и уверенно вы будете себя чувствовать только в задаче, которую решаете не в первый раз.
    Добро пожаловать в профессию ;)
    Ответ написан
    2 комментария
  • Фрилансер кинул, сделав только часть задания. Можно ли вернуть деньги?

    @Alek1214
    Здравствуйте!
    Я на Хабр-Хабр захожу (время от времени!) практически с самого его существования, но зарегистрироваться решил только сейчас - так меня заинтересовала эта история. Заинтересовало не то, что кто-то кого-то якобы кинул на деньги - это пустяки, обычное дело на нашей необъятной родине, а то, что, во-первых, нашелся заказчик, который отдал аж 300 тыс. р. за изготовление 1 (одного!) сайта и что, во-вторых, нашелся "фрилансер" который за такие деньги и за такой срок (почти 2,5 месяца!!) ничего не сделал. Что это за сайт такой и что это за фрилансер???
    Дело в том, что я сам уже много лет занимаюсь сайтостроительством и точно знаю, что найдется масса фрилансеров, которые сделают полноценный сайт максимум за месяц и денег возьмут в 10 раз меньше, а то и еще меньше! (полноценный сайт - это многопользовательский сайт с форумом, блогами или онлайн магазин с массой категорий товаров и т.д. и т.п. с современным дизайном и функционалом).
    Поэтому у меня вопросы к уважаемому топикстартеру:
    1. На каком движке запилил Ваш сайт горе-фрилансер? Друпал? Джумла? Опенкарт? или...
    2. Неужели фрилансер стал делать сайт самостоятельно, с нуля? Тогда какой фреймворк он использовал? Симфонию? Зенд? или может быть писал сайт на каком-либо более экзотическом (для меня) языке типа Питон?
    3. На какой стадии готовности сайта фрилансер забросил проект? Нельзя ли дать ссылку на Ваш сайт?
    Заранее благодарю за ответы (если таковые будут - если нет, то ничего, я не обижусь)
    Ответ написан
    2 комментария
  • Как в Swiper отключить поддержку свайпов пальцем?

    Andrey_PSK
    @Andrey_PSK
    Обновим)
    allowTouchMove: false
    Дока
    Ответ написан
    Комментировать
  • Хочу написать фильтр мата, есть идеи как это можно реализовать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это война снаряда и брони, то есть она бесконечна. Её невозможно выиграть. Как только вы улучшаете броню, противник в ответ улучшает калибр снаряда, и так по кругу. Лучшим решением будет попытаться остановить войну, помешать её течению, а не наращивать мощь вооружения.

    Один из способов сделать это - перестать воевать, то есть сдаться. Тогда "игра" закончится. Те, кто пытался "победить систему", будут объявлены победителями и потеряют интерес к дальнейшей борьбе. Хотя останутся и те, для кого мат - это норма, и будут продолжать использовать его.

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

    Ещё приём - в дополнение к предыдущим - отсроченное наказание (модератором). "Игрок" не будет получать немедленное подкрепление в виде "молодец, обошёл фильтр", а будет вынужден ждать жюри. Однако ждать никто не любит, это тоже сильно бьёт по мотивации продолжать игру в сопротивление системе. Поэтому многие "партизаны" перейдут на сторону добра, ибо скучно.
    Ответ написан
    Комментировать
  • Как с помощью cron менять главную страницу сайта? каждый день новый html файл их 365?

    @rPman
    мини ликбез
    Есть два противоположных подхода к решению задачи, и выбор зависит от того, на сколько в принципе сложен сайт.

    Есть в веб разработке понятие - статика. Исходит оно из того что отдавать не изменяющийся файл тупо быстрее/проще/эффективнее по ресурсам чем изменяющийся по какой то логике, и у веб серверов для этого есть отдельная настройка. Часть файлов веб сервера - статичны. И даже существуют веб сайты, которые полностью могут состоять из статичных файлов.

    Это не значит что файлы нельзя менять, но само понятие работы веб клиентов подразумевает ожидание что файлы не меняются, а значит при изменении файла на сервере, клиент может продолжать видеть старую версию, причем разные клиенты увидят обновления - в разное время. Это называется - настройки кеширования, и даже для статики у веб серверов есть настройки на этот счет (правда уменьшая время жизни файла в кеше, уменьшается бонус от его статичности, ведь его будут чаще запрашивать).

    В противовес к статичным файлам есть динамически генерируемый контент, когда на каждый запрос клиента веб сервер заново генерирует ответ... логично что это наименее эффективный механизм, сильно нагружает сервер и т.п. И да, существует способ так же и для динамического контента настраивать время хранения его в кеше.
    Так вот к вопросу - если сайт это полностью статичный контент, то при необходимости его изменения достаточно подменить нужные файлы на сервере и настроить правильное время инвалидации кеша (не по интервалу времени а на конкретный срок, когда ожидается изменение), вполне возможно что не каждый веб сервер предоставит такие гибкие политики по настроке.

    Никто не мешает контент генерировать динамически и код стартовой страницы может выглядеть примерно так:
    <?php include date('d-m').'.html'; ?>где нужные страницы по дням лежат в файлах к примеру с именем вида 21-11.html

    можно попробовать совместить бонусы от статики, отдавая динамической страницей не саму страницу, а только редирект на ее статическое имя:
    <?php header('Location: http://www.example.com/'.date('d-m').'.html');?>
    тогда сразу в нужный момент времени при заходе на сайт будет автоматический редирект на нужную страницу, и при этом все будет быстро и красиво, но пользователям будет доступны страницы с предыдущих дней по их имени, и их придется как то скрывать, если это актуально (например средствами прав доступа или просто перемещая файлы в другой каталог отдельным скриптом, пусть и по крону)

    ну и вариант с кроном, когда файл index.html ежесуточно заменяется копией, команда в крон может быть примерно такой:
    cp /путь/до/исходных/файлов/`date +%m-%d`.html /путь/до/папки/веб/сервера/index.html
    Ответ написан
    5 комментариев
  • Можно ли для придания интерактивности на вэб-страницах в место javascripta использовать java?

    @alexalexes
    Стандарт html верстки не запрещает использования какого-то другого языка программирования, кроме js.
    <script type="text/ваш-язык-программирования"></script>

    Только вот незадача, кроме браузера, такое решение требует установки в ОС модуля среды выполнения - будь это java или silverlight, или что-то еще.
    Как правило, типичный пользователь не обладает таким роялем в кустах, у него есть только браузер и ему наплевать, есть ли в ОС какие-то специфичные модули, он хочет видеть ваш сайт исключительно с помощью браузера.
    Так что, только javascript.
    Ответ написан
    Комментировать
  • Колонки разной высоты на flex?

    align-items: flex-start
    По умолчанию стоит stretch (растяжение).
    Ответ написан
    1 комментарий
  • Как заново начать читать техническую книгу на 1300 страниц?

    Я в таких ситуациях просматриваю бегло снова и что мне кажется непонятным или забытым – перечитываю полностью.
    Ответ написан
    Комментировать
  • Как создать тикающие часы JS?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Таймеры в JS не точны, поэтому лучше вызывать tick() почаще. Скажем, 10 раз в секунду.
    Мигание лучше сделать полный цикл за секунду: чтобы и появлялось и гасло двоеточие каждую секунду:
    Замедленный вариант через секунду закомменчен.
    Ответ написан
    1 комментарий