• Какова суть генерации своих событий в 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 комментария
  • Верстка с нуля: какие основные этапы работы?

    pavelkarinin
    @pavelkarinin Автор вопроса
    Full Stack Web Developer
    На этот вопрос есть подписчики, не ожидал, что столько, но это говорит о том, что вопрос интересен и это хорошо. Поэтому хоть и я его автор, но отвечу тоже. Я, как человек, который пережил эпохи Mosaic, Netscape и IE (старички меня поймут), отвечу ещё и по той причине, что часто, нет … очень часто сталкиваюсь с тем, что действительно "талантливые" начинающие Front-End тратят попусту свое время, из-за незнания такого, казалось бы, вопроса ни о чем (как выразился Froggyweb) об организации своего workflow и начинают не с того, с чего стоило бы начинать в результате это приводит к тому, что некоторая работа просто дублируется, переделывается и т.д. лишь потому, что изначально об этом не подумал.

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

    Я работаю на трёх мониторах: центральный - вёрстка, левый - результат, правый - дизайнерский макет + чего ещё что надо по ходу пьесы, типа киношки, статейки и т.д.;

    Среда:
    в Visual Studio - для сложных и крупных проектов, плотно подсевших на Back-End;
    в Visual Studio Code - для проектов попроще;
    хе-хе в Блокноте - для совсем простых))

    Музыка – это святое, тем более я её тоже иногда пишу, но слушаю всегда чужую на SoundCloud))

    Создаю папку решения

    Создаю в ней подпапку всегда с одним и тем же имеем: _native_design, в которую (в зависимости от формата портирую дизайн)

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

    На этих компонентах выбираю неизменяемые и изменяемые элементы и определяю для них селекторы в соответствующих файлах scss (тут всегда туго с названиями, поскольку от природы я не очень одарён)

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

    Исходя из сетки, и из минимально необходимой версии браузеров (речь конечно же об IE), создаю файл _base.scss который наполняю сбросом стиля, и объявлениями для grid (ну все это не вручную, а сниппетами, импортами, инклудами, которые у меня подготовлены почти на все случаи жизни).

    Стараюсь придерживаться отлично зарекомендовавшего себя принципа "one base", который подразумевает единую основу для всего макета, т.е. есть одни базовый каркас (основа), и эта основа является местом для навешивания на неё всего необходимого. Часто вижу ошибки в этом плане, когда доходит до того, что ради одно "нестандартного" компонента страницы, встречающегося НЕ на каждой странице, используется отдельный (и не один) базовый стиль (по сути, файл), в котором 90% каскада продублировано с другим и т.п.

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

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

    Потом начинается работа с адаптивностью. Я всегда сворачиваю контент, т.е. начинаю с широкого формата, потом desktop, tablet, mobile. Тут ничего сложного нет, особенно когда есть сетка, исходя из того насколько много компонентов плотно зависят от размеров, выбираю как прописывать медиа-запросы, т.е. либо запрос внутри селекторов блоков, либо селекторы внутри запроса. Как правило, используется 4-6 точек + по две на каждую основную точку, т.е. на 1px больше и на 1px меньше, но не всегда, зависит от макета. Не забываем про DPI.

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

    Потом начинается JS, т.е. наполнение интерактивом уже не средствами CSS, а именно скриптовым.

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

    Короче, как-то так… ради ответа, открыл Word и накатал этот текст. Уверен, что что-то пропустил, о чем-то не сказал, но не судите строго))

    UPD:
    Забыл сказать: про измерения скорости загрузки и скорости отрисовки. Этому стоит уделять внимание особенно в макетах со сложной композицией! Следует помнить о том, что перед отрисовкой браузеры проводят серьезный анализ DOM и каскада стилей, есть способы оптимизировать эти моменты, это важно для мобильных устройств, если у сайта нет для них отдельной версии. Это же касается и JS в части вашего ручного кода.

    UPD2:
    Ребят, я Skype указывал не для того, что вы присылали мне на него вопросы. Есть уточнения, пишем сюда или создаем новый вопрос на Тостере. Спасибо за понимание.
    Ответ написан
    4 комментария
  • Верстка с нуля: какие основные этапы работы?

    NooNoo
    @NooNoo
    Yep
    Mikhail @NooNoo
    Рубрика "Давай глянем,что там у нас есть". Я использую такие штуки в работе:
    Препроцессор: LESS
    Работа с макетами: PH или Sketch.
    Сборщик: Gulp
    Методология: БЭМ (но начал заглядываться на SMACSS)
    Консоль: консоль :D
    Место хранения репозитория: GitHub.

    1) Создаю репозиторий на гите.
    2) Создаю локально структуру проекта. (папки для картинок и тд).
    3) Открывают макет
    4) Создаю первые наброски в html (создаем классы по выбранной методологии), в голове держим,что mobile first. Подключаю основные фалы препроцессора (шрифты, глобальные стили, миксины, класс visually-hidden, переменные)
    5) Выстраиваю сетку. (flexbox или гриды)
    6) Начинаю стилизовать мобилку -> планшетную -> десктопную версию.
    7) Отшлифовка кода и поиск более рациональных решений, где это допустимо.
    8) Донастройка сборщика, который все в итоге соберет продакшен версию.

    Вкратце как-то так)
    Ответ написан
    2 комментария
  • Верстка с нуля: какие основные этапы работы?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    Использую vscode+webpack+pug+scss+бэм. Из физических инструментов, основной моник: lg ultrawide 29um69g, рядом прикручен моник от ноутбука повешенный вертикально, подключенный через универсальный скаллер.

    0) Запускаю Spotify :-)

    1) Произвожу установку всех необходимых модулей для сборки. В моем случае у меня набор конфигураций для webpack (отдельные файлы для pug, scss, static и.т.д., выбираю что нужно).

    2) Запускаю avocode, загружаю в него макет. Определяю в нем переменные (в то же время записываю их, чтобы сразу кинуть в scss файл) для цветов, размеров шрифтов и.т.д. чтобы при получении кусочков кода из него, он сразу расставлял переменные.

    3) Запускаю VS Code, открываю нужную папку.

    4) Пишу размету на Pug. Пишу с БЭМ, если встречаю повторяющийся блок, то открываю файл _mixins.pug, в который пишу миксины для повторяющихся блоков, например товаров, пунктов меню, каких-то блоков и.т.д. Pug умеет делать циклы, это ускоряет сильно.

    5) Когда HTML готов, начинаю делать каркас. Если дизайн сделан по сетке, определяю контейнеры, колонки, строки в свои классы (не пишу в html тучи классов аля col-md-6, а пишу в SCSS инклуды в нужные мне блоки, типа @include make-col(2) и.т.д.).

    6) Экспортирую картинки из Avocode. Очень делается просто, указываю папку и просто кликаю экспорт и ввожу название файла и расширения. Преимущественно для иконок использую svg, если нет svg, то ищу эту иконку в интернете (дизайнеры редко рисуют иконки сами, но зато любят вставлять их не в векторе). Если иконка простая, могу сам ее в inkscape обвести, ну и если нет, то экспортирую png в размере (благо авокод это позволяет, если конечно дизайнер не вставил в исходном маленьком размере). Когда есть контакт с дизайнером, трясу его, ибо растр это плохо для иконок.

    7) Пишу стили блоков из страницы. На этом этапе можно на втором монике параллельно смотреть футураму или
    Арчера :-) Но чаще на широком монике слева браузер, справа VS Code, а на втором монике Avocode (может меняться местами с браузером). Мысленно нарезаю страницу на блоки. Для каждого блока (БЭМ) создаю отдельный scss файл (кто-то даже для элемента создает, но мне лень), из него сразу выписываю все селекторы. Иногда могу сначала выписать все селекторы со страницы (но так лучше не делать, т.к. во время работы может потребоваться изменить что-то в разметке), но чаще для одного блока выполняю этот пункт и за ним сразу выполняю пункт 8, потом для нового блока опять 7 и 8 и.т.д.

    8) Пишу css код вместе с Avocode, у него беру нужные мне параметры (а он уже подставил в них переменные), и вставляю в мой код. И параллельно сверяю со скрином макета используя вот это расширение https://chrome.google.com/webstore/detail/perfectp...

    9) Пишу адаптив. Я не могу привыкнуть к методологии mobile-first, поэтому пишу всегда сначала полную версию сайта. Я понимаю, что это чревато всякими проблемами и это типа не модно, но мне норм.

    10) Медиа-запросы пишу прямо в блоках, для каждого блока/элемента/модификатора может быть отдельный медиа-запрос. Но для начала определяю breakpoint'ы для разных экранов (чтобы их не было сотни разных), если использую Bootstrap, то беру его breakpoint'ы.

    11) Добавляю анимашки. Даже если заказчик не просил отдельно (и если не указал отдельно, что нельзя), он все равно будет доволен, а с animate.css+onscreen.js это вообще работа 10 минут. Сложные анимации обговариваю отдельно, чтобы не сделать ненужную работу.

    11) Все снова сверяю, пишу скрипты где надо. Для слайдеров в 99% случаев подходит slick (с доработками конечно, но там хорошее API), для других случаев могу написать свой.

    12) Сдаю заказчику и жду ответа сидя на тостере/пикабу.

    Это чисто мой опыт, опыт фрилансера, не знаю, как делают другие и не могу на 100% утверждать что это 100% правильный способ. Я так и не смог заставить свой конфиг webpack правильно вставлять спрайты svg.
    Надеюсь чем-то поможет мой ответ.
    Ответ написан
    7 комментариев
  • Для чего нужно ООП?

    Stalker_RED
    @Stalker_RED
    Для управления сложностью.
    https://habrahabr.ru/post/169487/

    Все что сделано при помощи ООП можно написать и в процедурном стиле, например, но чем сложнее проект тем сложнее будет во всей этой каше разобраться. Весь смысл ООП - разбить большущую сложную систему на кучу отдельных ПРОСТЫХ объектов, методов, сущностей.
    А еще с ООП неразлучна абстракция. Чтобы можно было одну часть программы выбросить и подменить на другую.

    Сегодня у нас выводится на веб-страничку, по которой кликают мышкой, а завтра не мышкой - а тач пальцами. А послезавтра вообще в VR шлем, и управление голосом. И если система правильно спроектирована - ее не придется переделывать ПОЛНОСТЬЮ, а только ту часть, которая ответственна за ввод/вывод.
    Ответ написан
    Комментировать
  • Какие стратегии повышения зарплаты существуют?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Центральный показатель для бизнеса, а следовательно и руководителей, как людей представляющих интересы этого самого бизнеса - это коэффициент возврата инвестиций (ROI). Соответственно, сотрудник должен приносить компании больше денег, чем потребляет. Естественно, что чем выше разрыв между затратами и прибылью, тем лучше, поэтому фонд оплаты труда руководитель должен держать на том минимальном уровне, который гарантирует бесперебойную работу сотрудников. Один из факторов этой бесперебойности - низкая текучка. Сотрудников терять нежелательно. И чем ценнее для компании сотрудник, чем более он профессионален и/или чем больше на него завязано, тем дороже обходится его потеря. Натурально в деньгах. Придётся затратить больше, чем обычно, денег на поддержание работы без него. Придётся затратить деньги и время (те же деньги) на поиск, найм, введение в работу, возможно, обучение нового сотрудника. При этом он может оказаться совсем неподходящих и цикл придётся повторить. Или может оказаться просто хуже прошлого и эффективность отдела снизится. Поэтому, когда сотрудник приходит просить прибавку, руководитель оценивает может ли этот сотрудник уйти или только блефует, насколько легко его будет заменить, какой урон компании будет нанесён его уходом. Потом руководитель оценивает стоимость расширения ФОТ - есть ли резервы, какой сейчас ROI, будет ли больший ROI от реинвестиции этих средств во что-то другое? Если уход сотрудника будет стоить меньше, чем увеличение ФОТа, сотруднику откажут.

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

    Из этого вывод, стратегия проста - увеличивайте собственный профессиональный уровень на столько, чтобы свободно менять компанию, как только вас что-то перестало устраивать.
    Ответ написан
    4 комментария
  • Как достичь большого КПД от выполняемой работы и заказов?

    Отвечу скорее всего как смежное звено, попытаюсь сам структурировать инфу, ну и может натолкну кого на мысли.

    У меня несколько человек, с которыми я постоянно работаю (около 7). От них идут постоянные заказы (довольно объемные и тд). Теперь к сути вопроса.

    Что я делаю:
    1. Все задачи, все заказчики мне кидают в Trello. Там же они обозначаются по степени важности.
    2. Бывает что это задачи что-то поправить и тд, мелочи в общем. Как раз на таких мелочах и тратится большая часть времени, поэтому указываем степень важности.
    3. Выполнил задачу, перенес ее в категорию Сделано. Клиент сам потом проверяет еще раз, все ли нормально, после чего там же, если нужно, пишет замечания и тд. Все это дело всегда мне доступно из приложения, либо с десктопа, уведомления и тд - полезная вещь. В общем на пустую болтавню время мы не тратим.

    Это что касается мелких задач. Если речь касается проектов.

    1. Присылается ТЗ, обсуждение. На этом этапе как раз львиная доля времени и тратится, но без этого никак. После чего просто по пунктам ТЗ я выполняю работу, что-то пропускаю, если тратится много времени и это можно пропустить.
    2. Отчитываюсь о промежуточной работе, присылаю тз с выделенными фрагментами, что сделал. Обсуждаю неясности, если они есть.
    3. Второй самый жрущий время этап - допиливание, тут обычно все дело затягивается на несколько дней (ждешь что-то от заказчика, он что-то ждет от дизайнера и тд). Как правило весь проект на этом этапе сделан, нужно только отрихтовать.
    4. Если проект действительно сделан и все мелочи остались за заказчиком, то делаю самые простые задачи из следующего проекта. Считаю что любой проект можно разбить на подпроекты, их в свою очередь еще на более простые задачи. В общем дробление - наше все.

    По тайм-менеджменту ничего толкового не скажу, сам пытаюсь с ним разобраться, однако советую:
    1. работать строго по определенному графику (обычный рабочий или ваш личный, главное чтобы кол-во рабочих часов было адекватным).
    2. бывает что нужно что-то делать в ночь, потому что что-то произошло, если вина ваша - работаете и все, если заказчик предлагает вам допилить в 5 утра новый модуль потому что он про него забыл, а сдавать уже в 7 утра, поднимаете цену за проект и работаете, либо отказываетесь это делать (чревато чем угодно).
    3. Для увеличения КПД вашего собственного нужно отдыхать. Обязательно прогулки на улице 1-1.5 часа в день. Помогает разгрузить голову и не будет проблем со здоровьем (как человек, который на этом попался и получил целый букет псих. расстройств - настоятельно рекомендую), физические нагрузки, и не забывайте про глаза. Каждый 40-60 минут дайте отдохнуть глазам (можно делать 5минутную гимнастику).

    По ценам и срокам, тут уже как каждый горазд. Я смог немного набить руку и просто прочитав тз озвучиваю цену + 10-15% на случай непредвиденных правок и тд. Кто-то рекомендует за каждый пункт тз назначать цену, но я считаю это не всегда выигрышным вариантом, потому что получить адекватное ТЗ - подарок.

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

    copist
    @copist
    Empower people to give
    Какие задачи нужно уметь решать на чистом JS, перед тем как переходить к изучению библиотек и фреймворков?


    Кроме синтаксических конструкций, математических и логических выражений, нужно знать:
    • Область видимости переменных
    • Замыкания
    • Объектно-ориентированное программирование, в частности наследование через прототипы
    • Шаблон проектирования "модуль"
    • Операции над DOM
    • Понимание принципов событийно-ориентированного программирования
    Важно - нужно знать, откуда копипастить.
    Тебе нужно быть очень хорошо знакомым с одной-двумя-тремя популярными библиотеками на JavaScript. В идеале ты должен иметь представление о том, что определённый класс задач может быть решен с помощью определённых библиотек, хотя бы одной, но такие знания приходят с практикой. Вообще ты должен быть знаком с ними так близко, чтобы помнить, в какой части мануала по библиотеке можно найти описание форматов входных данных нужной тебе функции и какой будет результат, чтобы скопировать и вставить в свой код, а потом поправить, чтобы работало.

    Важно - инструменты программиста JavaScript
    У тебя должен быть удобный инструмент для разработки (IDE, Integrated Development Environment), чтобы он тебе подсвечивал код (syntax highlight) и подсказывал о синтаксических ошибках (syntax check), о формальных параметрах функций (type hinting), о стиле кодирования (code style), помогал писать код (live templates).
    Ты должен знать, как отлаживать скрипты в популярных браузерах (Firebug, Chrome Developer Tools и другое). Что такое точки останова, как управлять исполнением во время останова, как посмотреть и поменять содержимое переменных, как настроить останов по условию.

    Хотелось бы узнать что это за задачи(упомянутые вами 80%)


    Реальные задачи джунов:
    1. Возьми из сборника задач по javascript любой скрипт случайно и вслух расскажи, что он делает.
      Важно - читать и понимать чужой код намного важнее, чем писать свой. И на работе тебе это приддётся делать чаще, чем ты думаешь. Чтобы подключить к своему проекту чужую JS либу, нужно понимать что она делает, как она конфигурируется, как управлять её поведением. Скажу точно, что написать свой скрипт, который строит графики, намного сложнее, чем понять, как настраивается highcharts.

    2. Напиши скрипт на JS, который в заданном тексте удалит один или два символа, выбранных случайно
      1. Усложнение: удалять можно только буквы в словах, а знаки пунктуации и цифры удалять нельзя
      2. Усложнение: принять, что этот текст является программной на Javascript, удалить одну-две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя)
      3. Усложнение: воспользуйся этим скриптом и "попорти" код какого-нибудь другого скрипта на Javascript, а потом отладь, найди ошибку и восстанови работоспособность
      Важно - этим обычно все и занимаются - ищут баги. Только в реальной жизни они и без этого скрипта появляются. И не по одному, а прям пачками.

    3. На страницу HTML нужно встроить график курса доллара по отношению к рублю. Формат входного массива значений курса определи сам, исходя из своего скрипта для построения графиков.
      1. Усложнение: на одном графике должны быть два курса, по разным шкалам. Наприме, курс доллара к евро и курс юаня к рублю
      2. Усложнение: первоначально график вывести в детализации по месяцам, но чтобы можно было "приблизить" (drilldown) детализацию до дней
      3. Усложнение: первоначально график вывести текущем месяце, но чтобы можно было загрузить данные для предыдущего месяца без перезагрузки страницы (AJAX)

    4. При клике по картинкам, вставленным в текст HTML, показывать всплывающее окно для просмотра увеличенной картинки.
      1. Усложнение: в всплывающем окне сделать навигацию по картинкам, вперёд/назад и к нужной картинке
      2. Усложнение: в всплывающем окне вместо картинки показать видео-ролик с Youtube
      3. Усложнение: в всплывающем окне показать текст HTML

    5. По клику на кнопку "Click me" показать всплывающую форму.
      1. Усложнение: реализовать проверку данных на корректность перед отправкой формы (непустое значение, минимальное количество символов, максимальное количество символов, минимальное числовое значение, максимальное числовое значение)
      2. Усложнение: если в значении текстового поля встретилась гиперссылка, то считать её за 22 символа при любой длине этой ссылки (как в твитере)
      3. Усложнение: реализовать отправку формы на сервер через AJAX, без перезагрузки страницы
      4. Усложнение: саму форму в виде HTML загрузить с сервера через AJAX, в момент клика по кнопке "Click me", правила проверок данных должны как-нибудь "извлечься" из самой загруженной формы, например из аттрибутов полей ввода

    6. К форме ввода данных на поле ввода даты "навешать" всплывающий календарь для выбора даты.
      1. Усложнение: сделать форму календаря мультиязычной. Хотя бы через настройки на том же JavaScript
      2. Усложнение: сделать так, чтобы с помощью календаря можно было выбрать диапазон дат, чтобы она была привязана к двум полям формы "дата начала" и "дата окончания", и чтобы значение в поле "дата начала" обязательно была меньше чем в поле "дата окончания"
      3. Усложнение: сделать так, чтобы с помощью в календаре можно было видно визуально этот диапазон
      4. Усложнение: диапазон может быть открытым, но не пустым, то есть пользователь должен задать хотя бы дату начала или дату окончания.

    7. Сделать пред-просмотр веб-страницы HTML с разными темами. Тему страницы выбирать через селектор на javascript, а показывать в фрейме.
      1. Усложнение: сделать селектор "тип устройства", чтобы менять размер фрейма (например, "iPhone 5c 1136x640") и "чекбокс" для смены ориентации страницы "горизонтальная" или "вертикальная" (соответственно 1136x640 или 640x1136)
      2. Усложнение: в селекторе тем предусмотреть поиск тем по подстроке, и аналогично поиск устройств по части названия (авто-дополнение, auto-complete)
      3. Усложнение: тема страницы должна меняться без перезагрузки фрейма



    Задачи повышенной сложности, исходя из личного интереса
    1. Реализовать форму для многошагового мастера: форма должна состоять из нескольких страниц (шагов), пользователь может переключать страницы через какие-нибудь элементы управления "вперёд/назад" или "перейти на страницу".
      1. Усложнение: реализовать функциональную связь значений, когда некоторые данные зависят друг от друга (ввёл число в поле "количество" и в поле "сумма" значение пересчиталось)
      2. Усложение: доступность некоторых полей ввода должна зависеть от данных (например, если указал "есть личный самолёт", то значит можно ввести "марка самолёта")
      3. Усложение: видимость некоторых страниц должна зависеть от данных из предыдущих страниц (например, если указал "есть личный самолёт", значит появилась страница "ТТХ самолёта"; иначе страница должна скрыться)

    2. Реализовать однопользовательскую браузерную игру "змейка", "тетрис", "найди пару"
    3. Реализовать многопользовательскую браузерную игру "крестики-нолики", "морской бой" на два игрока в режиме "hot seat"
      1. Усложнение: два игрока на разных компьютерах, ходы передаются по websocket
      2. Усложнение: ограничение на ожидания окончания хода 15 секунд, по окончании ожидания автоматически делается случайный ход

    4. Реализовать todo-list. Пользователь вводит список, затем он превращается в строки с "чек-боксами". Когда "чекбокс" включен, строка зачёркивается.
      1. Усложнение: пользователь может переименовывать, удалять, добавлять строки
      2. Усложнение: список хранить в localStorage браузера, чтобы при перезагрузке страницы он восстанавливался
      3. Усложнение: пользователь может иметь несколько независимых списков todo

    5. Реализовать простой графический редактор. Пусть рисуется точка в месте, где пользователь кликнул.
      1. Усложнение: добавить переключатель режимов "точка"/"линия", в режиме "линия" рисуются линии между двумя последовательно кликнутыми точками
      2. Усложнение: можно менять толщину, цвет линий, размер точек
      3. Усложнение: последовательность кликов можно воспроизвести ещё раз с самого начала, равномерно или с реальной задержкой между кликами, с обычной скоростью или ускоренно
      4. Усложнение: можно выгрузить получившийся рисунок в формате PNG или SVG, причём SVG c анимацией воспроизведения



    Можно использовать любую существующую библиотеку.
    Например,
    для построения графиков www.highcharts.com
    для загрузки и передачи данных через AJAX: jquery.com + что-нибудь на сервере
    для всплывающих диалогов с картиками, видео и формами: fancyapps.com/fancybox и https://jqueryui.com/dialog/
    для валидации форм rickharrison.github.io/validate.js
    для календаря https://jqueryui.com/datepicker/
    для автодополнения https://jqueryui.com/autocomplete/
    для передачи данных между несколькими пользователями socket.io или обычный AJAX
    Ответ написан
    16 комментариев
  • Codewars, на сколько поможет подтянуть js?

    Jump
    @Jump
    Системный администратор со стажем.
    Скажите, реально ли по codewars прокачаться по js
    Реально.

    Скажите, реально ли по codewars прокачаться по js до уровня среднестатистического front end разработчика?
    Нереально, ибо к front end разработке он никаким боком не относится.

    JS это инструмент. Как молоток, или пила. И им нужно уметь пользоваться.
    Но хорошее умение пользоваться молотком и пилой не сделает вас умелым плотником. Ибо это только часть умения, необходимая, но не исчерпывающая.
    Ответ написан
    Комментировать
  • Выбор фреймворка для нового проекта - Angular? React? Vue?

    dom1n1k
    @dom1n1k
    Лично для меня Vue - это такой "фреймворк с человеческим лицом".
    В целом JS-мир похож на поле боевых действий, где постоянно то налеты авиации, то кононада гремит, то хипстерская конница с новым логотипом на знамёнах проскачет.
    А "обычный" человек сидит в подвале, обхватив голову руками, и думает - мама дорогая, куда я попал, и чё ваще вокруг происходит?
    Какие-то новые паттерны, подходы, языки... Раньше, чтобы начать, достаточно было блокнота и браузера. Пишешь hello world и сразу его видишь. Теперь нужно поставить ноду, овер 9000 пакетов, десять транспиляторов, таск-менеджеров и бандлеров. Пока увидишь рабочий результат - поседеешь.
    И вдруг какая-то добрая душа взяла у хипстоты всё самое лучшее и разумное, что та родила, но очистив от лишних абстракций и усложнений - и выкатила велосипед в виде велосипеда, а не турбо-космолета с инструкцией толщиной как "Капитал". И снова можно писать в блокноте и смотреть в браузере. При этом почти не проигрывая в возможностях.
    Ответ написан
    1 комментарий
  • Upwork как правильно получить первого клиента?

    search
    @search
    мама говорит что я особенный
    Как исполнитель, заработавший больше 100К$ (PHP, JS) на апворке и как заказчик, потративший больше 300K$ (тоже PHP и JS), скажу, что cover letter - это 90% успеха.

    Cover letter в стиле "быстро, дёшево, качественно" - сразу отправляются в топку. Когда фрилансил, то 10 из 10 заказчиков мне отвечали и почти всегда нанимали. Просто потому что в cover letter я сразу рассказывал как буду решать их задачу и задавал дополнительные вопросы по проекту. Когда нанимал сам, то хороший cover letter, где рассказывали что будут делать и задавали правильные вопросы, я получал, примерно один раз из 20 в случае с бэкендом (PHP) и ни разу за всю практику в случае с фронтендом (JS). Вообще грамотных фронтендеров на апворке я нашел ровно 0 (предлагая 35$ в час за ПОСТОЯННУЮ неограниченную работу), поэтому пришлось отказаться от услуг фриланса.

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

    Такие дела
    Ответ написан
    4 комментария
  • Как вы организовали хранение данных к проектам?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Как уже написали стоит использовать системы контроля версий. Например Git. Если нужны бесплатные приватные репозитории, то можно пользоваться gitlab или bitbucket.

    Лично я дома использую следующую схему:
    На сервере гипервизор esxi. Одна из виртуалок gilab-ce. В другой виртуалке развернул jetbrains youtrack. В проектах youtrack настраиваю синхронизацию с репозиториями из gitlab.
    В качестве IDE использую phpStorm, в котором настроена синхронизация задач с youtrack.

    Когда проект приходит в работу:
    1) Создаю репозиторий в gitlab.
    2) Создаю проект в youtrack
    3) Настраиваю в youtrack синхронизацию с репозиторием
    4) В youtrack нарезаю проект на задачи
    5) На рабочей машине создаю проект в phpstorm и настраиваю в нем синхронизацию задач с youtrack.

    Дальше при работе над конкретными задачами в phpstorm ставлю выполнение тех или иных задач, через tools->Tasks&context

    А теперь для чего все это нужно:
    Иногда встречаются повторяющиеся задачи, но тяжело вспомнить в каком проекте они реализовывались. А так в результате всех этих манипуляций, я имею историю работы над всеми проектами в yotrack. Причем сразу видно описание задач, в которых можно отследить какие изменения в код вносились по той или иной задаче. Например вот так это может выглядеть https://yadi.sk/i/WER-B7yB3L5ybN . Теперь почитав описание задачи, можно открыть вкладку VCS и сразу перейти в коду.
    Ответ написан
    4 комментария
  • Насколько легко(или сложно) будет злоумышленнику похитить access_token из local storage?

    petermzg
    @petermzg
    Самый лучший программист
    Для cookies можно на сервере задать следующие флаги

    Secure - The Cookie will be sent in secure channel--HTTPS
    HttpOnly- Don't allow local scripts read cookies.

    Из javascript уже не достать будет.
    Ответ написан
    Комментировать
  • Какие есть интересные сайты со статьями на тему Frontend?

    Читаю ТОЛЬКО фронтенд-дайджест zfort на хабре.
    Самое важное туда попадёт. А если и нет, то как-нибудь косвенно до меня само дойдёт. А если не дойдёт, то значит оно и не надо.
    Намеренно больше не читаю\не сёрфлю инфу по веб-разработке где-либо, т.к. информации больше, чем людей, которые её постят и во избежание информационной перегрузки. Предпочитаю это время на книжки хорошие потратить.
    Ответ написан
    Комментировать
  • CSS и JS анимации, как освоить?

    mudrenokanton
    @mudrenokanton
    frontend dev
    Просто начните пытаться реализовать свои идеи. Возникнут вопросы, найдете на них ответы. Так и научитесь.
    Со знанием базовых вещей будет проще конечно, но все равно прогресс чувствуется когда садишься и делаешь.

    По SVG:
    commons.oreilly.com/wiki/index.php/SVG_Essentials/...
    Книга по основам, я читал в более адекватном epub формате
    https://sarasoueidan.com/tags/svg/index.html
    Блог Сары (SVG, но можно и про CSS&JS почитать), более практичные и полезные вещи, читал с конца к началу

    По JS:
    https://classroom.udacity.com/courses/ud860/lesson...
    Это база для понимания "че оно лагает?"
    https://developers.google.com/web/tools/chrome-dev...
    Понимание возможностей DevTools, очень упрощает жизнь в перспективе
    https://github.com/getify/You-Dont-Know-JS
    И конечно знание самого JS всегда нелишнее

    По библиотекам и анимации:
    Сам codepen, понятное дело. Смотрите в чужой код, пытайтесь разобраться.
    https://www.youtube.com/playlist?list=PLkEZWD8wblt...
    Более-менее можно прочувствовать что такое GSAP вообще, неплохой начальный курс
    https://greensock.com/docs/#/HTML5/GSAP/TweenMax/from/
    Сама документация и туториалы на сайте, можно и на их youtube канале что-то подсмотреть.
    https://tympanus.net/codrops/
    Много полезного с примерами

    Всякого рода математика:
    https://www.youtube.com/playlist?list=PLRqwX-V7Uu6...
    https://www.youtube.com/user/codingmath/videos?flo...
    Можно залипнуть, чтобы понимать как все эти векторные фишки делаются на canvas

    Еще есть 3D, но это отдельная тема.
    Ответ написан
    1 комментарий
  • Как защитить код от воровства в крупной компании?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Полную (или почти) защиту вы можете реализовать по принципу банковских "теневых" серверов.
    Похожую систему безопасности описал Сергей

    Когда я работал в Х банке, мы спускались на лифте в офис разработки, там проходишь рамки, отдаешь мобильники и др. электронику. Выдают офисную рацию для связи.
    Каждый комп находится в таком положении, что при желании др. человек не увидит чем вы занимаетесь.
    В системниках есть только один usb (и то не везде), который имеет физическую защиту. Служит для банковских ключей. Периферия подключена ps/2.
    Вся локальная сеть не имеет доступа во внешний мир.
    Код выкладывается на боевую систему через сервер-шлюз. Т.е. данные из рабочей сети выкладываются на шлюз, локальная сеть отрубается а далее уже на продакшен.
    Шлюз защищен вероятно хорошо, но этого я уже не знаю.

    Так же на столе стоит камера- блок. Когда вы отходите от нее (от компа), система блокируется и просит ввести логин/пароль.

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

    edinorog
    @edinorog
    Троллей не кормить!
    Физически изъять порты из системников. Никаких вай-фай и блютуз. Камеры к каждом кабинете. Полное логирование набора на компе. Изъятие мобильных на проходной. Только корпоративный внутренний почтовик. Выкрученные на максимум политики безопасности. Мыш и Клава кругляшами втыкаются. Системники опечатанные замками. С пломбами. Сервер кода выбирается индивидуально. Но с четкими правами на объём и доступ. Сетевые провода с замками на обеих концах. Глушилка мобильной связи и анализатор частот круглосуточно. Досмотр на входе. Начальник охраны с мордой как будто пил 2 года подряд. Желательно слегка больной на голову. Его ж потом не посадят ... у него справка есть)

    Это на разминку. Можно внедрить терминалы. Сеть однозначно изолированная от внешки. На должность берутся штатный наблюдатель с камер и плюс ещё один ведущий специалист по безопасности. Попытка экономить на любом этапе ... обнуляет все вышеперечисленное.
    Ответ написан
    2 комментария
  • Базовые знания в создании сайтов для выхода на upwork?

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