Задать вопрос
  • На чем писать back-end в связки с Vue + mongodb?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Есть вариант не писать бек вообще, т..к MongoDB:
    а) может хостить статический контент
    б) может отдавать результат запроса в виде JSON напрямую во фронт
    в) умеет работать с SSL сертификатами
    г) умеет хранить и отдавать двоичные данные
    д) умеет изменять входящие запросы с помощью встроенного движка Javascript (почти как Нода)
    е) умеет изменять подготовленные по запросу данные перед отправкой клиенту с помощью всё того же Javascript

    Жутко полезно чтобы не плодить сущностей серверов при заворачивании веб апп в Электрон.
    Есть минус: сервер Mongo должен смотреть в мир широко открытыми портами 80 и/или 443.
    Именно в мир, а не только в локальную инфраструктуру. Т.е. чтобы сделать веб-сайт в этих ваших интернетах, то порты для Манги придётся открыть.

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

    Классический пример: создаёте приложение на Nuxtjs, делаете `nuxt generate` для создания статик сайта, засовываете контент в базу Mongo, и... всё! Всё работает, не надо Апачей, Нжиниксов, Ноды с Експрессами. НИ- ЧИ-ВО более

    Манга успешно справляется с хранением бинарных файлов, т.е. картинки, звуки, видео -- всё может быть доступно напрямую из браузера по правильному УРЛ.

    Ну, и дополнительная плюшка: на чистом Javascript можно на лету менять содержимое как входящего запроса, так и подготовленных данных непосредственно перед отправкой клиенту, хоть свою ЦМС пиши. Некоторые так и делают. Очень часто для: 1) Интранетов, 2) IoT приложений, 3) Electron приложений.
    Ответ написан
    Комментировать
  • Как вывести ссылку с парсинга в NODEJS?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Вариант 1: тупо прём по ссылке
    .follow('.user-contacts@data-url')
    .find(.....)
    .set(.....)
    ....


    Вариант 2: если там нажимашка pop-up с аяксамми, то иммитируем клик
    .click('.js-userContactsShow')
    .delay(500)
    .find(......)
    .set(.....)
    ....
    Ответ написан
    Комментировать
  • Как в nginx подключать ssl если файл сертификата присутствует?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    server {
      listen 80;
      server_name ~^(www\.)?(?<domain>.+)$;
      root /var/www/users/$domain;
    }

    в третьей строчке забыли имя региона регекспа, поэтому $domain в некоторых версиях nginx будет пустой, в некоторых - будет ругаться на неправильный конфиг и обработка блока инструкций прерывается.
    посему получается, что сертификата, как бы, нет
    Ответ написан
    Комментировать
  • IDE для Node.js?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Всяк кулик свое болото хвалит :)

    Тут холивары с аргументами и в сравнении. Актуальность, опять же
    Ответ написан
    Комментировать
  • Какие есть лучшие варианты экспорта проекта с Sketch в Psd?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    1. Photopea -- онлайн редактор, который понимает и Скетч и Фотожоп с Гимпом
    2. Zeplin.io -- для совместной работы верстальщиков и дизайнеров
    Ответ написан
    Комментировать
  • Как можно запретить пользователю проявлять активность на сайте (регистрироваться, писать...), если у него отключен JS?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Варинт 1. Используйте стили для BODY или HTML (`nojs`, например), который при загрузке JS в событии onloadскриптом уберете. А для всех элементов управления требующих JS установите видимиость в none.

    .nojs button[onclick],
    .nojs form[onsubmit],
    .nojs .ajaxform {display: none}


    Вариант 2. Подгружайте интерактивные элементы через AJAX или рендерите с помощью JS. Так даже лучше - поисковики ругаться меньше будут.

    Вариант 3. Используйте SSR - Server Side Rendering

    Обязательно в <noscript> сделайте уведомление для пользователя.

    Самый лучший вариант - использовать подход ненавязчивого JS (unobtrusive JavaScript).

    Гугл в помошь, а вкратце - сайт должен работать и без JS. Или, хотя-бы, отдавать вразумительную инфу.

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

    И таки-да: это и есть работа настоящего фронт-ендера, которая стоит охрененно дорого, потому-что подразумевает до хера знаний и требует до едрени-фени терпения и времени. Именно поэтому настоящий фронтер даже в России имеет зарплату разом больше 200k₽!

    Есть к чему стремиться. Но это уже другая история, которая называется - UI/UX - User Interface/User eXperiance - учет опыта пользователя в интерфейсах.
    Ответ написан
    Комментировать
  • Подтверждение пароля через сканер отпечатка пальцем?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Быстрый ответ - жирным шрифтом, подробнее - читай все.

    Сканер отпечатков - устройство в устройстве, работа с ним производится на уровне операционной системы. Для работы с такими вещами есть свой апи (API - Application Programming/Protocol Interface).
    В мобильном приложении есть апи работы с различными устройствами, в том числе и с таким сканером. Для каждой ОС (Андроид/Ай/Черника/....) уже есть стандартизированные, но для каждой - свой. НО - вызовы апи доступны из React Native/Cordova/Veex, т.е. на Javascript.
    В ноутбуках и досктопах тоже есть, но там сложнее - с каждым сканером под каждую ОС идет свой драйвер со своим апи (читай - свой протокл, свой порядок соглашений и набор команд), нет единого стандарта, поэтому пока (?) нет интерфейса для "настольных" браузеров.
    В принципе, на дескотопе возможно определить наличие сканера и работать с ним из приложений на Electron, но нужно обязательно разобраться как правильно подвязывать хардварные вызовы из NodeJS для различных систем и строить билды для разных ОС с разными "прокладками". Однако и такой подход сработает только на Макоси, т.е. не "серебряная пуля" - нет единого стандарта для Windows и уж тем более для Linux.
    Ответ написан
    Комментировать
  • C чего начать изучение JavaScript опытному верстальщику?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Опытных верстальщиков без знания Javascrit не бывает!!!!
    learn.javascript.ru
    А, еще - jQuery.com
    Ответ написан
    Комментировать
  • Как отловить EventListener при ajax?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    1. Обработчики должны быть всплывающими (propogate), если работать с ДОМ. Перегружать нужно не всю страницу, а лишь объект (body, content, конкретный div и тп), в таком случае ДОМ обработчики (click, resize, keyboard ...) должны стоять на родительском для перегружаемого объекте. Читайте про event bubbling и event propagation
    2. Интересующие тебя обработчики - можно симулировать событие. В частности onload срабатывает 1 раз на загрузке страницы, и фффсее. НО, в таком случае при загрузке нового конетнта, кто мешает вызвать обработчик принудительно? Тот же обработчик на onload и тотже на AJAX success
    3. Посмотри в сторону JSONP
    4. не мучайся, возьми Vue
    Ответ написан
  • Почему говорят что jquery не нужен?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Зона применения jQuery стала несколько уже, не стала меньше.
    Забывать про него пока рано.
    Да, благодаря тому же jQuery, "подрос" сам JS.
    Да, для сложных клиентских приложений придуманы фреймворки, но даже используя их, иногда проще что-то делать с jQuery.
    И да, подключить jQuery ради одного селектора сегодня уже нет необходимости, ка не было ее и 15 лет назад, когда jQuery только родился.
    Для каждого инструмента - свое применение, профессионала отличает правильный выбор инструмента и грамотное его использование.
    Уверен - jQeury еще поживет. Не знаю насколько долго, но в ближайшие 2-3 года ему еще найдется применение.
    Ответ написан
    Комментировать
  • Как снаружи прервать выполнение асинхронной функции?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Если флаги не вариант, тогда только запихнуть асинхронную задачу в отдельный процесс - его при желании можно прибить. Для отдельного процесса, можно легко организовать `await`.
    Читать тут
    Ничего не мешает сделать отдельные самостоятельные модули под асинхронные процессы.
    Таким макаром можно организовать аналог многопоточности с балансировкой, контролем приоритетов. чифирем и папиросами.

    * npmjs.com/package/invoke-parallel
    * npmjs.com/package/runnablepool
    * npmjs.com/package/child-pool

    Есть еще workers и cluster

    И не надо забывать, что вся асинхронность Ноды - на событиях (Event Loop)
    Ответ написан
  • Как вы боретесь с удалением папок node_modules в Windows?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Тема в интернетах давно и широко освещаема, народ давно прикурил, что не все так просто, как кажется на первый взгляд, и нет "серебряной пули".

    `RimRaf` - хорошо, но не очень: использовать можно либо из скрипта, либо вручную на каждый проект, т.е. перед массовым бэкапом можно использовать лишь в составе некое "подготовительного" инструмента. И таки да - есть проблемы на разных конкретных конфигурациях. "Platform independence" не получился. По сути тех же результатов можно получить делая `rm -rf node_modules` в оболочке `bash` или `rmdir /S node_modules` в `cmd`, причем `rmdir` в большинстве случаев не вспомнит про длину строки, даже если для этого есть поводы.

    `npm dedupe` - тоже очень хорошо, но также не очень. Это неплохо делать в каждом проекте после `install` или после каждого изменения зависимостей. В противном случае перекур на сутки - просто гарантирован.

    1.

    Если доступна оболочка Bash на основе CygWin (если пользуетесь Git, скорее всего она - оболочка баша - есть, но не факт) решение, которое лежит на поверхности:

    find . -name "node_modules" -exec rm -rf '{}' +

    плюсик в конце - так надо: автоматом подтаскивает завершение (перевод) строки, можно заменить на \;

    Попадался и такой вариант:

    #!/bin/bash
    
    delete-all-dep-folders() {
      # `-prune` prevents building up lists of `node_modules` inside `node_modules`
      find ${1:-.} -type d -name "node_modules" -prune -exec rm -rf '{}' \; -exec echo 'Deleted {}' \;
      find ${1:-.} -type d -name "bower_components" -prune -exec rm -rf '{}' \; -exec echo 'Deleted {}' \;
    }


    После запуска скрипта (можно просто скопипастить в окошко баша) можно без параметров запустить команду `delete-all-dep-folders` в нужной папке или первым параметром задать путь:

    $ delete-all-dep-folders /path/to/project-root

    Напомню: если `bash` под cygwin, только тогда ему плевать на длину пути. Насколько это так, вы должны знать сами - где и какую версию Гита/Баша вы брали, там и надо читать: в интернетах найдется куча версий баша, скомпилированных с использованием нативных библиотек Windows, которые не используют cygwin!!!

    2.

    PowerShell. Якобы та самая "серебрянная пуля" от МелкоСофт. Вроде бы, плевать он хотел на длину пути. Якобы.

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

    Вариант:

    Get-ChildItem -Path "." -Include "node_modules" -Recurse -File:$false  | Get-ChildItem -Recurse | Remove-Item -Recurse  -Force


    Вполне рабочий, НО версия PowerShell >4.0. Более старые версии даже с ключом `-Force` не могут удалить НЕпустые папки.

    Уточню: несмотря на то, что Remove-Item (он же del, он же ...) имеет возможность обозначать фильтры и работать рекурсивно, тем не менее необходимость конвейера (знак палки между командами) все-таки есть, и на эти грабли наступало уже очень много народу еще до того, как на ms-tech и в документации была признано и отмечено, что таки да, проблема есть и в качестве решения предлагается использовать конвейер, т.е. – через палку надо делать, и не делать тупо Delete.

    И таки да, я нарвался на случай, когда это не сработало - на USB диске (NTFS) лежал старый проект на `Meteor`. Актуальности никакой, для истории тоже не находка, но он единственный усиленно сопротивлялся 4 с лишним часа. После чего мне надоело доискиваться причин такой стойкости и старый (честно купленный еще в прошлом веке) добрый Total Commander справился со всем проектом полностью за 1.897s.

    3.

    Победитель конкурса - Total Commander с настройками дисковых операций с помощью собственных (НЕ системных) функций. Не верьте документации: Windows, начиная с Vista, выполняет при дисковых операциях значительно больше "левых" действий для красоты, чем Commander, посему операции "его" функциями выполняются быстрее, чем "её" функциями. Совсем хорошо, если отключить в командере поддержку файлов описаний содержимого каталогов. Также, когда-то давно, мне попадался на глаза подключаемый модуль для командера, который заменял/дополнял поиск файлов на другой, в котором используется другая библиотека для работы с регулярными выражениями и дисковые операции можно выполнять сразу над результатами поиска без перекладывания во временную панель.

    4.

    Или мы не программисты? Пишем свой велосипед по рекурсивному обходу каталогов и `rimraf`-им чего надо. При этом не забываем положить сей золотой ключик отдельно, чтобы мимоходом не прибить его зависимости, и делаем для него консольный вызов. Успешно выкладываем в NPM и собираем звезды на Гитхабе. Дерзайте, а я настоящий программист, мне - лень, когда все просто и понятно :)
    Ответ написан
    Комментировать
  • Как сохранять дату с сайта в календарь?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Примерно так:
    <a href="cal:2017-03-23">23 марта</a>

    23 марта

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

    * разный софт по-разному обрабатывает значения ссылок
    * обработчиком этих ссылок в браузере может быть назначен какой-нибудь сайт, например "Гуглокалендарь", все зависит от настроек браузера на клиентской машине
    * на Андроидах/Айфонах тоже работает, и тоже зависит от настроек
    * что и как сработает - нужно читать отдельно, единого стандарта нет.
    Ответ написан
    Комментировать
  • Как провести валидацию HTML (Gulp)?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    По дефолту gulp-htmllint берет правила проверки из `.htmllintrc`.
    Для его создания можно использовать `htmllint-cli
    Остальное подправить ручками и запускать таск без указания дополнительных опций.
    Ответ написан
    Комментировать
  • Бесплатный хостинг для проекта на nodejs + mongodb?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Сloud9

    + Бесплатно - один персональный проект, неограниченно - открытых

    + Домен свой можно прикрутить, а по-умолчанию на халяву - есть домен 3го уровня

    + своя IDE - можно рулить с планшета, не имея под рукой ничего кроме браузера, особая фишка - позволяет одновременную параллельную работу в несколько рыл

    + дружит с GitHub-ом, BitBucket-ом и Google Cloud Platform.

    + Виртуалки - Ubuntu c SSH (были, по крайней мере раньше) в который можно и не лезть - все рулится через веб-морду или код.

    UPD

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

    Хорошей халявы (м-да, умею же сказать) тоже не осталось. Из надежных бюджетных решений могу порекомендовать облачный VPS для разработчиков от VScale (подразделение Selectel). Хороший и шустрый сервер с SSD, собственным ДНС и платой в месяц как 2 чашки кофе в придорожной забегаловке. 5 лет пользуюсь -- полёт нормальный.

    UPD 2021

    - netlify.com - 3 года кайфа
    -vercel.app- простота и мощнота
    - repl.it - есть ништяки про Питонов, Го и ещё куча всего. Крутота
    все умеют тащить в автомате с ГтиХаба, а Нетлифай ещё и с ГитЛаба и Битбакета: просто пушишь в master и, бам-бара-бам але хоп - вуаля! -- все в продакшене, всё на халяву, можно прикрутить свой домен у всех.
    и
    - конечно же -- VScale!!! -- полный контроль и -- 8 лет, полёт нормальный

    Welcome.
    Ответ написан
    2 комментария
  • Как определить страну и автоматически выбрать значения из select?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Яндекс в помощь: codepen.io/SynCap/full/oBjrpv
    Бесплатно, полностью в браузере, никакого шаманства на серверной стороне.

    PS: если не ошибаюсь, то код валюты в том же запросе можно получить, а если немного поколдовать, то и текущий курс валют. Как впихнуть в Select, полагаю, учить не надо, если что - список всех стран: https://ru.wikipedia.org/wiki/Список_стран
    Ответ написан
    Комментировать
  • Как сделать функционал вставки моего кода на сайт другим людям, как это делает вк?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Можете отдавать что угодно, и как угодно (iframe, скрипт, или данные для AJAX запроса), главное, чтобы сервер (ваш хостинг) разрешил использование данных с других хостов.

    По умолчанию браузерам разрешено грузить скрипты и картинки с других источников, но нельзя обращаться с AJAX запросом к серверам, которые прямо не разрешают это. Можно даже целиком страницы чужие в iframe грузить, но доступ скриптам из основного документа к содержимому iframe нужно разрешать с помощью CORS.

    Подробнее по теме:

    - https://habrahabr.ru/post/114432/
    - https://developer.mozilla.org/en-US/docs/Web/HTML/...
    - https://ru.wikipedia.org/wiki/Cross-origin_resourc...

    Тэги для гугления: crossorigin, CORS.

    Еще один вариант - JSONP - загрузка данных в виде скриптов с источников расположенных на других хостах (серверах с адресом отличным от адреса сервера вызывающей страницы).

    Самое распространенное решение для внедрения сторонних виджетов - скрипт, который тащит с собой данные (внутри тела скрипта) и генерирует новую разметку, чаще всего - iframe.
    Упомянутый oEmbed, по факту, делает тоже самое, как и виджеты "Вконтакте", "Фэйсбук" и т.п.
    Ответ написан
    Комментировать
  • Как вы освоили шаблоны проектирования?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    блин, вот - волшебная таблетка

    10 минут - и можно выгибать пальцы в крутых курилках и на собеседованиях
    Ответ написан
    Комментировать