• Как правильно спроектировать БД?

    sarapinit
    @sarapinit
    Точу водой камень
    Если бд имеет поддержку json, то общие поля сделать полями таблицы, а добавочную часть положить в виде json в ещё одно поле таблицы.
    Ответ написан
    Комментировать
  • Где посмотреть примеры архитектур/связей БД?

    @Barmunk
    https://drawsql.app/templates

    Collection of real world database schemas from open-source packages and real-world apps that you can use as inspiration when architecting your app.


    На любой вкус.
    Ответ написан
    Комментировать
  • Как скопировать в буфер изображение, а потом вставить его в редактор с помощью JavaScript?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Когда ты копируешь картинку, в буфер она попадает в формате base64:
    document.onpaste = function(event){
      var items = (event.clipboardData || event.originalEvent.clipboardData).items;
      console.log(JSON.stringify(items)); // will give you the mime types
      for (index in items) {
        var item = items[index];
        if (item.kind === 'file') {
          var blob = item.getAsFile();
          var reader = new FileReader();
          reader.onload = function(event){
            console.log(event.target.result)}; // data url!
          reader.readAsDataURL(blob);
        }
      }
    }


    Вот еще рабочий вариант: jsfiddle.net/bt7BU/225
    Ответ написан
    4 комментария
  • Как переписать for на map для асинхронного кода?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Именно с map никак не сделать, что бы следующий вызов функции ждал предыдущего, как это происходит в цикле с await, а вот с reduce уже можно:
    const list = [
      'main',
      'main-footer',
      'main-header',
      'main-content',
    ];
    
    list.reduce((p, item) => p.then(() => funcOne(item)), Promise.resolve());
    Ответ написан
    Комментировать
  • Как переписать for на map для асинхронного кода?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    await Promise.all(list.map(funcOne)); // Если в случае ошибки в одной итерации нужно остановить все остальное
    
    await Promise.allSettled(list.map(funcOne)); // Если в случае ошибки в одной итерации остальные должны продолжить работу


    Но вы должны учитывать разницу:
    • Если использовать стандартный for то все асинхронные вызовы будут выполняться последовательно, один за другим.
    • Если вызывать асинхронную функцию в map, то все вызовы будут запущены параллельно, и итоговый Promise.all нужен, чтобы дождаться пока они все будут выполнены. Это эквивалентно примерно такому коду:
      const promises = []
      for (const item of list) {
            promises.push(funcOne(item));
      }
      await Promise.all(promises)

    Ответ написан
    5 комментариев
  • Как сделать максимально автономный сервер?

    ValdikSS
    @ValdikSS
    1. Никаких «вечных серверов». Даже как-то неловко разъяснять такое. «Вечный сервер» — маркетинговый ход, фактически мошенничество, который закончится, как только компания изменит условия/реорганизуется/закроется. Следует читать как «ну, проработает года три, а далее — неизвестно».

    2. Непонятно, какого рода у вас информация, и что именно вы понимаете под словом «захостить», также непонятен критерий автономности. Разместить информацию в публичный доступ? Должна ли она индексироваться? Нужен ли для неё контроль доступа? По какому протоколу она должна быть доступна? Она будет нужна только вам через 10 лет, или кому-то еще? Это лицензированный контент, который могут удалить по DMCA (фильмы, сериалы, музыка)? Это персональные данные (сливы баз данных)? Информация популярна и/или востребована на данный момент? Есть вероятность, что она будет сравнительно востребована через 10 лет? Информация каталогизирована? Информация тематическая (например, архив, посвященный конкретной теме, области науки и т.п.)? Важно ли удобство и скорость доступа к информации?
    Технологий много, но они все разные, с разными назначениями. Ответы на перечисленные вопросы необходимы, чтобы отбросить неподходящие и подробно рассмотреть подходящие.

    3. Если информация публична и востребована, и будет востребована через 10 лет, то следует использовать DC++, BitTorrent + веб-хранилища с прямыми ссылками на файл, добавив ссылки в .torrent-файл, в виде webseed.
    Bittorrent существует с 2006 года, популярен, клиенты есть под все ОС, совместимость и надёжность отличные.
    DC++ всё еще имеет популярность. Основное преимущество перед Bittorrent: возможность поиска файла по его имени или названию директории, возможность лёгкого обновления и дополнения информации (нет привязки к «каталогу» в виде .torrent-файла)

    Если информация конфиденциальна или требует контроля доступа, и у вас и кого-либо другого не будет возможности как-либо поддерживать её в течение 10 лет (я не знаю вашу ситуацию, поэтому предположим, что вам грозит 10-летний тюремный срок), то, возможно, есть смысл оплатить облачное хранилище от крупных компаний (Google, Yandex, Microsoft, Apple) на 10 лет вперед. Это не даёт никаких гарантий, но считаю такой вариант более надёжным, нежели хостинг общего плана (и особенно VPS).

    Если информации немного, она не защищена авторскими правами, каталогизирована и полезна, можно банально разместить её на давно существующих бесплатных хостингах, вроде Ucoz, Google Sites, Neocities, загрузить на Bitbucket, Github, Sourceforge (последний поддерживает хранение больших файлов, которые можно скачать по прямой ссылке, вполне подойдёт в качестве webseed для торрента, к слову).

    Если не боитесь попробовать развивающиеся, но еще не устоявшиеся технологии, присмотритесь к IPFS. Он работает по принципу Bittorrent, но позволяет получать доступ к информации через HTTP, а также поддерживается крупными игроками в лице Cloudflare, у которой есть шлюз из интернета в IPFS: https://cloudflare-ipfs.com/
    Я держу несколько статичных сайтов с собственными доменами в IPFS, на домашнем компьютере, за шлюзом Cloudflare. Преимущества: все плюсы BitTorrent, возможность доступа как к сайту (в т.ч. на своём домене), индексация поисковиками, есть сервисы по долгосрочному платному хранению файлов (eternum.io, pinata.cloud), возможность лёгкого обновления информации. Недостатки: работает всё ещё достаточно медленно и нестабильно, только статичные сайты.

    4. Судя по вашему комментарию выше, у вас всего 100 ГБ медиафайлов. Это вообще ерунда. Если они публичны и представляют ценность хотя бы для узкого круга людей, можете захостить их у меня, через проект Schare: https://valdikss.org.ru/schare/
    Мой критерий автономности — максимальная независимость от сторонней инфраструктуры, поэтому файлы хостятся на домашнем сервере, а раздаются в сетях децентрализованного файлообмена.
    Ответ написан
    Комментировать
  • Сложный и интересный проект для новичка?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    ## Анонимный чат с темами для обсуждения деликатных офисных проблем
    Иногда хочется обсудить что-то с коллегами в офисе, но не хочется смущать их или показывать лишнюю инициативу.
    Например кто-то не смывает в туалете или слишком громко орёт и сам того не замечает. Может быть кто-то слишком интенсивно пользуется парфюмом.
    - Анонимность
    - Постоянная ссылка на чат, тему или дерево чатов
    - ссылки в виде QR-кодов
    - голосовалка
    - закрепленные посты

    ## Сайт checklist
    Веб-сервис и мобильное приложение для краудсорсинга чеклистов для всего: зарегать ИП, получить визу, что делать при ДТП, как влезть в ипотеку, как вылезть из неё, чем заняться с ребенком на выходных (N-ле

    - Коллекция чек-листов снабженных тегами, доступная для краудсорсинга.
    - Краудфандинг составления и поддержки нового листа.
    - Фильтрация чек-листов.
    - Фильтрация пунктов.
    - Тегирование пунктов.
    - Графовые алгоритм обхода чек-листа.
    - Мастер обхода чек-листа.
    - Отчет по чек-листу.
    - Вложенные чеклисты, гиперссылки между разными листами.
    - Параметризация.
    - Экспертная система, логические связи (расширенный режим).

    Примеры:
    - Что делать при ДТП
    - Открыть ИП
    - Осмотр авто при покупке (подветки для разных конкретных моделей)
    - Первая помощь при...
    - Диагностика инсульта
    - Зомби-акопалипсис: как приготовиться
    - Атомный взрыв неподалёку - что делать
    - Планетарная катастрофа - как выживать
    - Поход выходного дня - что взять
    - Подготовка авто к поездке
    - Путешествие: Алжир (виза, прививки, документы, отели, транспорт)
    - Как влезть в ипотеку
    - Как вылезть из ипотеки
    - Как быстро заработать (во все тяжкие)
    - Покупка квартиры (на что обратить внимание)
    - Самостоятельное строительство дома (общий план)
    - Чем заняться с ребёнком N-лет
    - Как отметить новый год
    - Что интересного в районе <пос. Майский>
    - Номера телефонов и документы в автомобиле

    ## Эротический краудфандинг
    Интернет ресурс, где девушки могут делать крауд-фандинговые кампании

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

    ## Простой открытый сервис для обмена сообщениями
    - HTTP API, Web-sockets
    - p2p rtsp
    - опциональное end-to-end шифрование
    - хранение истории на клиентах
    - возможность использования нескольких серверов
    - возможность использования альтруистичных клиентов для проксирования трафика p2p
    - поиск узлов на основе блокчейн технологий и DHT таблиц

    ## Онлайн-журнал путешествия
    - публикация трека в реальном времени
    - комментарии путешественника и фолловеров
    - стримы (аудио, видео, фото)
    - отложенная загрузка
    - журнал(расходы, чек-поинты, расписания, цены, погода)
    - FAQ
    - голосовалка

    ## Поэтический онлайн редактор
    - выбор стопа, стиля и жанра
    - шаблон с плейсхолдерами, разбивающий текст на слоги
    - облако рифм
    - подражающий автогенератор
    - многосегментный словарный банк (дифференциально-слоистая древовидная структура, своя специфика в верхнем слое, поэлементное ранжирование сегментов)
    - тезаурус
    - словарь сочаетаемости
    - N-граммы поэзии по авторам и стилям
    - корпус поэзии
    Ответ написан
    13 комментариев
  • Можно-ли скачать видео с YouTube используя DevTools?

    Есть такая «секретная» ссылка: www.youtube.com/get_video_info?video_id=XXXXXX
    Вместо XXXXXX подставьте хэш видео, который в ссылке на ролик, типа youtu.be/BWCiWZtrWXU после слеша.

    По этой (первой) ссылке вернутся URL-encoded данные. Распакуйте их и возьмите параметр url_encoded_fmt_stream_map. Его значение опять надо распаковать как URL-параметры. И из результата вытащить параметр url – это ссылка на единый скачивабельный видеофайл.

    Например, в консоли браузера:
    function getUrlParams(search) {
        let hashes = search.slice(search.indexOf('?') + 1).split('&')
        let params = {}
        hashes.map(hash => {
            let [key, val] = hash.split('=')
            params[key] = decodeURIComponent(val)
        })
    
        return params
    }
    var s = '------'; // здесь длиннющая строка из ответа /get_video_info
    var a = getUrlParams(s);
    var b = getUrlParams(a.url_encoded_fmt_stream_map);
    console.log(b.url); // эту ссылку открываем в браузере - это скачиваемый видеофайл


    Очень надеюсь, что вы покопаетесь в этих данных более подробно, разберётесь, как получать прямые ссылки на скачиваемые файлы во всех форматах и размерах, которые предлагает YouTube, и напишете короткий материал на Хабр по результатам, а также опубликуете gist с рабочим кодом для консоли браузера.
    Ответ написан
    3 комментария
  • Какую систему выбрать для хранения данных в веб-приложение?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Cache объект
    + можно легко заполнить при регистрации ServiceWorker одной командой
    - не надежно в плане хранения

    indexedDB
    + надежное хранилище
    + хранение бинарных данных
    - для работы нужно много кода писать

    localStorage
    + самое простое апи
    - хранит только строки
    - не доступно из ServiceWorker, что для поддержки оффлайн режима может стать критичным
    Ответ написан
    Комментировать
  • Можно ли сделать сеттер и геттер не для свойства объекта а для самого объекта?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Ну можно положить сам объект в window и сделать соответствующие геттер и сеттер.
    Object.defineProperty(window, 'prozrachnost', {
        set(value) {
            if (value instanceof Osobaya_peremennaya) {
                window._prozrachnost = value;
            } else {
                window._prozrachnost.znachenie = value;
            }
        },
        
        get() {
            return window._prozrachnost;
        },
    });
    
    window.prozrachnost = new Osobaya_peremennaya;
    window.prozrachnost = 0.5;

    (не пробовал. а если без window. то в строгом режиме не запустится)

    Но вообще всю эту геттерно-сеттерную магию не очень весело читать, разгребать и дебажить. Лучше сделайте как Александр посоветовал, он всё правильно сказал.
    Ответ написан
    2 комментария
  • Как сделать документацию к коду?

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

    Стандартные решения:
    1. самодокументируемый код, составленный так, что читающий может понять что для чего и в какой последовательности работает.
    2. описание интерфейсов (назначение метода, тип/суть параметров и т.п.) в форме комментов в коде.
    3. автоматическая документация (генерится из комментариев) - эффективно, только если сам код закрыт.
    4. модульные тесты, фиксирующие требования к коду и демонстрирующие его использование.
    5. описание высокоуровневого дизайна (High Level Design, HLD), описывающий какие элементы существуют, их взаимосвязь друг с другом и основные сценарии взаимодействия.

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

    Кстати, проектная работа, это не только документация к коду, это еще и свод правил, которые позволят архитектуре не расползтись кто в лес кто по дрова, а также сохранят стилистику написания кода для единообразия и легкой поддерживаемости кода.
    Ответ написан
    12 комментариев
  • Как работает на низком уровне Node.js и Angular?

    @cluberr
    думаю это Вам поможет Объясняем современный JavaScript динозавру
    Как объяснить 10 лет веб-разработки путешественник...
    NodeJs - это движок для JavaScript , который вынесли из браузера и добавили возможности , которые в браузерном JS были невозможны из-за безопасности , например работа с файловой системой и другие. Сам движок NODEJS называется V8 , написан на C++ и компилит JS в машинный код.

    Вебсервер - это процесс который слушает определенный порт на HTTP запросы , принимает их , парсит и отдает назад ответ в зависимости от запроса. Раньше в этот ответ помещался готовый html код c данными , которые подтягивались из базы, что и было страницей.

    Так как появилась возможность делать JS код вне браузера , то взяли и написали на нем веб-сервер , который все делает на JS . Что дало возможность написать и фронт и бэк сайта на одном языке

    Сейчас же при запросе к серверу , сервер отдает сразу HTML код страницы с JS кодом и из этого js кода посылаются асинхронные запросы к бекенду (AJAX) на определенные url адреса сервера RESTip , которые отдают не готовые страницы , а только данные в чистом виде в формате JSON и JS парсит эти данные и вставляет в стандартные html узлы или же кастомные , которые зовутся WebComponets, но пока имеют слабую поддержку браузеров , страницы. Angular упрощает написание кастомных html узлов и внедрение в них данных плюс позволяет их реиспользовать.

    Получается что у Вас может один раз прийти html + js код и потом вся работа с сайтом будет идти через одну страницу в которую javascript будет вставлять нужные данные, а при необходимости еще и обрабатывать их перед вставкой. Сайты , которые так работают называются SPA (Single Page Aplication).
    Ответ написан
    Комментировать
  • Тестирование верстки сайта в 4K без монитора 4K?

    xtala
    @xtala Автор вопроса
    Постигает Дзен
    Тривиального решения задачи нет. Ошибка многих начинающих (и меня тоже), то что физическое разрешение мониторов принимается за CSS разрешение.
    На самом деле как подсказал DevMan мониторы с ретина дисплеем в большинстве случаев работают как FullHD мониторы с соотношением x/2, где x
    физическая ширина монитора, в полном разрешение на таких мониторах работать в web затруднительно. Теперь ответы по существу:

    1. В связи с чем вопрос как провести тестирование верстки сайта в 4K без монитора 4K программными средствами?


    -- Отладчик бразуера Chrome. Открываем панель разработчика, включаем адаптивный вид, задаем дополнительный девайс
    класса desktop с размерами 1920 * 1080. Примерно так и будет выглядеть сайт на ретине дисплее с физическим разрешением 3840
    Так же хочу предупредить, что в режиме responsive, некоторые сайты отображаются неверно (Например Хабр полностью прилипает по краям, а в реальности как и Toster центрируется).
    Поэтому надо задавать именно через устройство, а не вбивать значения в режиме responsive.
    У этого способа есть фатальный недостаток, при таком разрешении сайт масштабируется в меньшую сторону,
    что не позволяет разглядеть мелкие детали, а если увеличить масштаб до 100% показывается только верхний левый угол сайта, но нельзя прокручивать его по сторонам,
    чтобы разглядеть во всех деталях. Поэтому этот способ подойдет только для обозрения сайта на больших разрешениях с "высоты птичьего полета".
    -- Отладчик брузера Firefox на удивление именно он наиболее корректно отображает сайты на таких разрешениях и в отличии от Chrome позволяет прокручивать их по сторонам, чтобы разглядеть все детали. Пожалуй этот способ самый приемлимый.
    -- Сайт ami.responsivedesign.is/# неплохой сервис, позволяет быстро сделать презентацию как выглядит сайт на разных устройствах, в том числе и на больших мониторах, но есть два недостатка:
    1) Большой монитор мака отображает сайт в CSS разрешении 1600*992, а не 1920 * x, наверное это связанно с тем, что последнее обновление сайта было в 2013 году.
    2) Некоторые сайты не грузятся (например Хабр), возможно это связанно с какими то скриптами
    -- Сайт quirktools.com/screenfly
    Тоже что и предыдущий пример. Немного удобней. Недостаток тот же. У меня отказался грузить некоторые сайты. Например хабр.
    Как плюс можно отметить расшаривание ссылки, что может пригодиться для обмена мнениями с удаленным разработчиком или заказчиком.
    -- https://www.browserstack.com
    Предоставляет даже реальные устройства в Live режиме(или эмулированные?). Недостаток один -- платный. Правда есть триал, во время триала позволяют пользоваться устройствами 30 минут и не всеми браузерами.

    2. Подойдет ли встроенный отладчик Chrome?


    Подойдет, но не совсем, см п1. лучше использовать Firefox.

    3.Сайт сверстанный на каноничном бутстрап выглядит как несчастная полоска в 1170 пикселей или viewport масштабирует сайт до читабельного размера?


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

    4. Пользователем таких мониторов постоянно приходится масштабировать сайты?


    Нет.

    5. Может есть более удобный сервис тестирования верстки в больших разрешениях?


    Самые удобные сервисы перечисленый в п1. Сколько я ни старался удобнее не нашел.

    В заключение пара полезных статей по верстке в больших разрешениях:
    Рассуждения об адаптации верстки для больших экранов, статья старая, но актуальность не потеряла:
    https://web-standards.ru/articles/big-screens/

    Тренды экранов на текущий момент:
    https://www.openstat.com/counter:meta/trends/repor...

    Адаптируем графику под Retina экран
    https://habrahabr.ru/post/139682/
    Статья правда написана 5 лет назад непонятно насколько сейчас она актуальна.

    Оптимизация графики для Retina-экранов
    https://habrahabr.ru/post/150071/

    P.S. Отдельное спасибо DevMan за терпение.
    Ответ написан
    2 комментария
  • Софт для организации музыки на компьютере?

    Jump
    @Jump
    Системный администратор со стажем.
    Вариант "просто разложить по папкам" не подходит когда музыки более 10Gb.
    А зря вы так.
    Вполне приемлемый вариант.
    Не руками конечно раскладывать - а простейшим скриптом читающим теги.
    А чтобы место не занимать - раскладывать симлинки или хардлинки.
    Ответ написан
    1 комментарий
  • Как часто используются дескрипторы, декораторы и bind, call, apply?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Обо всем по порядку

    Дескрипторы - так понимаю речь идет о дескрипторах свойств объекта. Вещь крайне полезная, позволяющая задать поведение свойству, сделав его не перечисляемым или, например, только для чтения, а так же можно задать функции getter/setter, которые будут вызываться при чтении/записи свойства. Используется довольно часто.

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

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

    call и apply позволяют вызвать функцию с нужным контекстом, разница в том что apply принимает 2 аргумента - контекст и массиво-подобный объект содержащий аргументы, а call принимает произвольное число аргументов: 1й - контекст, последующие передаются как аргументы функции. Используется постоянно.

    Карринг. Хоть и используется не так часто, но бывает весьма полезным инструментом. По сути цепочки промисов построены на принципах карринга, только не функций, а объектов.

    Ну и напоследок, конструкция var self = this; позволяющая сохранить контекст в замыкании уже потихоньку уходит в прошлое, благодаря стрелочным функциям из es2015
    Ответ написан
    1 комментарий
  • Решил заниматься созданием сайтов на заказ. Какие документы должны быть? Налоги и т.п?

    NeiTrinO2
    @NeiTrinO2
    Предприниматель
    У меня несколько ООО. Но свое ИП я открыл только недавно.
    Я был шокирован тем, насколько это быстро и просто)))

    Более того, сейчас уже не надо даже обращаться к сторонним компаниям, чтобы они помогли зарегистрировать юр. лицо. Это просто НЕ НУЖНО.

    Итак, вот какой инструментарий я бы порекомендовал:

    1. Регистрация ИП:
    - https://service.nalog.ru/gosreg/
    - www.e-kontur.ru/ip

    Порядок действий
    • Составляем форму самостоятельно (быстро, удобно, бесплатно)
    • Формируем квитанцию для оплаты гос. пошлины (по-моему 500 руб.)
    • Оплачиваем квитанцию
    • Приходим в налоговую и просто подаем документы на регистрацию
    • Через 5 рабочих дней забираем там же все документы
    • Подаем заявление на переход на УСН (если нужно)

    2. Открытие счёта в банке.
    Я рекомендую банк Точка (человеческий сервис, удобный интернет-банк, все круто и недорого).
    Здесь все очень просто. Оставляем заявку, присылаем сканы документов. Встречаемся с менеджером или по скайпу и все работает

    3. Бухгалтерия
    Сервис Эльба от Контура. 1 год для новых юр лиц - БЕСПЛАТНО. Удобно, внятно, бесплатно.

    Тонкости
    - Нужно подготовить документы? - Фреш Док
    - Не забывать про то, что ИП должны платить взносы в ПФР и ФСС за себя

    Будущее
    Как только бизнес вырастет - лучше зарегистрировать ООО

    Успехов!
    Ответ написан
    4 комментария
  • Области применения JS в современном IT?

    @GreatRash
    JS применяется сейчас везде практически: фронтенд, бекенд, разработка приложений, игры. Кто его знает куда его ещё занесёт в будущем.
    Ответ написан
    1 комментарий
  • Области применения JS в современном IT?

    kirill89
    @kirill89
    Посмотрите в сторону NodeJS. Это серверный JS, сейчас применяется достаточно активно, но пока не понятно на сколько перспективен.

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

    Попробуйте посмотреть вакансии по ключевому слову, это поможет найти другие применения.
    Ответ написан
    7 комментариев
  • Лучшие практики по frontend?

    @teslor
    Я бы не рекомендовал Флэнагана начинающим, это скорее уже чтобы углубить знания.
    Из русскоязычных в качестве базы можете использовать только 1 ресурс - learn.javascript.ru.
    По CSS почитайте про способы организации CSS-кода (MCSS, БЭМ, OOCSS и т.д.), изучите PostCSS, статей по ним много и вы их легко найдете.
    Ответ написан
    11 комментариев