• Как работает электронная почта?

    Возьмём двух почтовых провайдеров: mail.ru и gmail.com.
    На них зарегистрировались соответственно два пользователя: А@mail.ru и Б@gmail.com
    Чтобы А успешно оправил письмо получателю Б, а тот его принял, происходит следующее.

    Схема довольно проста:

    Отправитель А@mail.ru посылает письмо получателю Б@gmail.com

    Сервер mail.ru (MTA), получив задание с помощью почтового посредника MUA (клиентская почтовая программа (The Bat, Mozilla Thunderbird)) по протоколу SMTP, ищет почтовый сервер gmail.com (MTA) по доменной части адреса (в нашем случае gmail.com) через DNS. SMTP сервер mail.ru ищет в DNS для домена gmail.com запись MX (mail exchange), она и указывает на MTA сервер получателя Б@gmail.com (в простом случае).
    Далее MTA mail.ru связывается с MTA gmail.com по протоколу SMTP, происходит ряд проверок со стороны обоих серверов, если все успешно, то письмо передается в почтовую очередь сервера gmail.com.
    Затем MTA gmail.com доставляет письмо на сервер входящей почты (называющийся MDA, то есть агент доставки электронной почты), который хранит письмо в почтовом ящике пользователя Б@gmail.com в ожидании его приема пользователем. Далее с помощью MUA (клиентская почтовая программа (The Bat, Mozilla Thunderbird)) пользователь Б@gmail.com извлекает из MDA письмо по протоколу POP или IMAP.
    В качестве MUA может выступать веб-интерфейс, использующийся для взаимодействия с сервером входящей почты (MDA) и сервером исходящей почты (MTA).
    Ответ написан
    1 комментарий
  • Rails или Node.js для backend (RESTful API)?

    mak_ufo
    @mak_ufo
    500к запросов в минуту - это очень мало
    1000000 соединений в секунду на node.js
    1000000 соединений в секунду на python

    Но вообще всё зависит от нагрузки. Если у вас 10 запросов в минуту, то что угодно потянет. Если уж совсем по харду, то пишите на Crystal или Elixir, если знаете Ruby
    Ответ написан
    5 комментариев
  • Rails или Node.js для backend (RESTful API)?

    Kaer_Morchen
    @Kaer_Morchen
    Разрабатываю web-приложения.
    RoR или node.js для платежного сервиса? Серьезно?

    Для платежного сервиса важна:
    - отказоустойчивость (стабильность работы)
    - 0% downtime
    - hot code reload
    - скорость работы

    Я бы взял OTP + Elixir + PhoenixFramework + JSONAPI
    Ответ написан
    2 комментария
  • Реально ли установить и успешно без особых глюков работать в Photoshop под Ubuntu?

    @tushev
    Для запуска Photoshop и Microsoft Office я запуская виртуальную Windows XP на VirtualBox. На виртуальной ОС я делаю общие диски с Ubuntu. Так работать вполне удобно, а ресурсов компьютера много не съедает. По скорости, все работает очень быстро.
    Ответ написан
    Комментировать
  • Как реализуется SPA-приложение, на примере Vue.js?

    @Barmunk
    На laravel есть реализация SPA приложения, можете его изучить, как раз собрано все, что вас интересует

    https://github.com/codecasts/spa-starter-kit

    Client side
    Vue.js 2.0 project create with vue-cli + webpack template
    Centralized state management with Vuex
    Route management with Vue-router
    Authentication with JWT
    Keep user signed in using local stored info
    HTTP requests with Axios
    ESLint with AirBNB preset
    Pagination integrated with Laravel's LengthAwarePaginator
    Alerts and Confirmation Alerts provided by SweetAlert

    Server side
    Laravel 5.3
    Authentication with JWT
    Fractal
    Web service RESTful with Dingo (planned)
    Ответ написан
    2 комментария
  • Как реализуется SPA-приложение, на примере Vue.js?

    @game802 Автор вопроса
    Дали ответ на другом ресурсе, может быть кому пригодится:
    1. Да, на нем пишут как простые штуки таки и полноценные SPA, навигация работает без презагрузки.
    2. Nuxt js это сборка (VueJS + VueRouter и т.д.) которая делает Рендеринг SPA приложения на стороне сервера. Зачем он это делает? - все очень просто. SPA приложения неиндексируются поисковыми ботами из-за своей асинхронности и JS, NuxtJS решает эту проблему, делая рендер на стороне сервера (выполняет все асинхронные действия например запрос к бекенду по REST, и возвращает отрендеренный HTML)
    3. SSR (серверный рендеринг), генерирует ту страницу которую запросил пользователь например: example.ru/item/12, в данном случае SSR спросит у бэкенда Item с id = 12 , и затем сгенерирует и вернет клиенту HTML. В конце HTML документа всегда подключен файл вашего SPA приложения, который исполнится и включит реактивность. Т.е. Получается что первый запрос к сереверу это отрендеренный SSR, а все остальные переходы по приложению это уже SPA
    4. Да, просто ставите NuxtJS и наслаждаетесь разработкой.
    5. Взаимодействует через REST, делая GET|POST запросы на ваш бекенд. Либо через socket. Используйте laravel 5 как бэкенд
    6. Vuex это централизованное хранилище данных. предназначено для того чтобы жёстко отделять данные от view. Все данные хранятся в едином экземпляре, и если происходит set (мутация) для какого-либо значения в хранилище, то во всех местах где был get этого значения, произойдёт обновление.
    Этим обеспечивается реактивность, сайт перестаёт быть просто страницей. Он если хотите "обретает душу"

    Иногда в простых админках я создаю всего один основной action который делает т.н. getAllState, т.е. Берет все состояние относительно пользователя у бекенда. Например берет объекты user, comments, posts. Billing, messages и пишет это в хранилище.
    И когда мне надо обновить данные, я опять вызываю getAllState который обновит хранилище, в это время автоматически вызовется цепочка геттеров/сеттеров и вот тут сработает магия vue. Он сравнит текущий отрендеренный DOM с Новым Virtual DOM. И если где то будут различия он перерендерит этот кусок.

    Очень сложно объяснять это. Надеюсь я смог донести хоть частичку всей концепции.
    Думаю про доки говорить не стоит. Ведь все что сказано выше там написано в более подробной форме)

    Автор: Евгений Рюмин
    Ответ написан
    4 комментария
  • React+Redux VS Backbone (Marionette) в 2017?

    kuzvac
    @kuzvac
    Посмотрите ещё на https://ru.vuejs.org/ и https://vuex.vuejs.org/ru/ они чем-то схожи с многими упомянутыми технологиями (vue.js взял лучшее из них) и сделали эдакий "правильный react" :)
    Ответ написан
    1 комментарий
  • И все-таки PHP 7 быстрее Python 3?

    @DimaWeb
    Пишите на Python, а узкие места переписывайте на PHP.
    Ответ написан
    1 комментарий
  • Как исправить ошибку при попытке добавления строки в mysql: TypeError: must be string or read-only buffer, not tuple?

    sim3x
    @sim3x
    Так делать НЕ нужно
    Тут не пхп
    sql = "INSERT INTO groups(group_id, group_name, short_link) VALUES (%s, %s, %s)" , (gid, name, screen_name)
    print(type(sql))
    
    sql = "INSERT INTO groups(group_id, group_name, short_link) VALUES (%s, %s, %s)" % (gid, name, screen_name)
    print(type(sql))


    Нужно делать через
    https://dev.mysql.com/doc/connector-python/en/conn...

    sql = "INSERT INTO groups(group_id, group_name, short_link) VALUES (%s, %s, %s)" 
    
    cursor.execute(sql, (gid, name, screen_name))


    или так
    sql_prepared_text = "INSERT INTO groups(group_id, group_name, short_link) VALUES (%s, %s, %s)",  (gid, name, screen_name)
    
    cursor.execute(*sql_prepared_text)
    Ответ написан
    1 комментарий
  • Как правильно администрировать VPS?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ни в коем случае не ставить никаких ISP Manager / Vesta / CPanel, иначе никогда не научитесь тому, чему хотите научиться. Кроме того, они жрут ресурсы. Даже Vesta, которая самая легкая, их жрет прилично, а я сильно сомневаюсь, что у вас VPS c 8+ Gb памяти.

    Изучать надо по урокам и статьям, читая мануалы и best practices по каждому package. Порядок, плюс-минус, таков:

    - развернули ось
    - сделали сразу апдейты
    - создали и настроили swap
    - поменяли пароль рута на что-нибудь супер-мега-сложное (его мы использовать все равно не будем)
    - создали себе обычного юзера с паролем нормальной сложности (он будет использоваться для sudo)
    - дали юзеру права sudo
    - закрутили гайки по SSH - сменили порт, запретили вход руту и вход по паролю (только по ssh-ключам), разрешили вход только одному своему новому логину
    - настроили UFW - простой, но эффективный firewall на основе iptables - default deny, allow http, https, свой кастомный ssh-порт. Если логиниться будете только из нескольких мест (офис, дом) - можно вообще ssh разрешить только на эти IP.
    - sudo dpkg-reconfigure tzdata чтобы установить свою временную зону, так логи потом легче читать и понимать
    - настроили logrotate
    - настроили logwatch
    - настроили Postfix, чтобы сервер вам письма мог слать (мы его настраиваем на внешний мейлер, например Mandrill, чтобы все письма точно в спам не падали)
    - настроили fail2ban (потом, после установки и настройки веб-сервера и сайтов, в fail2ban можно дополнения писать, например мы на WordPress-сайтах мониторим попытки авторизации в админку и блочим тем же fail2ban)
    - дальше ставим все что нужно - Git, Nginx, HHVM, PHP5-FPM, MariaDB, Memcached/Redis и так далее.

    Регулярно заходите на сервер, делайте apt-get update && apt-get dist-upgrade.

    p.s.: это по ubuntu/debian, для других систем все то же самое, но packages и команды могут немного отличаться
    Ответ написан
    26 комментариев
  • Стоит ли переходить с CodeIgniter на современные фреймворки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Слухи о том, что CI безнадёжно устарел, безнадёжно устарели.
    Буквально на днях вышла версия 3.0
    Ответ написан
    3 комментария
  • Нужен ли фронтенд для web-application на python?

    Заранее извиняюсь за резкость, но... Извольте абстрагироваться от бэкендов-фронтендов и подумать сами.

    Если вы пишете какую-нибудь web-ориентированную IDE, редактор изображений или ещё чего-то такое, для которого нужно много кода, исполняющегося на клиенте, - ну наверное, вы для этого кода какой-нибудь фреймворк будете использовать. Нет?

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

    На Питоне можно написать и первое, и второе, и пятое, и десятое. Более того, обмен данными между фронтендом и бэкендом осуществляется в стандартных форматах - обычно это JSON, ну или HTML кусочками пересылается, иногда даже XML. Но форматы эти никоим образом не зависят от того, на каком языке написана программа на сервере. Хоть на ассемблере пишите.

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