• Как организовать работу с mongodb и докером на локалке и сервере?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ни в коем случае не пушить туда-сюда.
    • В идеальном случае ваш проект должен поддерживать миграции:
    • Каждая ревизия кода, которая нарушает совместимость с БД относительно предыдущей, должна содержать скрипт миграции. В этом скрипте создаётся структура, модифицируются старые данные, переименовываются поля и т.д. Иногда такие скрипты делают двунаправленными, чтобы поддерживать обратные миграции.
    • В БД нужно хранить версию или номер ревизии, которой соответствует текущее состояние БД.
    • При запуске приложения нужно проверять версию и выполнять цепочку миграций, необходимых для приведения версии к требуемому состоянию.

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

    Монга - это schema less БД, которая толерантно относится структуре коллекций и не валится при запросе несуществущих полей. Нужно стараться писать код максимально толерантно к отсутствию наполнения БД.

    В любом случае у вас в БД есть обычно:
    1. структура (в случае монги, как я уже сказал, это не так важно)
    2. справочники
    3. пользовательские данные
    4. производные данные (кэш), которые можно безболезненно удалить, а затем они перегенерятся сами по мере запросов.

    Нужно писать код так, чтобы он всю структуру и технические справочники, отсутствующие в предоставленной БД и необходимые для работы, умел инициализировать сам. Или, на худой конец, сделайте команду или скрипт init_db.

    Если какие-то тестовые данные нужны для тестов или отладки, то можно сделать скрипт, который заполнит БД ими. Это называется фикстуры.

    Никогда не храните код в БД. Всякие хранимые процедуры и прочее в БД - это зло. Код должен быть в системе контроля версий, а БД к этому не приспособлены. Если уж нужны хранимки, то храните их в системе контроля версий и заливайте их в БД при инициализации или миграциями.
    Ответ написан
    2 комментария
  • Как работает Вебвизор от Яндекса?

    Вопросов у Вас много, что то Вы ответили сами.
    Часть работает на JavaScript часть на серверном языке, поскольку JS шлёт данные о поведении клиента на сервер через WinSocket или Ajax. Там они сохраняются. Есть настройка у вебвизора она позволяет DOM дерево текущего состояния страницы на сервере сохранить, то есть посетитель берёт HTML и шлёт его на сервер по JS а на сервере уже сохраняется. Есть другой вариант когда робот приходит и берёт HTML текущего состояния страницы, то есть тогда по JS он от пользователя не передаётся, но тут может быть разница в информации на странице, поскольку пользователь мог быть авторизован, а робот яндекса если придёт авторизован не будет. Тут я описал почему в iframe отображается та версия страницы которая была при посещении(но повторюсь вроде как есть какая то настройка, можно отключить этот момент и будет отображается новая версия). Ещё моё предположение что iframe вообще нужен чтобы имитировать размер окна пользователя который заходил.
    Касаемо курсора JS не торгает Ваш курсор, а использует рисование чтобы показать как во времени двигался курсор. А нарисовать можно хоть круг, хоть квадрат, хоть указатель аналогичный курсору - так что ответ Вам, вебвизор при воспроизведении Ваш курсор не трогает.
    Считаю что зря Вы отметили вопрос как сложный. Если примерно ответить как работает или предположить как то достаточно понятно по-моему. Я не говорю о взять и сделать аналог. В любом случаи это бы уже была задача не для сайта вопросов.
    В комментариях пишите если что то ещё по вопросу нужно пояснить.
    Ответ написан
    Комментировать
  • Как сайты понимают, что их посетил бот на Selenium, а не реальный юзер?

    alekciy
    @alekciy
    Вёбных дел мастер
    Вариантов много. Из простого:
    • по User-Agent
    • по IP адресу через отслеживание количества запросов с одного адреса
    • по используемым публичным прокси (многие такие сервисы явно сообщают, о себе кто они)
    • и т.д.

    Из сложного:
    • отслеживают перемещение мыши
    • ведут аналитику на о типичных поведениях пользователя и ищуют анамалии


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

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добавлять товары или записи SQL запросом не лучшая идея, так как в этом случае вы обходите ВП.
    Лучше использовать возможности Woocommerce REST API. Или как вариант плаоин WP All Import + Woocommerce Addon и импорт из CSV файла.
    Ответ написан
    Комментировать
  • Как лучше реализовать линии из данного макета?

    @Lord_Dantes
    дальнейшей адаптивности

    Вопрос задайте дизайнеру, и поверьте вам здесь не о чем беспокоиться.
    Ответ написан
    Комментировать
  • Как правильно сверстать блок?

    space2pacman
    @space2pacman Куратор тега CSS
    Просто царь.
    https://jsfiddle.net/jo28yc35/1/
    "Австралийский флекс"
    Ответ написан
    1 комментарий
  • Как можно сверстать такие связующие линии между блоками?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Так как это элемент украшения, то как и все элементы украшения делайте через before\after + у вас повторяющиеся "украшалки", можно создать 2 отдельных компонента следуя практики dry. Делаете 2 стилевых компоненты = 1 горизонтальная линия dashed, вторая полукруг dashed, горизонтальная у вас помещается за блоком с помощью before, а полукруг вы используете в одном месте обычные, а второй через rotate.
    Ответ написан
    2 комментария
  • Standalone Система задач для одного разработчика?

    @dzhebrak
    Рекомендую попробовать Kanboard https://kanboard.org

    По вашим критерям:

    - для каждой задачи можно указывать планируемое и фактически затраченное время (как сразу, так и рассчитать с помощью счетчиков)
    - есть возможность настраивать (и создавать свои) связи между задачами (например, blocks|is blocked by; is a child of|is a parent of). С помощью плагина можно отобразить диаграмму Ганта https://github.com/kanboard/plugin-gantt , но у меня она не прижилась.
    - есть возможность создавать проекты (аналог доски в trello), при этом каждый проект можно настроить отдельно
    - есть возможность смотреть отчеты о работе, например, "Task Distribution (By Column)", "Cumulative Flow Diagram", "Burn Down Chart", "Average Time Spent Into Each Column", "Average Lead and Cycle time"
    - функционала, на мой взгляд, достаточно, и в тоже время автор проекта не хочет делать из проекта комбайн на все случаи жизни. Есть api, и можно писать свои плагины, если чего-то не хватает.
    - открытый исходный код https://github.com/kanboard/kanboard . Проект написан на PHP, регулярно обновляется.

    В документации https://docs.kanboard.org/en/latest/user_guide/ind... можно посмотреть другой функционал. Дизайн изначально не самый привлекательный, но подкорректировать его достаточно просто, и к тому же на github есть готовые темы.

    PS. Если будете устанавливать, то лучше сразу используйте mysql или postgresql, а не sqlite, т.к. на последней не поддерживается (самой базой данных, т.е. это не проблема проекта) некоторый функционал (например, не работает регистронезависимый поиск).
    Ответ написан
    Комментировать
  • Standalone Система задач для одного разработчика?

    @psy667
    Node.js backend developer
    Попробуйте https://www.notion.so/
    Он простой и его легко настроить под себя.
    Ответ написан
    Комментировать
  • Standalone Система задач для одного разработчика?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Ответ написан
    Комментировать
  • Оцените дизайн будущего проекта?

    joko_pain
    @joko_pain
    Грешу веб-разработкой и не много дизайном
    Я конечно не великий дизайнер, но буду более многословен чем мои коллеги так сказать.

    Для начала вот что я думаю о текущем дизайне:
    1. Мне кажется что цветовая палитра не плоха, за исключением блока с цитатой, на странице "About", градиент слишком резкий и чёрный цвет шрифта никак не подходит
    2. Шапка слишком простая, попробуйте добавить анимированный фон/слайдер или думаю тут отлично будет смотреться посимвольный вывод "Please rate this page", можете и скомбинировать, но не перегружайте.
    3. Секция "Popular articles". Идея чередовать позицию изображения и карточки в целом выглядит не плохо на бумаге, но после реализации становится понятно: "что-то не так", думаю и вы смотрели на них и думали: "Вроде не плохо, но что-то не так" чуть подробнее об этом будет ниже. Так же тут как по всему сайту есть ещё проблема которую я так же опишу ниже
    4. Градиентный фон "пред-подвальной" части, абсолютно не вписывается в цветовую палитру, я считаю что лучше будет сам подвал сделать больше по высоте и информацию "Have any questions?" и "myemail@gmail.com" перенести в подвал(футер), а отступ сверху соц. иконок в подвале сделать больше раз уж вы дали им такую большую тень при наведении.
    5. Страница "articles". сами по себе такие карточки, не новы, и их давно и успешно используют, тут я лишь хочу отметить, что не стоит делать тень по умолчанию как и тень при наведении столь явной, попробуйте сделать её чуть мягче, и было бы не плохо добавить в них ещё и информацию о дате, авторе, категории и приправить всё это иконками.
    6. Страница "Interesting" по мимо блока с цитатой, о котором я уже говорил, хотелось бы отметить что вы выбрали оттенок синего для тега "b", это не очень хорошая идея так как веб научил людей что текст с оттенком синего это чаще всего ссылка, и человек инстинктивно наводит на нею ожидая этого.


    В целом если это работа из числа первых, то поверьте мне могло быть и хуже))

    Теперь хочу дать несколько советов и так вот они:
    • В вашем дизайне повсеместно нарушается одно из основных правил - "правило внутреннего и внешнего", обязательно прогуглите его, материала на эту тему более чем достаточно, как только вы начнёте его применять сами увидите как преобразится сайт, его стоит применять не только на "текстовых блоках но и по отношению ко всем элементам на странице"
    • Также советую прочитать или посмотреть на ютубе видео про типографику в граф. дизайне. Например это в нём более чем достаточно информации для старта и опять же не забывайте объединять полученные знания.
    • То о чём я говорил когда описывал секцию "Popular articles". Есть в дизайне такое понятие как "F-паттерн", не буду тут его описывать, есть люди что сделали это за меня и сделали гораздо лучше, когда вы прочтёте про него и объедините эти знания с правилом о котором я говорил выше, вы поймёте, что было не так и почему оно казалось не правильным.
    • И последнее, не вполне уверен, но кажется что этот сайт вы верстали что называется "из головы". Мой личный опыт показывает что всегда лучше потратить день а то и два на дизайн в программе которая для этого создана и потом просто верстать по шаблону. Для это есть уйма инструментов: Photoshop, Illustrator, Sketch, XD, Figma и тд. Лично я пользуюсь Figma, она бесплатная, доступна всех устройствах и даёт не плохой функционал.


    Так или иначе, я уверен найдётся люди что со мной не согласятся, но это что называется ИМХО =)
    Надеюсь смог вам помочь. =)
    Ответ написан
    Комментировать
  • Какое ПО использовать для почты на своем сервере?

    @q2digger
    никого не трогаю, починяю примус
    postfix - smtp server
    dovecot - imap/pop
    amavis + clamav - антивирус/антиспам
    для личного использования - достаточно. еще можно какой то greylist прикрутить.
    Ответ написан
    Комментировать
  • Отличие сеттеров от геттеров?

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

    Предназначение геттеров и сеттеров в языках с динамической типизацией(ваш случай) в том чтобы иметь возможность строго указать тайп хинтом, какой тип значений может принимать поле.
    При статической типизации в сеттерах остаётся возможность контролировать, как происходит запись и выдача значений в то или иное поле, если вы хотите чтобы запись и чтение значений проходили с дополнительной обработкой. Например при setPassword можно было бы сразу хэшировать значение пароля.
    Ответ написан
    2 комментария
  • Как написать цикл for с return?

    Dark_Scorpion
    @Dark_Scorpion
    return this.videoList.filter ( v => {
      return v.status === 'done' ? false : true;
    })
    Ответ написан
    1 комментарий
  • Как правильно сделать адаптивную шапку на сайте с точки зрения SEO?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Здравствуйте.
    Конечно, идеальный вариант - обойтись одной разметкой и для десктопа, и для мобильных устройств. Но в ряде случаев это невозможно.

    Тут встаёт выбор, чем нам пожертвовать:
    • можно принести на алтарь скорость разработки, сложность дальнейшей поддержки и UX, с помощью JS отслеживая размер экрана и на лету перестраивая шапку из одной разметки в другую;
      • Поисковики довольны - есть один контент;
      • Пользователи не очень довольны - они эти перестроения могут заметить, либо дольше ждут загрузки;
      • Разработчики очень недовольны (особенно когда год спустя клиент приходит и говорит "а давайте сюда вот добавим вот такой блок" и надо вспомнить логику всех этих хитрых переставлений).

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


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

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

    Делайте как вам и пользователям удобнее, у поисковиков есть проблемы гораздо более серьёзные, чем дважды повторённый логотип в соседних блоках.
    Ответ написан
    3 комментария
  • Как организовать систему платежей на своем сайте для других поставщиков?

    @boss_lexa
    ваше ооо/ип может заключить с банком (или платежным сервисом) договор об информционно-техническом взаимодействии, в результате чего:
    1) просите поставщика заполнить данные анкеты для заключения договора на эквайринг
    2) банк заключает с поставщиком договор эквайринга (на каждого поставщика = отдельный мерчант аккаунт)
    3) вы осуществляете техническое подключение каждого поставщика между платежной системой банка и вашим интернет-магазином
    4) банк будет напрямую выплачивать деньги каждому поставщику

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

    лучший вариант = агентский договор
    1) вы подключаете на свое ооо/ип один мерчант аккаунт у банка
    2) с каждым поставщиком заключаете агентский договор (договор оферта на сайте например), по которому каждый поставщик компенсирует расходы за эквайринг + за ваши услуги вы берете комиссию например 1%

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

    Также имея весь оборот только на 1 аккаунте тарифы на эквайринг можно получить меньшую комиссию

    Также клиенту не нужно думать о заполнении анкет на эквайринг и ждать одобрения службой безопасности банка. Ему нужно только предоставить вам ИНН + БИК + номер расчетного счета -этого достаточно вам чтобы сделать поставщику выплату по агентскому договору-оферте.

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

    например если у вас ип на усн 6%
    покупатель купил у поставщика что-то за 1000 руб
    банк-эквайринг забрал, например 3% вам на счет поступило 970 руб
    вы перечислили поставщику его деньги за вычетом вашей комисси, например 1% и эквайринга = 960 руб
    у вашей компании возник доход 10 руб, с него вы должны заплатить налог усн 6% = 60 копеек
    Ответ написан
    3 комментария
  • Обрабатывает ли php условие полностью?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    проверить своё предположение ты можешь очень просто - всего лишь внеся ошибку синтаксиса в код внутри else. Если РНР "не читает" его, то ошибка не появится.

    Но, разумеется, ошибка будет. потому что у тебя неверное представление о работе интерпретаторов.

    Разумеется, РНР сначала читает весь код. И только после этого начинает исполнение.
    Чтобы не "увеличивать загрузку страницы" существует такая вещь как "опкод-кэш", который сохраняет уже "прочитанный" РНР код в памяти.
    Ответ написан
    1 комментарий
  • У нас есть фрагмент фото. Как найти его координаты на полном фото?

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