• Какую роль играет www в web?

    AleksDesker
    @AleksDesker
    Исторически предполагалось что будут одинаково востребованы www.example.com, ftp.example.com, smtp.example.com и эти субдомены сделают обращения к ним более понятным для ученых которых работают с сетью (а ведь кому, кроме ученых может понадобиться интернет, правда?).
    В наше время лучше предполагать введение адреса с www., просто добавить переадресацию на без-www, потому что во первых некоторые пользователи могут на автомате его добавлять, во вторых как дополнительный запас для распределения нагрузки: https://www.yes-www.org/why-use-www/
    Ответ написан
    1 комментарий
  • Когда стоит разделять приложения?

    sarapinit
    @sarapinit
    Точу водой камень
    1 кейс.
    У вас есть запросы на которые нужно отвечать быстро (текущее состояние) и какой-то сервис с отчетами. Когда пользователи запрашивают большой отчет скорость ответа текущего состояния начинает проседать. Тогда вы делаете отдельный сервис для отчетов, выносите его в отдельное приложение и на отдельную виртуалку. Таким образом вы изолируете потребляемые ресурсы и устраняете влияние сервисов друг на друга. Плюс получаете возможность отдельно масштабировать сервис отчетов во времена наибольшей нагрузки.

    2 кейс.
    У вас есть сервис авторизации для которого нужно учесть множество разных требований и стандартов по безопасности. Вы привлекаете отдельную команду для его разработки с определенными навыками. В этом случае вы изолируете ресурс "навыки разработки безопасных сервисов" чтобы команда не тратила свое время на другие фичи.

    3 кейс.
    Вы делаете несколько сложных сервисов и решаете распаралелить разработку на несколько команд. Одна команда делает "Кинопоиск", другая "Афишу". Все они обращаются к серверу авторизации из кейса 2 и бекендам из кейса 1.

    Итог.
    Разделение на несколько приложений - это либо логическое разделение, когда приложения делают разные и несвязанные вещи. В этом случае удобно думать о разных задачах как о разных приложениях. Отдельно их разрабатывать, деплоить и т.д.
    Либо это управление вычислительными мощностями. Когда разные части системы требуют разделения ресурсов, нелинейного масштабирования или имеют совсем разный режим работы (например АПИ для загрузки фоток и асинхронный воркер который делает превьюшки для этих фоток)
    Либо это управление на уровне человеческих ресурсов, когда приходится вводить в разработку несколько команд.
    Ответ написан
  • Правильно ли я понимаю идею Redux?

    Идея Redux изложена в трех пунктах в официальной документации https://redux.js.org/introduction/three-principles :
    • Single source of truth
    • State is read-only
    • Changes are made with pure functions

    Кроме этого полезно почитать секцию https://redux.js.org/introduction/prior-art . В ней рассказыается предистория.
    Ответ написан
    Комментировать
  • Где вы храните запросы к базе в коде или используйте хранимые процедуры?

    DevMan
    @DevMan
    есть 2 основных подхода: максимум логики в бд и максимум логики в приложении.
    первый был актуален в давние времена, когда компьютеры были медленными.
    сейчас, когда железо дешевеет, а труд специалистов дорожает, превалирует второй подход. у которого с одной стороны есть недостаток в виде возможной просадки по скорости, но с другой стороны нет необходимости держать в штате специально обученных людей, и весь контроль над базой (включая ее структуру) остается на стороне приложения, а не субд.

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

    Все хорошо работает, пока бизнес не меняет логику, меняться запрос и получается много переделывать.
    а переписывать и тестировать процедуры в субд проще? тем более, скорее всего, с изменением процедуры придется переписывать код все равно.
    Ответ написан
  • Стоит ли переходить с php на java?

    neuotq
    @neuotq
    Прокрастинация
    Язык это инструмент.
    Если вы начинаете работать в области где используется другой инструмент, то да стоит выучить. И это вне зависимости от самого языка. Эти бесконечные гонки за мега правильным выбором именного того языка чтобы выучить в 2020 году, бла бла бла - пустой звон. Есть спрос, вам нравится, у вас получается? Берите учите.
    PS тема выбора технологии/стека архитектором приложения конечно же совсем иной вопрос.
    Ответ написан
    Комментировать
  • Чем грозит смена доменного имени сайта?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Вы в топ-10 по выдаче в поисковиках? Или почему вас вообще волнует текущая индексация сайта?
    Ответ написан
    1 комментарий
  • Чем грозит смена доменного имени сайта?

    Jump
    @Jump
    Системный администратор со стажем.
    Чем грозит смена доменного имени сайта?
    В вашем случае - ничем.
    Ответ написан
    2 комментария
  • Как вернуть сайту былые позиции?

    opium
    @opium
    Просто люблю качественно работать
    Очевидно сделать редиректов со страх на новые, и позиции вернутся
    Ответ написан
    Комментировать
  • Как вернуть сайту былые позиции?

    @cema93
    WordPress разработчик
    лучше настроить редиректы. со временем поисковик переиндексирует новые страницы и даст им позиции старых
    Ответ написан
    Комментировать
  • Как организовать проект таким образом чтобы при разработке модулей для него не требовался сам проект?

    @BorisKorobkov
    Web developer
    Модуль для своей работы дёргает контроллеры из основного проекта.

    Что-то не то с бизнес-логикой. Обычно наоборот, проект использует модуль (мозг дает команду ногам идти, а не ноги управляют мозгом).

    Правильнее писать такой модуль, чтобы он не зависел от вашего проекта. Доступ к БД у него должен быть свой. Устанавливать его через requirements.txt

    Если модуль нельзя сделать самостоятельным, то тогда хотя бы пусть использует интерфейс, который надо предоставить сторонним разработчикам.
    Ответ написан
    4 комментария
  • Какие есть решения для управления 100+ сайтов?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Комментировать
  • Слайдер на Вордпресс?

    dimovich85
    @dimovich85 Куратор тега JavaScript
    https://u-academy.net/
    Плагины для слайдеров поискать можно.
    Можно как-то обыграть галерею, потом легко можно фото вывести (get_post_gallery( $post_id, false ))
    Слайдер такой обязательно надо с lazyload. Как по мне - slick отлично.
    Чуть сложнее с подписью и ссылкой, надо что-то думать.
    Ответ написан
    Комментировать
  • Зачем ботов заворачивают во Flask (как пример)?

    @hail3b
    От http вы получите много готовых решений. Таких как, масштабирование, балансировку, мониторинг, следовательно стабильность, производительность, ускоренное решение проблем.
    Ответ написан
    5 комментариев
  • Что конкретно делает эта функция mysqli_real_escape_string()?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это хороший вопрос, в первую очередь потому что найти человека, который знает правильный ответ, практически нереально. Опроси 10 похапешников, 10 из них тебе наплетут ереси, которая не имеет с реальностью ничего общего. Любой, кто заикнется про SQL инъекции, уже облажался.

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

    Как ты, наверное, уже знаешь, строки в SQL берутся в кавычки:
    SELECT * FROM table WHERE name='vasya'
    Вот чтобы vasya не приняли за имя таблицы или ключевое слово, его берут в кавычки. Очень просто. Но иногда у человека имя не просто вася. Что будет вот с таким запросом?
    SELECT * FROM table WHERE name='Я Д'Артаньян, а все вокруг ...'

    Мясорубка будет. БД решит, что имя - это 'Я Д', а дальше какая-то фигня, которую она не понимает. И выдаст ошибку.
    Поэтому кавычки надо экранировать.
    SELECT * FROM table WHERE name='Я Д\'Артаньян, а все ...'

    никаких ошибок не выдаст.
    Вот mysqli_real_escape_string() как раз этим и занимается - экранирует кавычку слешем, а заодно и сам слеш, потому что если слеш окажется в конце строки,
    SELECT * FROM table WHERE text='Мну сегодня в любви вкладкой ошиблись :\'

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

    Еще одна функция этой функции - принимать в расчет кодировку текста. Есть кодировки, в которых слеш - это не слеш, а часть другого символа. И когда БД будет парсить запрос, она не поймет, что это слеш, а решит что это просто буква. И снова мясорубка.
    Поэтому перед использованием mysqli_real_escape_string() надо сказать БД, в какой кодировке у нас данные, с помощью функции mysqli_set_charset().

    Но читатель уж сучит ножками в нетерпении - а что же SQL инъекции, о которых так долго говорили большевики? Не может же быть, чтобы они были совсем не при чем. Окей, в качестве побочного эффекта, строка, в которой экранированы спецсимволы (слеш и кавычка), не пропустит инъекцию. Но здесь следует понимать две вещи:

    1. Строки надо форматировать в любом случае, независимо от того, ждем мы инъекцию, или нет. Мясорубка нам точно так же не нужна.
    2. Строками синтаксис SQL запросов не исчерпывается. Есть числовые литералы, есть имена полей. Для всех них mysqli_real_escape_string() бесполезна чуть более чем полностью.

    То есть, отсюда можно сделать вывод, что нельзя использовать mysqli_real_escape_string() для защиты от инъекций. Она предназначена для другого. Вот для этого другого, для форматирования строк, ее использовать можно. Но не нужно.

    Нашлись умные люди, которые придумали, что колупаться вручную с форматированием переменных для SQL запроса - это долго, неудобно, и можно что-то забыть или перепутать. И пусть лучше БД сама этим занимается. И придумали вместо переменных подставлять в запрос специальные маркеры, а сами переменные передавать отдельно. А БД уже потом сама разберется, что и как форматировать.

    В принципе, mysqli умеет так делать, но не так удобно как PDO. Поэтому при возможности вместо нее лучше использовать PDO:
    $stmt = $pdo->prepare("SELECT * FROM table WHERE name=? or name=?")
    $stmt->execute(["Vasya", "Д'Артаньян"]);
    $rows = $stmt->fetchAll();
    - и получить, в итоге, готовый массив с данными, которые вернула БД.
    Если же возможности нет, то кода придется написать чуть побольше
    $stmt = $mysqli->prepare("SELECT * FROM table WHERE name=? or name=?")
    $stmt->bind_param("ss", ...["Vasya", "Д'Артаньян"]);
    $stmt->execute();
    $rows = $stmt->fetch_all(MYSQLI_ASSOC);


    Но при этом всё равно никакой тебе возни с кавычками, слешами, real, escape, и прочей ерундой. Просто, быстро, лаконично и безопасно.
    Ответ написан
    4 комментария
  • Перейти с Java Android на PHP?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Да что за миф то такой из 10-х годов о низком пороге в php? Низкий порог в сравнении с чем? С нейронными сетями на Python и C++ ?? Еще скажите, что на нем только говнокод и получается.
    Да, вы сможете написать что-то простое на php без глубоких знаний, но то что вы сможете написать не будет рассматриваться никак! От джунов сейчас требуют знание mvc, классов, одного фрэймворка, mysql, работу с pdo, знание json, умение работы c api и ее разработки, да еще желательно портфолио и пол годика офф. работы.
    Выход на рынок php не проще, чем на рынок java android, django, node js или js.
    Ответ написан
    5 комментариев
  • Как связывают два микросервиса по GRPC?

    @deliro
    Окей гугл "gRPC" -> grpc.io -> Get Started
    Ответ написан
    Комментировать
  • Насколько адекватно требовать домашнего развития от разработчиков?

    Zoominger
    @Zoominger
    System Integrator
    снг-бодишопов перфоманс ревью опен-сорс

    Лец ми спик фром май харт.

    По теме:
    1). Каким образом вы сделали данные выводы? Вы описываете исключительно свои частные субъективные наблюдения или у вас есть какие-нибудь источники, может, HR-handbook, где прямо описывается практика вешания ярлыков? Не сочтите за какую-то грубость, просто так можно что угодно утверждать.

    2). Вопросы, которые вы перечислили, вполне нормальные, мне на каждом интервью их задавали. Так проверяется мотивация, любовь к своему делу, уровень развития собеседника.

    3). Развиваться на и вне работы - рядовое качество нормального айтишника. Если кто-то говорит, что уже достиг каких-то высот и дальше ему развиваться некуда, то этот человек либо лжёт, либо скоро устареет и потеряет ценность. Область IT меняется постоянно и относительно быстро и изучать что-то самому - суровая необходимость, ибо на ряд специальностей нет образовательных программ даже на Западе.
    Ответ написан
    3 комментария
  • Насколько адекватно требовать домашнего развития от разработчиков?

    @majstar_Zubr
    C++, C#, gamedev
    Это вполне адекватно, потому что в таком случае работодатель преследует лишь одну цель - помочь вам как можно скорее найти другое место работы.
    Ответ написан
    1 комментарий
  • Почему когда compare изменить на что-то другое, то код не работает?

    AnatolTh
    @AnatolTh
    Full Stack Developer
    Потому что экземпляры Collator наследуют только одно свойство из своего прототипа:

    Intl.Collator.prototype.compare
    Геттер; возвращает функцию, сравнивающую две строки согласно порядку сортировки этого объекта Collator.

    И только один метод:

    Intl.Collator.prototype.resolvedOptions()
    Возвращает новый объект со свойствами, отражающими локаль и опции сравнения строк, вычисленные при инициализации объекта.

    По этому пользоваться можно только compare и resolvedOptions().

    Либо можете добавлять свои свойства/методы
    Ответ написан
    Комментировать