• Объясните простыми словами как работает Redux?

    @mistbow
    Мне вот это очень помогло, особенно картинки внизу...
    https://medium.com/russian/a-cartoon-intro-to-redu...
    Ответ написан
    Комментировать
  • Как добавить запись в базу данных типа select?

    unitby
    @unitby
    так у него ведь тоже name и value
    var_dump($_POST['status']) в помощь
    Ответ написан
    2 комментария
  • Какая есть infinite scroll библиотека для angular?

    @Skrolea
    Ответ написан
    Комментировать
  • Какая есть infinite scroll библиотека для angular?

    AMar4enko
    @AMar4enko
    Устоявшийся термин infinite scroll это немного про другое. То, что вы ищете, называется virtual repeat или virtual scroll
    Ответ написан
    Комментировать
  • Как защитить изображения от PrintScreen?

    Serj-One
    @Serj-One
    i'm sexy and i know it
    Всё содержимое страницы априори доступно пользователю. Кому нужно, вытащат из кода.
    Защита от PrintScreen - турникет в поле, причём не просто не выполняющий свою функцию, но ещё и постоянно бьющий по бубенцам его поставившего.
    Ответ написан
    3 комментария
  • Правильный frontend?

    apavlyut
    @apavlyut
    www.pavlyut.ru
    Просто подпишитесь на твиттер https://twitter.com/jsunderhood и через пару недель у вас будет достаточное представление о современном хорошем фронтенде. Там же и вопросы задавайте.
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

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

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

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

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Хорошая задача для укрепления знаний и практики в JavaScript?

    Напиши инет магаз который работает без перезагрузки страницы! Как напишеь можешь идти на работу
    Ответ написан
    3 комментария
  • Python vs C++ что достойно внимания?

    @JohnJon
    Если решил всю жизнь посвятить программированию то в первую очередь тебе надо выбросить из головы все эти Java, Python, ООП и прочие ненужные пока для тебя вещи.
    В первую голову тебе надо налегать на школьную программу, чтобы через два года набрать максимальное количество баллов ЕГЭ и поступить в топовый вуз.Если хочешь стать программистом, а не очередным кодером-мартышкой, то у тебя просто нет другого выбора.
    Тебе всего 15 лет , ещё успеешь в будущем напрограммироваться. А пока тебе надо думать, как не про...ть его.
    Ответ написан
  • Есть ли аналоги перлового Coro в Python 3?

    alexclear
    @alexclear
    A cat
    Посмотрите на gevent (http://www.gevent.org). Мне кажется, это именно то, что Вам нужно.
    Ответ написан
    1 комментарий
  • Джанго и gunicorn?

    pinkevich
    @pinkevich
    Developer
    Для запуска проектов используйте supervisord.org
    Ответ написан
    2 комментария
  • Ruby, Python или NodeJS для сервиса?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Смысла нет делать это одним сервисом. Это разные задачи, пишите два отдельных приложения, им даже не надо общаться друг с другом, достаточно просто читать и писать в одну и ту же БД. Сервис аналитики можно вообще рзаместить на отдельном серваке и даже у другого хостера.
    Ответ написан
    Комментировать
  • Как добавить/удалить link в head? И возможно ли это вообще?

    Finesse
    @Finesse
    // Добавление link
    $link = $('<link/>', {
      rel: 'stylesheet',
      href: 'путь...'
    }).appendTo('head');
    
    // Немного позже удаление ранее созданного link
    $link.remove();


    Но лучше так не делать, потому что изменение стилей произойдёт с заметной задержкой, вызванной тем, что новый файл стилей нужно сначала загрузить и обработать. Лучше всего изменять класс тега body, а новое оформление задавать в том же файле стилей, но добавив к селекторам body.новыйКласс:

    <html>
      <head>
        <script src="js/jquery.js"></script>
        <style>
          .content { color: black; } /* Обычное оформление */
          body.otherStyle .content { color: red; } /* Новое оформление */
        </style>
      </head>
      <body>
        <div class="content">Lorem ipsum</div>
        <button id="button">Поменять всё</button>
        <script>
          $('#button').click(function(event) {
            // Нажатие кнопки будет добавлять класс, если его нет, и удалять его, если есть, тем самым включая/выключая другое оформление
            $('body').toggleClass('otherStyle');
            event.preventDefault();
          });
        </script>
      </body>
    </html>
    Ответ написан
    3 комментария
  • Nginx - как URL domain.com/blog/ вынести в отдельную директорию?

    @Arik
    Единственное что меня смущает в error.log, так это то, откуда в конце URL берется index.php

    Отсюда
    index index.php;
    Попробуйте location /blog добавить try_files с правилами Wordpress. - кучу статей есть.
    Просто нет правила, что если нет файла, то какой адрес след пробовать
    Ответ написан
    Комментировать
  • Кто как организовывает админ-панель в Django?

    svfat
    @svfat
    ☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
    Если нужен упрощенный админ-интерфейс, или наоборот значительно более сложный - то лучше написать самому.

    А так, админка Джанго имеет достаточно простой код и легко конфигурируется - более того, на каких-то простейших внутренних проектах для ограниченного круга пользования, вполне можно использовать ее в качестве единственного фронтенда. Писал подобие мини-ERP, в urls.py были только 'admin.urls'.
    Ответ написан
    1 комментарий
  • Как понять Python?

    @anelyubin
    Ни в коем случае не Лутц!!! Лутц предполагает залезание в глубины и в дебри языка, вам это сейчас не нужно. Лутц хорошо пойдёт в качестве второй-третьей книги, когда уже сможете писать простый скрипты. Вот эта книга должна помочь ознакомиться с языком www.ozon.ru/context/detail/id/25308826/. Если можете слушать видеолекции на английском, слушайте видеокурс здесь www.pythonlearn.com Он очень хорош и легок для начального освоения языка.
    Ответ написан
    1 комментарий
  • Как сделать такое переключение?

    igorbelikov
    @igorbelikov
    Fullstack Developer
    Тут все работает просто на css свойстве transition.
    Просто по клику одному блоку устанавливается позиция left: -1000px (чтобы ушел за экрана), а другому 0. А это свойство все эти изменения делает плавными.
    JSFiddle
    То есть примерно так:
    .block {
      /* all - свойства, к которым применяется анимация, можно указать только left
         1s - плавность (продолжительность), можно указать 0.5s или 3s
         linear - тип анимации, в данном случае линейна */
      transition: all 1s linear;
      position: absolute;
      left: 100px;
      color: yellow;
      background-color: green;
    }
    .block.active {
      left: -200px;
    }

    <a href="#" id="btn-move">Передвинуть блок</a>
    <div class="block">text</div>

    $(function() {
      $('#btn-move').click(function() {
        $('.block').toggleClass('active');
        return false;
      });
    });
    Ответ написан
    3 комментария
  • Бредово ли "разрывать" так таблицу?

    @coodan
    Срочно читать про нормализацию таблиц и join :))) Пока каша какая-то :)))

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

    Концептуально, у Вас должно быть несколько таблиц "измерений". Например, тип товара - в отдельной таблице. Имеющиеся товары с описаниями - в другой. Естественно, если таблица с описаниями будет ссылаться на таблицу типов товаров. И т.д. И одна таблица фактов. В ней то, что, кем, кому, когда было сбарыжено, например, в виде отсылок к соответствующим таблицам.

    А потом собирать, собирать все join-ами.

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