Задать вопрос
  • Веб сервис: WCF или ASP.NET MVC?

    Funbit
    @Funbit
    Всё зависит от проекта и области применения.
    В общем случае, варианты архитектуры могут выглядить вот так:

    [ASP.NET MVC]  <->   [ASP.NET WebAPI]    <->   [WCF SERVER]    <->    [DATABASE]

    Данная связка рекомендуется для серьезных, высоконагруженных и кроссплатформенных проектов с серьезными требованиями безопасности. WebAPI (фактически, это будет прокси для WCF SERVER'a) и MVC могут крутиться на одном и том же IIS сервере. WCF SERVER же лучше держать отдельным сервисом либо на той же машине, либо отдельно.

    [ASP.NET MVC]  <->   [WCF SERVER]    <->    [DATABASE]

    WebAPI слой можно убрать, если сервис больше рассчитан на внутреннее использование, где кроссплатформенность не нужна и у WCF SERVER'а ожидается много разных клиентов.

    [ASP.NET MVC]  <->   [ASP.NET WebAPI]   <->    [DATABASE]

    Такая архитектура годится для 99% интернет стартапов. Самая простая и быстрая в разработке, при этом не сильно уступающая более сложным вариантам, описанным выше. А с выходом MVC 6 исчезнет необходимость крутить такой сервер на IIS'e и позволит запускать его на Linux.

    Скорее всего вам больше подходит последний вариант.
    Ответ написан
  • Как сделать https запрос на python 3.4 через прокси?

    @chemiron
    Если вы не против сторонних библиотек - попробуйте requests.
    import requests
    proxies = {
      "http": "http://10.10.1.10:3128",
      "https": "http://10.10.1.10:1080",
    }
    requests.get("https://example.org", proxies=proxies)
    Ответ написан
    1 комментарий
  • Хосты в nginx с ssl?

    SonkoDmitry
    @SonkoDmitry Автор вопроса
    Веб разработчик
    Получилось решить проблему примерно следующим конфигом:
    site.com - онли хттпс
    server {
            listen 80 default_server;
            server_name www.site.com site.com;
            access_log /var/www/site.com/logs/nginx.access_log;
            error_log /var/www/site.com/logs/nginx.error_log;
    
            return 301 https://site.com$request_uri;
    }
    
    server {
            listen 443 ssl;
            server_name www.site.com;
            access_log /var/www/site.com/logs/nginx.access_log;
            error_log /var/www/site.com/logs/nginx.error_log;
    
            ssl on;
            ssl_certificate /etc/nginx/ssl/site.com.compiled.crt;
            ssl_certificate_key /etc/nginx/ssl/site.com.key;
    
            return 301 https://site.com$request_uri;
    }
    
    server {
            listen 443 default_server ssl;
            server_name site.com;
    
            access_log /var/www/site.com/logs/nginx.access_log;
            error_log /var/www/site.com/logs/nginx.error_log;
    
            root /var/www/site.com/public_html;
            index index.html index.htm;
    
            ssl on;
            ssl_certificate /etc/nginx/ssl/site.com.compiled.crt;
            ssl_certificate_key /etc/nginx/ssl/site.com.key;
    
            location / {
                    try_files $uri $uri/ =404;
                    fastcgi_param  HTTPS on;
            }
    }

    и второй, тестовый хост
    server {
            listen 443 ssl;
            server_name www.dev.site.com dev.site.com;
            access_log /var/www/dev.site.com/logs/nginx.access_log;
            error_log /var/www/dev.site.com/logs/nginx.error_log;
    
            return 301 http://dev.site.com$request_uri;
    }
    
    server {
            listen 80;
            server_name www.dev.site.com;
            access_log /var/www/dev.site.com/logs/nginx.access_log;
            error_log /var/www/dev.site.com/logs/nginx.error_log;
    
            return 301 http://dev.site.com$request_uri;
    }
    
    server {
            listen 80;
            server_name dev.site.com;
    
            access_log /var/www/dev.site.com/logs/nginx.access_log;
            error_log /var/www/dev.site.com/logs/nginx.error_log;
    
            root /var/www/dev.site.com/public_html;
            index index.html index.htm;
    
            location / {
                    try_files $uri $uri/ =404;
            }
    }
    Ответ написан
    4 комментария
  • Переход с Django Templates на Jinja2?

    появление официальной возможности подключить jinja не значит что расширения стали бесполезны, когда потребовалось в итоге взвесив все за и против всё равно остановился на niwinz.github.io/django-jinja
    При этом я не отключал стандартные шаблоны, я использую и то и другое, где узкем местом стали шаблоны, перешел на использование jinja.

    пользуюсь примерно таким:
    TEMPLATES = [
        {
            'NAME': 'django',
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': False,
            'OPTIONS': {
                'string_if_invalid': 'VARIABLE ERROR',
                'context_processors': [
                    "django.contrib.auth.context_processors.auth",
                    "django.core.context_processors.request",
                    'django.contrib.messages.context_processors.messages',
                    'core.context_processors.cities_list',
                    'django.core.context_processors.static',
                ],
                'loaders': [
                    ('django.template.loaders.cached.Loader', [
                        'django.template.loaders.filesystem.Loader',
                        'django.template.loaders.app_directories.Loader',
                    ]),
                ],
    
            },
        },
        {
            'NAME': 'jinja2',
            'BACKEND': 'django_jinja.backend.Jinja2',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'autoescape': False,  # !!!!!!
                "app_dirname": "jinja2",
                "match_extension": ".html",
                "newstyle_gettext": True,
                "translation_engine": "django.utils.translation",
                "extensions": [
                    "jinja2.ext.do",
                    "jinja2.ext.loopcontrols",
                    "jinja2.ext.with_",
                    "jinja2.ext.i18n",
                    "jinja2.ext.autoescape",
                    "django_jinja.builtins.extensions.CsrfExtension",
                    "django_jinja.builtins.extensions.CacheExtension",
                    "django_jinja.builtins.extensions.TimezoneExtension",
                    "django_jinja.builtins.extensions.UrlsExtension",
                    "django_jinja.builtins.extensions.StaticFilesExtension",
                    "django_jinja.builtins.extensions.DjangoFiltersExtension",
                    # "coffin.spaceless" не работает в py3
                ],
            }
        },
    ]
    Ответ написан
    2 комментария
  • Практическое использование схем в Postgresql - когда они нужны?

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

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

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

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

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

    Вот допустим, у вас есть отдельная схема для таблицы авторизации и аутентификации и отдельная - для корпоративного форума. Сервис авторизации у вас выполнен отдельно от форума (например, авторизация выдаёт токены пользователю, с которыми он потом может зайти на форум). С точки зрения безопаности было бы логичным выдать сервису авторизации и форума различных пользователей в базе - тогда, при взломе форума невозможно будет получить доступ к паролям в базе или изменить права на портале, подправив данные в таблице ролей. Конечно, многие СУБД разрешают ставить права на отдельные таблицы, однако схема в данном случае играет роль контейнера и позволяет проставить единые правила для всех таблиц внутри неё.

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

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

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

    BuriK666
    @BuriK666 Куратор тега Nginx
    Компьютерный псих
    Комментировать
  • Как легально держать веб-сервис, подразумевающий получение прибыли (например ежемесячная подписка)?

    Jump
    @Jump
    Системный администратор со стажем.
    Вы просто несколько неправильно воспринимаете веб сервис И это порождает массу ненужных вопросов, на которые сложно ответить.
    Веб сервис не является самостоятельным хозяйствующим субъектом. Это просто инструмент, оборудование.
    В общем веб сервис с этой точки зрения ничем не отличается от холодильника для замороженной рыбы в магазине. Он просто помогает коммерсанту продавать или оказывать услуги. И холодильник не может заключать договора, платить налоги, и совершать денежные операции.

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

    Открывать ли расчетный счет?
    Если ИП теоретически можно и не открывать. Хотя на практике - трудно представить ситуацию когда без него можно однозначно обойтись. В случае ООО - без вариантов открывать.

    Нужно ли получать какую-либо лицензию?
    Если вы ведете какаю-то деятельность которая подлежит однозначному лицензированию - например торгуете оружием, однозначно нужно получать, если нет, то не нужно.

    Нужно ли уведомлять какую-нибудь гос.структуру о том, что я храню персональные данные?
    Статья 22 пункт 1 федерального закона N 152-ФЗ
    В общем - нужно, если вы не попадаете под исключение указанное в статье 22 часть 2 федерального закона N 152-ФЗ

    А о том, то на моем сайте можно провести какую-либо денежную операцию?
    Тут все просто - на вашем сайте однозначно нельзя провести какую-то денежную операцию! Это просто физически невозможно.
    Денежные операции проводятся через банки, процессинговые центры, расчетные счета, платежные системы, наличный расчет.

    И раз уж на то пошло, сколько можно этим заниматься нелегально, при каких объемах и что за это грозит?
    www.consultant.ru

    Как работать с юриками если ты веб-сервис? Типовой договор с каждым? Выставлять счета по почте + ЭЦП?
    Неправильный вопрос. Веб сервис не может работать ни с юриками ни с физиками. Он работает с компьютерами.
    С юриками и физиками работают другие юрики и физики.
    Т.е договора с юриками будет заключать ни в коем случае не веб сервис, а организация или предприниматель которому принадлежит этот вебсервис.
    Ну а дальше все как у всех - обычная работа организации или предпринимателя с контрагентами.
    Вариантов заключения договоров и документального оформления масса, все зависит от вашей ситуации.
    Ответ написан
    3 комментария
  • Меры предосторожности при парсинге на Python?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    хороший способ - запустить wget, если он выкачает весь сайт - он однопоточный, то защита там неособо
    еще фишка - прикинуться Гуглботом, поверьте на слово - оочень немногие проверяют бота, особенно если с ВПС в США парсить
    для ВК и прочих, где царствую спамеры - защита будет всегда, границы - ищите
    заголовки - см https://pypi.python.org/pypi/fake-useragent/0.1.2
    Ответ написан
    7 комментариев
  • Как организовать совместную работу верстальщика и программиста?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Порядок работы должен быть таким:
    1. Верстальщик - работает с фронтом и создаёт SPA. (клиент)
    2. Программист - с RESTfull API на бэке. (сервер)

    Зачем программисту работа верстальщика?
    1. Самый простой вариант сделать шаблон или SPA: использовать includeHTML на фронте.
    2. Собрать шаблон и посмотреть - можно локально (из папки запустив html-ку), а заменив тэги include на функцию PHP: include, можно собирать тоже самое на стороне сервера.

    В итоге, они (фронт и бэк - программисты) не будут пересекаться и проблема будет решена.
    Ответ написан
    Комментировать
  • Flask API и Чат. Как реализовать, куда копать?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Чтобы сервер выдавал json, а не рендерил темплейты, достаточно просто возвращать через flask jsonify()

    Вот например у меня так
    from flask import jsonify
    
    # Begin AJAX requests
    @cart.route("/api/total")
    def total():
        count = 0
        if "cart" in session:
            cart = session.get("cart")
            l = [int(i) for i in redis.hvals(getCartKey(cart))]
            count = sum(l)
            logger.debug('cart %s : %d', cart, count)
        data = calculateItems()
        data.pop("products")
        return jsonify(dict(count=count, **data))


    Ну и описание jsonify из кода flask.
    """Creates a :class:`~flask.Response` with the JSON representation of
    the given arguments with an `application/json` mimetype. The arguments
    to this function are the same as to the :class:`dict` constructor.

    Example usage::

    from flask import jsonify

    @app.route('/_get_current_user')
    def get_current_user():
    return jsonify(username=g.user.username,
    email=g.user.email,
    id=g.user.id)

    This will send a JSON response like this to the browser::

    {
    "username": "admin",
    "email": "admin@localhost",
    "id": 42
    }

    For security reasons only objects are supported toplevel. For more
    information about this, have a look at :ref:`json-security`.

    This function's response will be pretty printed if it was not requested
    with ``X-Requested-With: XMLHttpRequest`` to simplify debugging unless
    the ``JSONIFY_PRETTYPRINT_REGULAR`` config parameter is set to false.

    .. versionadded:: 0.2
    """


    Что касается сообщений и их ожидания на стороне сервера, есть техника, называется long pooling, или использовать websocket (но к нему все тоже самое относится!"), и для реализации необходимо или запускать flask в режиме тредов app.run(threading=True), или использовать WSGI-враппер на основе gevent.
    Как пример - https://bitbucket.org/jeunice/flask-ws-example/src...
    и
    https://github.com/sigilioso/long_polling_example
    Ответ написан
    23 комментария
  • Как подтянуть английский за год?

    @clear_book
    ciscoadmin
    Изучал английский в школе 9 лет
    В вузе 2 года

    Никакого результата! А знаете почему? Потому что Язык - это не только заучивание слов. Заучивание слов - считаю пустой тратой времени. Везде сразу после алфавита впихивают грамматику! Вы вспомните, как сами научились говорить на русском - вы сначала все слушали и слушали а потом имитировали. А не начинали сразу с грамматики презент симпл, фиюче паст и так далее)). Советую сначала дооолгое ПРОСЛУШИВАНИЕ, далее ИМИТАЦИЮ и ТОЧНОЕ ПРОГОВАРИВАНИЕ и потом чтение интересных (!!!) книг на англ с переводчиком и понимать позже уже контекстно!

    Лично сам на стадии чтения, уже делаю на англ успешные презентации по ИС и ИБ) и говорю практически как носитель, с минимум акцентом.
    Удачи

    П.С: метод Замяткина. Попробуйте. всего 85 баксов, думаю ваши языковые курсы в месяц возьмут с вам 85 баксов)
    Ответ написан
    Комментировать
  • Как подтянуть английский за год?

    rasswet
    @rasswet
    подкасты слушай. есть подкасты по уровням от простого к сложному.
    сложнее - ролики TED
    еще можно взять пару уроков у репетитора (есть варианты за 500р в час. ищешь на авито преподов по скайпу из регионов) ответят на твои вопросы
    www.efl.ru тут твой вопрос уже 100500 раз обсуждали, полно советов, но можешь задать его и там.
    Ответ написан
    Комментировать
  • Как правильно реализовать API?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Шаг 1, изучаем https://jwt.io/ - на настоящий момент стандарт для аутентификации.
    Шаг 2. Каждое устройство должно иметь уникальный токен. Пользователь должен иметь возможность деавторизовать любое устройство. При смене пароля все токены автоматически стираются.

    Организация хранения токена должна выглядеть примерно так:
    tokens
    - user_id
    - device_id  - при авторизации через браузер можно подставить md5(User-Agent)
    - device_name  - человеко-понятное имя девайса или название браузера
    - token
    - last_used
    - expires_at

    Про API, вместо передачи дополнительного параметра в запросе очень часто используют HTTP-заголовки.
    Наличие множества токенов практически ничем не грозит, разве что небольшим увеличением размера данных.
    Сброс токенов нужен по времени, по смене пароля, значительной смене географии (другая страна и т.п.), при нажатии кнопки Выход и по желанию пользователя (опции Выйти со всех устройств).
    Ответ написан
    12 комментариев
  • Как подтянуть английский за год?

    opium
    @opium
    Просто люблю качественно работать
    Вот тут поднобно описал как учить
    upworkest.ru/neobhodimyj-uroven-anglijskogo-i-kak-...
    Ответ написан
    1 комментарий
  • Как подтянуть английский за год?

    eugene_leshchinskiy
    @eugene_leshchinskiy
    я уже спрашивал подобный вопрос, теперь поделюсь опытом)
    1. Перевсти все свое окружение на английский: ос, телефон, вк, сервисы гугла и прочее
    2. Lingvist.io мне очень нравится, 150-200 слов каждый день прогоняю. Сайт хорош тем, что там можно прослушать и повторить за роботом и как-то тренировать свое произношение. штук 500 слов за 2 месяца добавил в словарный запас тут, честно. хайли рекоменд
    3. Перейти на англоязычную музыку, переводить понравившиеся треки, слушать желательно в наушниках и следить за словами, а потом открывать текст и сравнивать
    4. Подписаться на пару пабликов в вк по анлийскому (сомнительная эффективность, но там часто бывают подборки слов, иногда глаза зацепятся, уже неплохо)
    5. Перейти на англоязычный контент на ютьюбе.
    6. Добавить переводчик в закладки и ВСЕ непонятные слова туда вбивать.
    7. Я иногда себе устраиваю собеседование, задаю и отвечаю на вопросы по-английски.
    8. Пытайся писать на английском - статусы, на стене, в твиттере - где ты обитаешь, ты увидишь, что совсем ничего не знаешь, и придется лезть на форумы узнавать правила, как пишется та или иная конструкция.

    может быть что-то из списка пригодится, от себя добавлю, что книги мне не заходят. читать могу даже более-менее серьезное творчество, но не доставляет удовольствия, через силу не хочу.
    грамматику самому учить тоже гиблое дело, у меня нет денег на курсы / репета, но если у тебя есть - подтяни, я думаю очень поможет, если тебя завалят систематезированными знаниями и задачками.
    Ответ написан
    Комментировать
  • Как подтянуть английский за год?

    @holymotion
    У меня такая связка:
    1. Lingvist.io (словарный запас)
    2. Lingualeo (словарный запас и курсы по теории)
    3. Песенки на ютубе с текстом (прокачивает восприятие англ. на слух)
    4. Книга (в моём случае Гарри Поттер), читаю вслух
    5. netflix кино, TED TALKS, статьи
    Ответ написан
    2 комментария
  • Как подтянуть английский за год?

    aRegius
    @aRegius
    Python Enthusiast
    Добрый вечер.

    Может окажется полезным...

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

    Поток.
    Я за собой заметил такую штуку - когда приступал к чтению, мне требовалось какое-то непродолжительное время для того, чтобы "набрать обороты". Т.е. вначале чтения я как бы "притормаживал", "спотыкаясь" на тех или иных словах/фразах/оборотах... Это занимало минуты 3-4 наверное. После, я набирал естественный для себя ритм и читал уже довольно свободно.

    Это я к чему... Когда я пробовал читать, например, методом Ильи Франка (суть метода в том, что текст разбит на блоки: сначала блок текста, сопровождаемый переводом, после - блок текста повторяется без перевода), либо читать и по ходу смотреть в словарь для перевода нового незнакомого слова - данные варианты вызывали у меня некоторый дискомфорт в том смысле, что "рвали" этот самый ритм/поток чтения и не позволяли погрузиться в него, что необходимо для более естественного как восприятия прочитанного, так и наработки плавного разговорного темпоритма.

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

    Теперь сам простой совет: есть ли книга, сюжет которой вам знаком практически идеально? Найдите англоязычную версию и читайте.

    P.S. Я, например, читаю "Три мушкетера" Александра Дюма :)
    Ответ написан
    7 комментариев
  • Как подтянуть английский за год?

    @hoarywolf
    От "почитать в дорогу" восприятие на слух не улучшится.
    Поэтому слушайте курс Assimil, подкасты BBC English (например 6 minute English)
    Попробуйте lyricstraining.com —  это типа караоке наоборот, надо на слух слова вставлять

    а почитать (вернее позаниматься) — Grammar in use Мерфи (подберите книжку под свой уровень)
    Ответ написан
    5 комментариев