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

    DollyPapper
    @DollyPapper
    Если вы будете пул создавать каждый раз при запросе в каждой функции, то какой тогда смысл от пула? Пул в go это своего рода синглтон, он создается один раз и далее распространяется по всему приложению. Очевидно, что если каждый раз будет новый инстанс пула, то никакой защиты от переполнения коннектов мы не получим. Итого: пул создается один раз, далее во всех остальные части программы он передается как вам удобно, через DI напрямую в фукнцию, в конструктор обьекта или еще как.
    Ответ написан
    Комментировать
  • Как работает stateless token authentication?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    очень легко мыслить токенами, как сессией, но токен это не сессия, не стоит путать.
    Токены используют как раз для того чтоб отойти от классической схемы с сессиями/паролями.
    по порядку:
    1) смотрите у вас есть сервис, состоит например из 10 серверов, которые отвечают за разные части функционала, поскольку функционал коммерческий вам нужно проверять каждый запрос от пользователя есть ли у него права для этого запроса.
    вы вынуждены сделать единый сервер валидации, и с каждого своего сервера, для каждого запроса, запрашивать на сервере валидации проверку пользователя и его прав.
    в такой ситуации сервер валидации для вашего сервиса становиться бутылочным горлышком, и мешает горизонтальной масштабируемости.
    и абсолютно без разницы валидируете вы пользователя по паролю, айпи, или токену, сессии, схема одна и таже, производительность тоже одна и таже (именно поэтому нет никакого смысла менять сверку пользователя вместо пароля на сверку по айпи, или токену, или сессию, тем более понятно почему использования айпи в этой схеме просто глупая идея).

    поэтому есть задача отойти от этой схемы, для возможности простого горизонтального масштабирования, для этого вы берёте информацию о пользователе (например его айди, права, и тд) и зашифровываете эти данные, и передаёте пользователю в виде токена.
    2) На каждом вашем сервере есть алгоритм быстрой расшифровки, который на лету проверяет токены, и из него получает нужную информацию, о правах и айди пользователя (валидирует пользователя, без бутылочного горлышка), сами токены временные, в них также вшивают информацию о времени его действия, обычно в районе пары часов/суток, после чего вы перегенерируете токен заново (ключ для перегенерации и получения нового токена также вшиваете в токен, осуществляя непрерывность процесса перегенерации токенов).
    3. Что делать если пользователь поменял пароль?
    ничего - токен даёт пользователю право на вход, и не имеет значения какой у пользователя пароль.
    Ответ написан
    Комментировать
  • В чем суть интерфейсов в программировании?

    ptchol
    @ptchol
    Linux system administrator
    Интерфейс это фактически регламент взаимодействия.
    Класс который реализует интерфейс обязан реализовывать все его методы.
    В интерфейсе вы описываете лишь сигнатуры методов, то есть вы указываете что класс наследник должен уметь делать, но как он будет это делать, тот решает сам.
    Таким образом вы уверенны, что если класс реализует тот или иной интерфейс, все объекты данного класса имеют определенный набор методов.
    ООП - мир абстракций :) Впустите его в себя :) Интерфейсы это еше одна абстракция позволяющая отделить описание от реалзиации.

    "Придумать класс с правильным именем" - так вы не сможете заставить "наследников" реализовывать функционал.

    Интерфейсы располагаются на уровень выше классов, если можно так выразиться. Они неявно "объединяют" классы схожие по каким то общим признаком, и которые обязаны (по логике вашего приложения) реализовывать те или иные методы.

    interface Instruments {
        final static String key = "До мажор";
        public void play();
    }
    class Drum implements Instruments {
        public void play() {
            System.out.println("бум бац бац бум бац бац");
        }
    }
    class Guitar implements Instruments {
        public void play() {
            System.out.println("до ми соль до ре до");
        }
    }


    p.s: программисты дополнят и поправят.
    Ответ написан
    2 комментария
  • Как открыть веб-сервер на Node.js для доступа из Интернета?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Как вариант для экспериментов и хомяков:
    1. Купить доменное имя (например тут, хотя выбор конечно за вами. В зоне .ru примерно 600 руб в год)
    2. Получить статический IP (купить у провайдера, примерно 50р в месяц), либо настроить чтото типа ddns (умеют почти все современные роутеры через свою вэбку).
    3. В случае статического IP настроить привязку купленного доменного имени к вашему статическому IP. Для этого порывшись по сайту конторы, продавшей вам доменное имя найти сервис DNS для их клиентов. У большинства пользование таким сервисом бесплатно.
    В случае ddns и ему подобных настроить привязку купленного доменного имени к вашей учетке в сервисе ddns
    4. Купить что то типа raspbery PI или orange PI, установить на него чтото типа armbian, nodejs, подключить к роутеру, настроить IP в локалке (пункт не обязательный, но удобства неоспоримы, висит себе бесшумно на стене возле роутера, прибитый гвоздем и раздает ваши сайты в нет :).
    5. Прокинуть необходимые порты в роутере на IP вашего сервера (raspbery PI или orange PI) (учтите что внешний порт будет 80 а внутренний на сервере скорее всего 3000. Номер внутреннего порта зависит только от того на каком порту вы запустите ваше nodejs приложение)
    6. Профит!!! Как только обновятся DNS записи (от пары минут до суток, в зависимости от выбранного DNS сервиса) вы, и весь мир вместе с вами сможет посетить ваше nodejs приложение по адресу http://ваш_домен.зона/

    PS: Далее вам останется только:
    1. Озаботится https (Let's Encrypt вам в помощь)
    2. Зарегать в вашем домене несколько поддоменов (например forum.ваш_домен.зона, game.ваш_домен.зона, chat.ваш_домен.зона, cloud.ваш_домен.зона). Хорошая новость в том, что у большинства сервисов, содержание вашего доменного имени и регистрация поддоменов бесплатны (если конечно вы их клиент - купили доменное имя у них)
    3. Установить на серв nginx и настроить его, чтобы перекидывал http запросы на https, сам проверял сертификаты и чтобы раскидывал входящие запросы по соответствующим сервисам уже в локалке и через http. (можно конечно озадачится чтобы сервисы на node сами свои сертификаты проверяли, но на мой взгляд это бессмысленно, потому что если кто взломает ваш сервер, ему будет глубоко наплевать зашифрованными или нет ходят пакеты между вашим nginx и сервисами на ноде через lo0.
    Ответ написан
    2 комментария
  • Почему не работает .htaccess на mac os x?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Проверьте, что в конфиге виртуалхоста есть опция:
    AllowOverride All
    Так-же возможно сам .htaccess работает, но не работают отдельные возможности типа реврайта, тогда подгружаем нужные модули, т.к. проблема с реврайтами самая частая, делается примерно так:

    идем в httpd.conf тут /Applications/MAMP/conf/apacheи раскаменчиваемLoadModule rewrite_module modules/mod_rewrite.so

    Кнонфиг виртуалхоста приводим к виду
    <VirtualHost *:80>
        ServerAdmin ...
        ServerName ...
    
        DocumentRoot ...
        <Directory ...>
            Options FollowSymLinks
            AllowOverride None
        </Directory>
        <Directory ...>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    </VirtualHost>

    Рестартуем апач и вуаля модуль работает, с другими по аналогии.
    Ответ написан
    Комментировать
  • Какой порядок разработки сервиса Python+Django+Vue+bootstrap?

    kgb_zor
    @kgb_zor
    I need your traceback.
    На счет IDE - хватит, да хоть блокнот.

    Порядок.

    1. Создайте django приложение.
    2. Создайте vue приложение.
    3. Накидайте html.
    4. Cоздайте модель сообщения.
    5. Напишите API на DRF.
    6. Потом при помощи vue делайте запросы на сервер и тяните сообщения.

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

    Хостинг - на ваш вкус Heroku , Pythonanywhere и т д.

    Туториал 1.
    Туториал 2.
    Ответ написан
    Комментировать
  • UTF-8 vs UTF-8 без BOM - что когда использовать?

    delphinpro
    @delphinpro
    frontend developer
    Различий никаких нет, кроме наличия/отсутствия маркера. Кодировка одна и та же - utf-8. По стандарту unicode маркер должен быть.

    Удалять маркер BOM при сохранении нужно только для PHP, который почему-то не умеет корректно обрабатывать нормальные unicode файлы.
    Ответ написан
    1 комментарий
  • Что значит выражение "выстрелить себе в ногу?" (в виде кода)?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Это означает, что на языке можно написать команду или конструкцию, которая сломает нормальное поведение программы или системы (или будет выполняться совершенно не так, как можно было бы логически предположить), и при этом компилятор/интерпретатор это скомпилирует и не ругнется.

    Почитайте тут:
    lurkmore.to/%D0%92%D1%8B%D1%81%D1%82%D1%80%D0%B5%D...
    Ответ написан
    Комментировать
  • Что значит выражение "выстрелить себе в ногу?" (в виде кода)?

    BBmike
    @BBmike
    ЯП здесь сравнивается с револьвером 19 века, который не имел автоматического взвода и либо стрелок медленный и неживой, либо он ходит со взведенным курком и отстреливает себе ногу.
    Ответ написан
    2 комментария
  • Пример хорошего ТЗ/гайдлайна для вёрстки?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Основные требования: здесь
    Примеры стайл-гайдов: здесь

    1. Требования к вёрстке: здесь, здесь, здесь, здесь
    2. Как проверять качество вёрстки: здесь.
    3. Как определять стоимость (трудозатраты) вёрстки одной унифицированной страницы: здесь.
    4. Требования к дизайнеру: здесь и здесь.
    5. Пример документации (генератор шаблона, Helix3 для CMS Joomla!): здесь
    6. Готовые "скелеты" шаблонов HTML5 для начала вёрстки: простой (с поясняющими комментариями), www.initializr.com (ещё 3 простых) и максимально полный html5boilerplate.com.
    7. Вопросы на вакансию верстальщика (front-end developer): здесь

    Бонус по-теме: Turning Design Mockups Into Code With Deep Learning
    Ответ написан
    3 комментария