• Нужен ли антивирус на linux server?

    vabka
    @vabka
    Токсичный шарпист
    А вот нужен ли он например на веб-сервере или локальном сервере?

    Что такое "локальный сервер"? На веб-сервере не нужен, тк он не должен иметь прав на запись и тем более на запуск произвольного кода.

    Сервере базы данных?

    Он тоже не должен иметь доступ на запись туда, куда ему не нужно. И тем более он не должен иметь прав на запуск исполняемых файлов.

    И файловом сервере?

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

    В итоге получается, что единственный риск - если злоумышленник вдруг найдёт RCE для СУБД или файлового хранилища, и то тут весь риск - потеря данных и майнеры.

    А на почтовые сервера антивирус ставят не для защиты сервера, а для защиты пользователей.
    Ответ написан
  • Нужен ли антивирус на linux server?

    Sanes
    @Sanes
    Ниразу не пригодился. Иногда для веб-приложений ставят. Когда у вас неконтролируемые CMS или самопальные скрипты. Например если у вас публичный хостинг, то ставить надо.
    Ответ написан
    5 комментариев
  • Почему происходит подтормаживание анимации?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Потому что в ветке else в анимации раскрытия у Вас не одно и то же между первым и вторым примером.
    В первом случае там будет правильная высота, а во втором - 0.
    Первый случай:
    [{ height: `${answer.clientHeight}px` }, { height: 0 }]: Array(2)
    0: {height: '156px'}
    1: {height: 0}
    length: 2


    Второй случай:
    hideKeyframes: Array(2)
    0: {height: '0px'}
    1: {height: 0}
    length: 2


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

    UPD: Рекомендую научиться отладке своего кода https://learn.javascript.ru/debugging-chrome.
    Решили бы проблему за 5 минут.
    Ответ написан
    1 комментарий
  • Как реализовать SAAS с субдоменами на Django?

    alternativshik
    @alternativshik
    Делаешь на беке миддлварю, которая будет из реквеста брать домен к которому обратились, по домену дальше определяешь своего кастомера, аутентифицируешь, авторизуешь и делаешь вообще что твоей душе угодно - роутинг БД, кастомные апи-эндпоинты и вообще все.
    Nginx настраиваешь на обработку всех субдоменов.
    Ответ написан
    1 комментарий
  • Что конкретно нужно знать про Django для начинающего разработчика?

    DollyPapper
    @DollyPapper
    На самом деле - всё что угодно. "Ты никогда не будешь готов к работе", нужно постоянно учиться.
    Но это не ответ на вопрос, точка входа должна быть у всего. И везде она разная. То есть никогда, не знаешь где тебе что может пригодится. Если более менее усреднить, могу выкатить такой список навыков с которыми можно идти на работу.

    Общие:
    • Знать как работает DNS в общих чертах, знать что такое файл hosts и зачем он нужен.
    • HTTP протокол. Знать его формат, знать статус коды
    • Быть уверенным пользователем Linux терминала. Знать как устроена файловая система линукса, зачем нужны все эти директории. Уметь пользоваться основными командами (cd, grep, ssh, lsof)<- это прям самый минимум, лучше больше. Значить что такое перенаправление ввода вывода (<,>,|)
    • Не плохо бы минимально уметь настроить Nginx. Вероятно вам не придется это делать будучи джуном, но знать как проиходит полный процесс обработки запроса как мне кажется очень полезно.
    • Мочь настроить SSL на nginx. Опять же скорее всего как джун вы этого делать не будете, но кто знает, разок попробовать чтобы просто понять.
    • Docker. Очень часто используется, советую выучить.

    Backend
    • Собственно сам питон и джанго на высоком уровне, это ваш самый основной рабочий инструмент
    • Django ORM и чистый SQL. Опять же на высоком уровне, с БД придется работать постоянно.
    • Если есть время - почитать про проектирование БД. Нормализация БД и вот это вот всё.
    • Понимать что такое авторизация и аутентификация

    FrontEnd
    Возможно вам не придется писать фронт, у вас будет для этого отдельные люди, но вероятность того что придется, она не нулевая. Зная какой нибудь JQuery ну или чистый JS вы повысите свой шанс найти работу. Ну про CSS + HTML я молчу, это даже не обсуждается, знать нужно.

    Отдельно хотел бы упомянуть по само написание кода. Хорошо бы понимать SOLID, DRY, KISS. Ну и конечно ООП, это я даже в списки не включал, это само собой разумеющиеся вещи.

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

    Как это учить?

    Придумываете идею, делаете проект, ловите баги, исправляете. Пишете пару проектов с применением того что выше описано, идете искать работу. Не стоит заниматься бесполезным чтением всего и вся, как только вы за код сядете, сразу обосретесь если будете читать голую теорию. Практика, практика и еще раз практика.
    Ответ написан
    Комментировать
  • Аналог Heroku в РФ?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    РФ в этом плане очень отсталая страна. Есть зачатки у Яндекса и все, насколько я помню
    Ответ написан
    Комментировать
  • Какое число генерирует php функция mt_rand?

    LoliDeveloper
    @LoliDeveloper
    Линейная алгебра как смысл жизни
    Чистая случайность это чуть ли не миф. Это как что-то не факторизуемое, не раскладываемое на алгоритмы, не зависящее от погоды или положения звёзд или шума космоса итп, и в то же время корректно выдающее значения.
    Поэтому везде либо математический алгоритм удовлетворяющий некоторым критериям псевдорандома, либо какое-то физическое устройство, основывающееся на хаотичности окружающей среды.
    Но вообще даже в крайних случаях последнего более чем достаточно.
    Ответ написан
    Комментировать
  • Какое число генерирует php функция mt_rand?

    Zoominger
    @Zoominger
    System Integrator
    Все софтварные генераторы чисел не генерируют истинно случайные числа.

    Настоящие ГСЧ есть, но обычно это такая штука, которая подрубается к компьютеру и встречается вживую довольно редко, погуглите про них, если интересно.

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

    sslion
    @sslion
    По сути ты (заказчик) можешь использовать любой алгоритм, главное чтобы розыгрыш приза не подходил под понятие "лотереи".
    Например "Макдак" часто проводит разные розыгрыши-акции, но это не лотерея... Посмотри у них на сайте условия проведения таких акций (обязательно должны быть на сайте и у твоего заказчика тоже), а также должна быть "публичная оферта"...
    Почитай это ФЕДЕРАЛЬНЫЙ ЗАКОН О лотереях (с изменениями на 20 ...
    И это Юрлица больше не смогут организовывать лотереи // ...
    Ответ написан
    Комментировать
  • Как вытащить все записи из базы за последние 30 секунд с учетом ID юзера?

    Nordic_Alf
    @Nordic_Alf
    PHP Developer
    Выполни запрос SELECT NOW(); и сравни с временем последних записей, а то может создаёшь с одной датой/часовым поясом, а now() другую дату выдаёт? И проверить те ли столбцы нужны в запросе)
    Ответ написан
    Комментировать
  • Какой лучше взять доп. монитор для macbook pro 2012 a1278?

    DevMan
    @DevMan
    мои предпочтения таковы: или qhd или uhd, но не больше 24".
    самый жир – 5к или больше. но и выбор невелик, и ценник не гуманный.
    Ответ написан
    6 комментариев
  • Какой лучше взять доп. монитор для macbook pro 2012 a1278?

    lamer350
    @lamer350
    กำลังสูงสุด
    Вот и берите любой 27" 2560x1440 на сколько позволяет ваш бюджет, вариантов очень много.
    Ответ написан
  • Попросили проверить код, на что смотреть нужно?

    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 комментариев
  • Что думаете на счет no-code платформ?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Конструкторы решают вполне конкретные задачи, если ваша задача входит в их число полностью, в чем проблема, используйте и радуйтесь жизни. Если ваша задача покрывается конструктором на пол шишечки - лучше пилить свое, иначе вы либо не решите задачу вовсе, либо путем боли и страданий.
    Что касается cms - тут точно такой же подход, если решает ваши задачи полностью в обозримом будущем - используйте, если не полностью - берите фреймворк.
    Ответ написан
    Комментировать
  • Что думаете на счет no-code платформ?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Конструкторы - это удел нижнего сегмента рынка, населённого мелкими заказчиками и низкоквалифицированными программистами. Подобные вопросы тут задают год за годом, но ничего принципиально не меняется.
    Ответ написан
    Комментировать
  • Что думаете на счет no-code платформ?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    те же самые автоматизации, да и целые сервисы делают
    ну так а кто же написал это? Без кода и прогеров тут не обошлось

    например за 6 недель в Бостоне ребята подняли сервис для аренды жилья
    ну так если их было 2е, молодцы. Значит работали день и ночь. Если команда из 5-10 человек, ничего удивительного.
    А так же, а из чего этот сайт состоит? Каталог с квартирами и телефоном собственника? Много ума что ли нужно?
    Взять водпресс, взять готовый шаблон с каталогом, раз раз и всё.
    Взять какой нибудь yii2, laravel, symfony для бека. vue, react, angular для фронта, взять готовую библиотеку компонентов, нарисовать дизайн и вперёд. 2 чела на фронт, 2 на бек, 1 дизайнер - 6 недель, проект готов. Хоть магазин, хоть каталог, хоть для кота.

    а просто подпиливать инструменты под нужды клиента.
    ну есть вон CMS. Инструмент с возможностью допиливания под клиента.

    Сам постоянно писал код, с полного нуля
    т.е. вы не понимали почему писали код с нуля что бы ответить на этот вопрос? Может потому что под задачи проекта не подходили какие либо инструменты? Или наоборот, вы почему-то не стали их использовать.

    Я не совсем понимаю суть вопроса. Уделять время чему именно? Я не понял...
    Наверное вся разработка так или иначе состоит из уже готовых вещей. Чаще всего сайты - это набор из готовых инструментов. CMS, js библиотеки, готовые компоненты/плагины под эти же самые библиотеки, css фреймворки.

    Да, многие вещи сейчас можно делать путём конструкторов сайтов, сделать быренько лендос, пфф, делов то. А сделать в таком конструкторе интернет магазин уровня али, ибея, амазона..... Ага, щас... Пишем сами.
    Многие задачи такими "автоматизированными сервисами" можно покрыть с лёгкостью, для этого они и есть. А что-то реально сложное и большое, конечно нет.
    Ответ написан
    3 комментария
  • Что думаете на счет no-code платформ?

    @anikavoi
    Все просто как молодо укроп:
    Если тебе нужно сделать быстро и потом нафиг забыть про это - конструктор в руки.
    Если ты собираешься потом туда что-то сам доваять... не советую! Разобраться в том что нагенерит коструктор и понять куда конкретно и как прилепить свою новую фичу может быть очень больно.
    Ответ написан
    1 комментарий
  • Что думаете на счет no-code платформ?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Не совсем про no-code, но выскажусь как архитектор и фанат serverless.
    1. Любой проект это реализованная идея
    2. Идея хорошо работает либо когда она уникальна, либо когда ее качество неоспоримо
    3. Если идею можно сделать из "говна, палок и пылесосы шлангов" - делаем, это абсолютно нормальный шаг
    4. Большинству проектов чтобы выделиться приходится делать уникальную бизнес-логику, которую не купишь в сервисе
    5. Можно выбирать компромисс в виде делегации части работы сторонним сервисам (Serverless концепция)


    Так что как по мне то обращать внимание надо на те проекты, которые облегчают жизнь. Я так, например, пришел в AWS, но при этом далеко не каждый мой проект строится вокруг этих концепций
    Ответ написан
    1 комментарий
  • Где можно посмотреть структуру базы данных для реализации RBAC и ABAC?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    ну рбак это же совсем просто :
    CREATE TABLE IF NOT EXISTS `roles` (
      `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `description` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `uniq_name` (`name`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    
    INSERT INTO `roles` (`id`, `name`, `description`) VALUES(1, 'login', 'Login privileges, granted after account confirmation');
    INSERT INTO `roles` (`id`, `name`, `description`) VALUES(2, 'admin', 'Administrative user, has access to everything.');
    
    CREATE TABLE IF NOT EXISTS `roles_users` (
      `user_id` int(11) UNSIGNED NOT NULL,
      `role_id` int(11) UNSIGNED NOT NULL,
      PRIMARY KEY  (`user_id`,`role_id`),
      KEY `fk_role_id` (`role_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `users` (
      `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `email` varchar(255) NOT NULL,
      `username` varchar(255) NOT NULL DEFAULT '',
      `password` varchar(255) NOT NULL,
      `logins` int(11) UNSIGNED NOT NULL DEFAULT 0,
      `last_login` int(11) UNSIGNED,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `uniq_username` (`username`),
      UNIQUE KEY `uniq_email` (`email`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    
    CREATE TABLE IF NOT EXISTS `user_tokens` (
      `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
      `user_id` int(11) UNSIGNED NOT NULL,
      `user_agent` varchar(255) NOT NULL,
      `token` varchar(255) NOT NULL,
      `created` int(11) UNSIGNED NOT NULL,
      `expires` int(11) UNSIGNED NOT NULL,
      PRIMARY KEY  (`id`),
      UNIQUE KEY `uniq_token` (`token`),
      KEY `fk_user_id` (`user_id`),
      KEY `expires` (`expires`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    
    ALTER TABLE `roles_users`
      ADD CONSTRAINT `roles_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
      ADD CONSTRAINT `roles_users_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE;
    
    ALTER TABLE `user_tokens`
      ADD CONSTRAINT `user_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
    Ответ написан
    2 комментария