• Какую книгу выбрать для быстрого изучения английского (1 месяц)?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Считаются эффективными ассоциативные методики (не книга).
    Прежде чем оценивать, просмотрите первый урок.
    ЗЫ: Раз, Два, Три месяца не хватит на освоение 2-го языка. Четыре.
    Ответ написан
    1 комментарий
  • Для чего нужны замыкания (js)?

    AlexMaxTM
    @AlexMaxTM
    Ну если доступным, языком, то тогда на примере.
    Например, надо выводить в лог сообщение, а также номер строки и время прошедшее с момента зарузки страницы.

    Если не использовать замыкание, то надо определить следующую функцию
    function log(timespan, lineNumber, msg) { 
       console.log(linNumber + " " + timespan + " " + msg;
    }

    и две переменные
    var start = Date.now();
    var lineNumber = 1;

    Вызываем log так
    log(Date.now()-start, lineNumber++, "один");
    log(Date.now()-start, lineNumber++, "два");

    Очевидно, что это неудобно.

    Если использовать замыкание, то пишем так
    var log = (function () {    // функция 1
       var start = Date.now();  // текущее значение сохранятся в start 
       var num = 1;             // также используется в замыкании в функции 2. 
       return function (msg) {  // функция 2 - сохраняется в var log
          console.log(num++ + " " + (Date.now()-start) + " " + msg);
       }
    })();    // () -- вызываем функцию 1

    Вызываем так
    log("один");
    log("два");

    Результат
    lineNumber   timespan     msg
    ------------------------------
    1            0            один
    2            1            два

    Т.е. замыкание — это способ передачи данных в функцию.

    Подробнее о замыканиях см Mozilla Developer Network
    Примет взят отсюда
    Ответ написан
    Комментировать
  • Книги по криптографии

    gabriell
    @gabriell
    Некоторое правда, уже немного старовато, но все же

    Перечень:

    Cryptanalytic Attacks on RSA — Song Y. Yan.pdf
    Алгоритм Полларда — Ростовцев А..pdf
    Арифметика эллиптическихкривых над простыми полями без удвоения точек — Ростовцев А..pdf
    Большие подстановки для програмных шифров — Ростовцев А..pdf
    Взломщикик кодов — Кан Д..rtf
    Два подхода к анализу блочных шрифтов — Ростовцев А..pdf
    Логарифмирование через поднятие — Ростовцев А..pdf
    Минимализация показателя — Ростовцев А..pdf
    О времени жизни персонального и открытого ключа — Ростовцев А..pdf
    О выборе кривой над простым полем — Ростовцев А..pdf
    О матричном шифровании — Ростовцев А..pdf
    Подпись «вслепую» на эллиптической кривой — Ростовцев А..pdf
    Простое усиление схемы цифровой подписи — Ростовцев А..pdf
    Решеточный криптоанализ — Ростовцев А..pdf
    Криптография на C и C++ — Вельшенбаха М\
    Прикладная криптография — Шнайер Б\
    Gardner_-_Penrose_tiles_to_trapdoor_ciphers.djvu
    GOST R34.11-94.pdf
    GOST R3410.doc
    PGP — Левин М..pdf
    Алгоритмические основы элиптической криптографии — Болотов А..pdf
    Безопасность корпоративных сетей — Биячуев Т.А.pdf
    Булевы функции в теории кодирования и криптологии — Логачев О.А..djvu
    Введение в Криптографию — Ященко В..djvu
    Введение в теорию чисел. Алгоритм RSA.2001 — Коутинхо С..djvu
    Дискретная математика и криптология — Фомичев В..djvu
    Коды и математика — Аршинов М..djvu
    Криптография без секретов — Баричев С..doc
    Криптография и теория кодирования — Сидельников В..pdf
    Криптография от папируса до компьютера — Жельников В..pdf
    Криптография с открытым ключом — Саломаа А..pdf
    Криптология вчера, сегодня, завтра — Олейник В..djvu
    Курс теории чисел и Криптографии — Коблиц Н..djvu
    Описание алгоритма MD5.pdf
    Основы Современной Криптографии — Баричев С..djvu
    Помехоустойчивое кодирование. Методы и алгоритмы — Золотарев В..djvu
    Практическая криптография Шнайдер Б.djvu
    Прикладная криптография. Использование и синтез криптографических интерфейсов — Щербаков Л.pdf
    Современная Криптология — Брассар Ж..djvu
    Создание ускоренного криптоаналитического метода .pdf
    Стандарт криптографической защиты AES — Зензиц О..djvu
    Стандарт криптографической защиты AES.Конечные поля — Зенсин О..djvu
    Теоретико-числовые алгоритмы в криптографии — Василенко О..pdf
    Теория связи в секретных системах — Шеннон К..pdf
    Чарльз Петцольд, К.О.Д..pdf
    Элементарное введение в элептическую криптографию ч.1- Болотов А.А..djvu
    Элементарное введение в элептическую криптографию ч.2- Болотов А.А..djvu
    Элементы криптографии.Основы защиты инфорации — Нечаев В.И.djvu

    ifolder.ru/5267530
    ifolder.ru/5267531
    Ответ написан
    Комментировать
  • Правильно ли я понимаю замыкание в JS?

    rockon404
    @rockon404
    Frontend Developer
    Нет, у тебя в примере в переменную d записывается 2 и все.
    Там нет замыкания.
    И понимаешь ты все не верно.
    Твой пример похож на задачу по замыканиям, которую надо решить.

    Вот если переписать так:
    function a() {
        var c = 2;
    
        function b() { 
          return c++;
        };
    
        return b;
    }
    
    var d = a();
    
    alert(d()); // 2
    alert(d()); // 3

    то d будет присвоенна функция:
    function b() { 
      return c++;
    };

    а значение с будет браться из скоупа в котором функция была создана и перезаписывается с каждым вызовом d.
    Скоуп будет существовать пока есть ссылка на функцию, то есть пока мы не присвоим d другое значение.
    Это и есть замыкание.

    Значение c было определенно в функции a в момент вызова. Следом мы возвращаем из функции a функцию b. Функция b использует переменную c из скоупа созданного в момент вызова функции a и, как я писал выше, пока будет существовать ссылка на функцию b скоуп будет существовать, потому что функция b использует a и может быть вызвана.
    А с каждым вызовом a мы создаем новый скоуп, и если возвращать каждый результат вызова a в переменную, каждый раз мы будем получать новое замыкание:
    function a() {
        var c = 2;
    
        function b() { 
          return c++;
        };
    
        return b;
    }
    
    var d = a();
    var e = a();
    
    alert(d()); // 2
    alert(d()); // 3
    
    alert(e()); // 2
    
    alert(d()); // 4
    alert(d()); // 5
    
    alert(e()); // 3

    Надеюсь так понятней.
    Ответ написан
    1 комментарий
  • Как сравнить два массива в одном индексе с разными вариантами?

    pterodaktil
    @pterodaktil
    js developer
    Для начала стоит написать так
    var masterArray = ['1981', '2001,2002', '1991', '1985,1986,1987'];

    ну а дальше
    let result = [];
    compareArray.forEach((v, k) => { 
      let i = 0; 
      masterArray[k].split(',').forEach((vv, kk) => {
        v.split(',').indexOf(vv) !== -1 ? i++ : false
      }); 
      result.push(`${k} - [${i}]`) 
    });
    console.log(result);
    Ответ написан
    2 комментария
  • Как мотивировать себя делать скучную работу?

    zamboga
    @zamboga
    Бизнес-аналитика, фин. моделирование, дашборды
    Отвлекаюсь на все не могу себя заставить, нормально работать

    Отключить все уведомления или выключить звук+вибро на телефоне.
    Отключить все попапы в Windows, уведомления браузеров.
    Отключить звук на компе.

    Если помогает быстрая музыка — включить её (я фигачу под транс с di.fm).

    Взять любой секундомер, поставить на нем таймер 10 минут. Уж 10 минут вы в состоянии выдержать?
    После звонка таймера поставить новый на 15 минут. Это всего на 5 мин больше прошлого таймера.
    После звонка таймера поставить новый на 25 минут. Это всего на 10 мин больше прошлого таймера.
    Как вы поняли, это плавное привыкание к технике Помодоро=)

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

    Прошло 50 минут. Теперь отдых. Выключить музыку, надо отдохнуть: ставите таймер на 10 минут, гуляете вокруг компа, смотрите в окно, делаете легкую зарядку, просто сидите с закрытыми глазами.

    Телефон во время отдыха в руки не брать и почту /скайп (что там вы используйте) не проверять!! — Это ключевое. Отдых должен быть отдыхом. Умеете медитировать — медитируйте.

    Ставите новый таймер на 50 минут. Один раз продержались, что, второй раз не сможете? Сможете.
    После этого опять отдых, 10 минут.

    После 3-4 циклов по 50работа/10отдых, делаете отдых 30/40/60 минут (как раз пообедать + проверить почту/телефон).

    Потом новый комплект 3-4 цикла 50/10.
    В конце дня можете проверить почту/телефон.

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

    Также, если мотивация падает, говорим себе мантру: "Потерпи только сегодня, только один день. Пофиг, что там будет завтра, а вот сегодня надо потерпеть и сделать".

    Для удобства на компе можно использовать любой тайм-трекер со встроенным Pomodoro, например Toggl (+могу еще насоветовать, знаю много трекеров)

    UPD 1. Из другого ответа: "чтобы работать длинный промежуток времени, очень выручал https://www.forestapp.cc/"
    Я протестировал приложение под Андроид и расширение для Хром и стал использовать: это отличное дополнение к методике, что тут описал, с автоматическим отключением всех внешних раздражителей. Рекомендую.

    UPD 2. Классическая Помодорная схема — 4 цикла по 25работа/5отдых, потом отдых 20 мин.
    Но она не подходит для работы "в потоке" — пока погружаешься в задачу, уже проходит 15 минут и остается всего 10 минут до отдыха на саму задачу, что мало.
    Поэтому я использую циклы 50/10 для основных задач, +один цикл 50/10 в начале дня на планирование, почту и прочую мелочевку.
    Ответ написан
    2 комментария
  • Годные курсы по unity c#?

    @VitGun
    Мне в свое время вот этот понравился. Но там прям совсем-совсем для новичков и только 2D
    Ответ написан
    1 комментарий
  • Текстовая игра в unity3d. Как лучше реализовать?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Хотя можно и в Unity3D, для чисто текстовых игр есть более удобные и легковесные инструменты:

    Онлайн, в основном гипертекстовые (то есть игрок кликает по ссылкам):
    • https://texturewriter.com/ довольно необычная парадигма, игрок перетаскивает слова-действия на слова-предметы (или наоборот)
    • twinery.org/2 (только не качайте ради всех богов этот гребаный десктопный клиент)
    • textadventures.co.uk/squiffy простой, но рабочий
    • textadventures.co.uk/quest (пожалуй, единственный среди онлайн-инструментов поддерживает парсерный ввод)
    • sm.axmasoft.com (русская документация, в принципе клон Twine)


    Требуют скачивания инструментов:
    1. www.inklestudios.com/ink (есть плагин к Unity3D)
    2. https://www.choiceofgames.com/make-your-own-games/... ChoiceScript, младший брат бывшего платным ink
    3. instead.syscall.ru/index.html (опять русская документация)
    4. inform7.com и русско-язычный вариант rinform.stormway.ru


    К сожалению, посоветовать что-либо конкретнее без знания вашего уровня и без конкретной задачи не могу. Если вы новичок в программировании и английский не очень — axma. Если английский норм — twine, squiffy, texture (люди делают очень красивые вещи на Twine). Если не боитесь писать HTML/MarkDown и прочие подобные вещи -- ChoiceScript, ink. Хотите олдскульного хардкора — instead, inform, tads.
    Ответ написан
    7 комментариев
  • Как называть или как правильно называть классы в CSS?

    @pchelovek
    HTML-верстальщик
    Если часто сомневаетесь по поводу именования, то надо смотреть готовые проекты на БЭМ. Например, проекты Яндекса (например, market.yandex.ru"), booking, ну и сам toster тоже сверстан по БЭМ.
    А вот здесь можете посмотреть компоненты (формы, кнопки и т.д.) https://ru.bem.info/libs/bem-components/v2.1.0/.
    UPD: забыл упомянуть badoo

    Еще пара ресурсов:
    Ответ написан
    2 комментария
  • Хорошие каналы по вёрстке и фронтэнду?

    snap44
    @snap44
    Фыр!
    По основам js лучшее, что я видел на русском
    https://www.youtube.com/channel/UCP-xJwnvKCGyS-nby...
    Ответ написан
    Комментировать
  • Зачем нужно ООП в javascript?

    thehighhomie
    @thehighhomie
    Вам нужно почитать эти две статьи + комментарии людей снизу:
    ООП в функциональном стиле
    ООП в прототипном стиле

    И видео:
    Javascript-джедай #20 - Прототипы и наследование
    Javascript-джедай #21 - Конструкторы и классы

    Этого вполне хватит чтобы понять ооп в JS и для чего он) во время практики вы сами прозреете)

    И лучше изучи весь учебник: Современный учебник Javascript

    На счет видео Sorax'a не скажу что мне они нравятся но в сети его хвалят, так что решать вам, мне больше учебник помог.
    Ответ написан
    3 комментария
  • Python и фриланс, что учить?

    Andylloyds
    @Andylloyds
    Если хочешь работать именно фрилансером, то сортировка и числа Фибоначчи тебе мало чем помогут :)
    Насколько знаю я - во фрилансе хорошим спросом пользуется web-разработка.

    Изучи и сделай несколько проектов на Django (и к ней же HTML5+JS+CSS3, а ещё и SQL) - сможешь делать web-сайты. Изучи как следует какой-нибудь модный asyncio фреймворк, например Aiohttp - сможешь брать задачи связанные с большой сетевой нагрузкой.

    Можно подать в Machine Learning и участвовать на Kaggle - в случае если хорошо было с матаном, теорвером и статистикой. Для этого изучай NumPy, Pandas, SciKit Learn.

    Ну и английский тебе очень нужен, потому что фрилансить и сидеть дома в России не круто, круто жить в вечно солнечной стране)
    Ответ написан
    4 комментария
  • Пример типичной задачи по JS для junior/middle front-end'a. Какая она?

    Maksclub
    @Maksclub
    maksfedorov.ru
    — Ребята, новый сайт запускаем, API почти готов, делаем на Реакте
    — Нужно дублировать морду одного из проектов, только чуть меняем дизайн, сделан на Backbone (и не спрашивай), тут еще почему-то не выводится у одного блока инфа
    это моя реальная задача была, я бек :)
    — Нужно доделать раздел в админке (сделана на JQuery), с выводом карты и календаря с библиотекой fullcalendar js
    Ответ написан
    2 комментария
  • Настройка окружения для front end?

    @Worddoc
    Frontend explorer
    Понимаю твою проблему. Недавно завершил сборку своего окружения, держи, глядишь понравится:
    https://github.com/web-worddoc/primary (Старая сборка)

    https://github.com/web-worddoc/Boilerplate (Новая сборка)

    html разбит на модули с помощью pug(бывший jade), а именно с помощью встроенных "include"
    css разбит на модули и собирается на sass
    js разбит на модули с помощью require js(очень сильно не дробил, мне удобнее пока крупными кусками), что особенно удобно, если хочется избавиться от спагетти кода

    Сборка сама на gulp, стоит через консоль вбить gulp watch и начать писать код.
    Надеюсь поможет)

    P.S. Для самой сборки проекта в продакшн, прописываешь gulp build.
    Ответ написан
    9 комментариев
  • Как вы втягиваетесь в новый проект?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Для быстрого начала работы над задачей, только что влившемуся в проект сотруднику, нужны следующие вещи:

    1. Централизованная структурированная проектная документация всего разрабатываемого решения.
    2. Архитектурная схема решения и помеченный блок, в котором нужно будет выполнять задание.
    3. Краткое описание задания и методика проверки его полного выполнения.
    4. Краткая архитектура кода этого блока и указание места с пояснением для начала выполнения работы.
    5. Ориентировочный перечень наиболее вероятных названий классов/методов/смежных API для использования при выполнении задания с кратким описанием и со ссылками в централизованную документацию (п.1).
    6. Ориентировочный перечень классов/методов/смежных API, которые возможно могут понадобиться (также, как и в п.4 со ссылками в п.1).
    7. Рекомендуемая среда разработки для выполнения задания и её настройки для исполнения данной задачи
    8. Планируемое время выполнения задания
    9. Контакты с другими разработчиками (с указанием их зон ответственности в проекте и времени доступности) для возникающих вопросов, касательно этого задания.

    Попросите дать задачу в таком формате: у того, кто давно работает в проекте, это займёт не более часа, а сэкономит - недели проектной разработки!
    Ответ написан
    2 комментария
  • Какие задачи нужно уметь выполнять на 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 комментариев