• Как делают title жирным?

    iiiBird
    @iiiBird Куратор тега HTML
    Пока ты спишь - твой конкурент совершенствуется
    Это символы юникода: https://www.compart.com/en/unicode/block/U+1D400
    Ответ написан
    Комментировать
  • Как делают title жирным?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Легко
    https://unicode-table.com/ru/blocks/mathematical-a...
    Правда, часть символов в другом месте
    https://unicode-table.com/ru/blocks/letterlike-symbols/
    Ну и отображение будет зависеть от установленных в системе шрифтов.
    Ответ написан
    Комментировать
  • Изучение JavaScript в 2019?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Не надо тебе книг. Программирование - это структуры данных и алгоритмы, поэтому нужно решать овердофига олимпиадных задачек по информатике, иначе тебе ни одна книга не поможет решать реальные задачи. Так-что иди на кодварс и начинай решать задачки, и, параллельно, будешь потихоньку подтягивать синтаксис и API языка, но не наоборот, потому что память работает так, что не запомнишь ты ничего толком, пока не станешь это активно применять на практике. Т.е. впрок книжки читать бесполезно.
    Ответ написан
    2 комментария
  • Как не пускать на сайт при включенном adblock/ublock и прочее?

    @d-stream
    Готовые решения - не подаю, но...
    Большая часть пользователей адблокеров просто тут же покидает сайты-попрошайки, если их попрошайничество хоть как-то мешает. Бывают конечно редкие сайты-исключения, на которых блокировщики отключают.
    Но чтобы этого добиться - надо быть ресурсом типа хабра или Майкрософта.
    Ответ написан
    14 комментариев
  • Тестовое задание (Junior Frontend), приемлемое ли?

    @kirill-93
    Вертел я такие задания при устройстве на работу.
    Однажды тоже устраиваясь в "крутую" контору прислали большое задание. Все выходные убил на него. Потом еще две недели мурыжили собеседованиями и в итоге не взяли.
    Я с тех пор никогда не соглашаюсь на тестовые задания, которые займут больше получаса моего времени.
    Объемные задания должны оплачиваться. Если они очень требовательно отбирают сотрудников, то сначала надо дать простое задание/прособеседовать и уже если человек их устраивает, давать объемное задание и платить.

    UPD
    Не слушайте, пожалуйста, бред об опыте и пользе для вас. Из таких "будущих хороших специалистов" потом веревки вьют, типа "поработай по вечерам, это ж опыт для тебя!" или "давай ты теперь и по субботам выходить будешь, а мы тебя за это серьёром называть будем!". Очень работает с наивными молодыми людьми.
    Вы поймите, что все эти разговоры про опыт и пользу для вас - это уловки с целью сэкономить и вас обмануть. Всем плевать на ваш опыт, им нужно денег меньше вам заплатить и все.
    Огромное тестовое задание - это неуважение к кандидаду.
    Давай представим обратную ситуацию: я прихожу к потенциальному работодателю и говорю: "Давайте я у вас тут недельку посижу без каких-либо обязательств, а вы мне зарплату платите. А потом посмотрим, может быть останусь, а может уйду". Нормально? Ситуация выглядит именно так, потому что работодатель не делает одолжения принимая на работу, он "покупает" ваше время и ваш опыт и все.
    Ответ написан
    13 комментариев
  • Есть ли сайт, где собраны общепринятые практики программирования?

    Moskus
    @Moskus
    Естественно, нет, потому что всё, что вы описали - это не какое-то тайное знание, которое можно только запомнить, а логичные приёмы, которые следуют из знания фундаментальных принципов и анализа требований к продукту. Если попытаться заменить фундаментальные знания таким сборником прецедентов, он получится гигантским и совершенно непригодным для освоения - столько всего просто нельзя запомнить. Объем фундаментальных знаний - на порядки меньше объёма частностей, которые из них выводятся, но сложность этих знаний, при этом, выше. Кто фундаментальные знания не осилил, остаётся говнокодером, пока не осилит.
    Ответ написан
    Комментировать
  • Какова суть генерации своих событий в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробую на пальцах объяснить.

    Событие – это конверт, на котором написано его название. Внутрь конверта можете вложить что-нибудь, а можете оставить конверт пустым.

    Элемент – это столик. Кто угодно может подойти и положить на столик свой конверт.

    Слушатель – это мужик, который топчется около столика и смотрит, нет ли чего с интересующим его названием. Может несколько человек поджидать конвертики с определённым названием – прочтут все, если только в конверте не написано «по прочтении съесть» – тогда кто-то съест и дальше не передаст.

    Как создать/отправить конверт. В любом месте кода создайте конверт и дайте ему название: var myEvent = new Event('teaTime'); Остается положить конверт на нужный столик:
    document.getElementById('stolik').dispatchEvent(myEvent);


    Чтобы в событие вложить какие-то данные, нужно использовать другой конструктор и передать нагрузку в поле detail:
    var event = new CustomEvent('saySomething', { detail: "Hello there!" });


    Для чего нужно создавать свои события? Чтобы развязать куски кода. Например, в разных местах документа можно нажать на кнопку повторяющегося виджета. Виджет создаст на document событие "widgetClicked". А ещё несколько одинаковых компонентов в странице, слушающих document на предмет события "widgetClicked", получат пинок и что-нибудь вытворят.
    Ответ написан
    2 комментария
  • В какой последовательности читать книги по JS?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    За всю свою практику продолжительностью более 20 лет я прочитал только одну книжку по программированию, это был Фигурнов про программирование на паскале под ДОС, и это было в середине девяностых... С тех пор читаю только документацию и то по мере необходимости.

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

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

    В общем критерий истины - практика и никак иначе.

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

    Поэтому выбери себе проект, и начинай делать. Сначала будет все плохо, непонятно и вообще адский адов ад. И только если тебе хватит упорства и настойчивости, усидчивости, концентрации и везения, то, постепенно, все начнет меняться.

    Короче говоря ключевое слово тут ДЕЛАТЬ, а все остальное - лишь вспомогательные элементы.

    ЗЫ: Я встречал немало народу, почитавших книжек, прошедших курсов, знающих команды, но не умеющих их использовать, в результате не способных программировать. Для того, чтобы программировать, т.е. транслировать машине свою волю, на понятном ей языке, необходимо иметь эту самую волю для начала, а остальное уже приложится по ходу дела.
    Ответ написан
    3 комментария
  • Можно ли объединить все файлы (Js, json) в html?

    alexiusp
    @alexiusp
    senior frontend developer
    Если вы не знаете как вставить javascript в html, то я даже не знаю. Может начать с изучения азов? Например как работает тег <script>. JSON это по сути объект Javascript. Т.е. объявляете в javascript переменную и присваиваете ей содержимое этого файла. Только не забудьте потом переделать вашу функцию, чтобы она не запрашивала эти данные с сервера, а использовала значение объявленной переменной.
    Ответ написан
    Комментировать
  • Как работать с очень длинными списками в JavaScript (angular, react, vuejs)?

    profesor08
    @profesor08 Куратор тега JavaScript
    Проблем не будет. Для браузера эти количества ничего не значат. Заметно будет, когда там их тысячи будут. Но зачем рендерить тысячу сообщений, если можно только последний десяток актуальных, а если пользователь захочет, то подгрузить ему еще. Посмотри как это сделано в мессенджерах, у тебя изначально в чате доступно ограниченное количество сообщений, при прокрутке вверх, подгружаются более ранние. Тем самым тебе не надо хранить всю историю сообщений в памяти.
    Ответ написан
    Комментировать
  • Как работать с очень длинными списками в JavaScript (angular, react, vuejs)?

    alvvi
    @alvvi
    export default apathy;
    (angular не использует vdom, для него история другая)
    перерисует целиком свой виртуальный dom

    Давайте немного проясним: виртуальный DOM - это грубо говоря js объект содержащий другие объекты.
    При добавлении нового сообщения туда добавится новый объект и весь DOM сравнится со старой версией с помощью diff-алгоритма специфичного для конкретного фреймворка.
    И только результат этого сравнения добавится в реальный DOM.
    Работа с объектом значительно быстрее работы с самим DOM-ом, поэтому чтобы оно начало работать заметно медленее у вас должен быть дикий уровень вложенности или очень большой DOM.

    100 сообщений и 50 контактов - это небольшие цифры, с таким любой из упомянутых фреймворков справится без просадок.

    Вот пример бенчмарков с большим количеством объектов(1000+) для многих фреймворков на примере незамысловатой таблицы:
    www.stefankrause.net/js-frameworks-benchmark6/webd...
    (там же есть ссылка на репо чтобы увидеть как она выглядит)
    Как видите, там в таблицу уже содержащую 10 000 добавляется еще 1000(!) объектов, и многие фреймворки впонле с этим справляются.

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

    Stalker_RED
    @Stalker_RED
    Вы бы для начала почитали что эти страшные штуки вообще делают, а потом задавали какие-то более конкретные вопросы.

    Вот вы пишете что-то на ES8 и используете padStart(), который добавили прошлым летом.
    Затем запускаете свой код в IE10 - не работает (кто-бы мог подумать!)

    Берете свой код, прогоняете через бабель с указанием, чтобы была поддержка ие10
    Бабель добавляет что-то типа этого
    // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js
    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
    if (!String.prototype.padStart) {
        String.prototype.padStart = function padStart(targetLength,padString) {
            targetLength = targetLength>>0; //floor if number or convert non-number to 0;
            padString = String(padString || ' ');
            if (this.length > targetLength) {
                return String(this);
            }
            else {
                targetLength = targetLength-this.length;
                if (targetLength > padString.length) {
                    padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
                }
                return padString.slice(0,targetLength) + String(this);
            }
        };
    }

    Это конечно упрощенный сценарий, но вся суть в том, чтобы переделать современный JS в код понятный для старых браузеров.

    Точно так-же можно гуглить "что такое вебпак", "что такое typescript" и так далее.
    Затем прикидываете нужна ли вам эта штука, или вы пока без нее.
    Ответ написан
    3 комментария
  • Почему массивы не равны?

    EreminD
    @EreminD
    Кое-что умею
    Потому что это два объекта и вы сравниваете ссылки

    var a = [];
    var b = [];
    a === b //false
    JSON.stringify(a) === JSON.stringify(b) //true


    повеселитесь

    var a = [];
    var b = a;
    a === b //true
    Ответ написан
    2 комментария
  • Как правильно работать с исключениями?

    @Stqs
    senior software developer
    по-моему, тут вообще проблема заключается в том что бросать исключение будет не правильно
    особенно во втором примере
    исключение оно для обработки исключительных ситуаций (c) КО
    у вас же исключение происходит(вы сами его бросаете) для передачи управления другому коду
    то есть для организации логики
    это как бы атата, называется антипаттерном и за это можно на код-ревью получить по жопе

    Нужно ли оборачивать вызов метода someMethod() в try...catch и пробрасывать исключение дальше?

    а какой в этом смысл?
    вы таким образом можете себе навредить испортив оригинальный трейсбек
    Ответ написан
    Комментировать
  • Как правильно работать с исключениями?

    Stalker_RED
    @Stalker_RED
    На самом верхнем уровне вашего приложения должен быть какой-то Глобальный И Великий Обработчик Исключений Общего Назначения. Задачи у него очень простые - записать в лог что и где сломалось, показать пользователю табличку "ой, все пропало", и опционально пнуть мониторинг, отправить смс админу или письмо деду морозу.

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

    Рассмотрим пару примеров:
    1. Представим, что модуль "генератор превьюшек для фоточек", который верой и правдой трудился многие месяцы, однажды наталкивается на непреодолимую для него преграду и бросает исключение - "капец, место на диске кончилось, я так больше не работаю!"

    Если ваш код не может ничего с этим поделать - вы пропускаете это исключение выше, пускай Глобальный И Великий Обработчик показывает юзеру красивую табличку "извините, у нас перерыв обед", и шлет письма админу в три часа ночи. А если у вас облачный хостинг, например, и вы можете на лету подключить больше дискового пространства, или может снести какой-то ненужный кэш освободив место, то можно перехватить это исключение, показать юзеру "извините, за задержку, ваши фоточки будут обработаны через пару минут", а админу прислать не красный алерт, а желтый.

    2. Виджет, который показывает самых рейтинговых котиков с ютуба не смог подгрузить очередную порцию котиков, т.к. ютуб забанен роскомнадзором. Если ваш код ничего не может с этим поделать - Глобальный И Великий Обработчик Исключений покажет пользователю "ой все". Или вы перехватите это событие на более низком уровне и покажете табличку "свежих котиков нет, но вот есть рейтинг за прошлую пятницу". Или, если котики должны быть обязательно свежие, то можете предусмотреть экстренное подключение через vpn или tor, или может возьмете котиков с vimeo вместо ютуба, например.

    В итоге, общие правила такие:
    1. пропускаете наверх все исключения, которые не можете обработать.
    2. обрабатываете те, которые вот прям обязательно нужно и важно обработать, и у вас действительно есть для этого возможность.

    Важно в этом не переусердствовать, и не основывать бизнес-логику на исключениях. Этот механизм для редких, исключительных ситуаций, которые не получается обработать другим способом. Если модуль ресайза фоточек написан индусами, и его, внезапно, нечем заменить. Но если есть возможность (и необходимость) перевести эту проблему из разряда исключительной в обычную рабочую ситуацию - лучше так и сделать. Если у вас место кончается два раза в неделю - лучше настроить какой-то мониторинг, который будет следить за этим показателем и заранее разруливать такие ситуации. В случае с недоступностью сервера можно на уровне бизнес логики проверять доступность и подключать резервные каналы или источники данных, вместо того, чтобы падать с ошибкой "ой 500!".
    Ответ написан
    3 комментария
  • Можно ли переходить на изучение фреймворков?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    иногда туплю над организацией

    По-моему, после этого ответ вопрос "учить ли фреймворки" очевиден:)

    клипать аппки на ванильном JS

    Тут два возможных исхода. Либо вы придете в итоге к своему фреймворку -- который будет бажный, бедный и странный, потому что вы всего один, а vue/react/angular делают целые команды годами (к тому же у вас проблемы со структурой по вашим же словам). Либо закопаетесь в очень специфичных вещах, небольших лендингах, расширениях для браузеров и прочей мелочевке (я не говорю что это плохо само по себе, просто очень уж нишево).
    Подавляющее большинство работы на JS — это всякие админки и дашборды, которые собираются в основном из готовых компонентов и на переизобретение фреймворков просто нет времени.
    Ответ написан
    3 комментария
  • Как легко перейти с jQuery на VUE?

    Мне кажется, что фреймворки подойдут для более сложных приложений, нежели лендинги. В большом приложении есть много компонентов, которе часто используются в нескольких местах, есть роутинг и много других плюшек. Если это одностраничный лендинг, я бы не пихал туда никакой фреймворк. Просто не вижу смысла
    Ответ написан
    Комментировать
  • Javascript фреймворки - дань моде или быстрота и удобство?

    @alexmixaylov
    Не проще ли создавать страницы с использованием лишь html,css, js

    возможно в чем то и попроще, но используя те же самые CSS препроцессоры типа LESS или SASS
    вы значительно упрощаете себе жизнь используя хотя бы переменные и миксины
    а если нужно что то Изменить, а такое часто бывает....
    то же самое с JS, если использовать тот же VUE (ангулар и реакт намного сложнее) можно избавить себя от написания с нуля рутинных задач
    Ответ написан
    6 комментариев
  • Почему при if (6 || 5 && (x = 1)) переменная x не равна единице?

    @imhuman
    6 привелось к true, оставшаяся часть выражения просто проигнорировалась, как невлияющая на результат
    Ответ написан
    5 комментариев