• Как лучше хранить контент в БД: HTML vs MarkDown?

    shai_hulud
    @shai_hulud
    > и возникла идея хранить текст в markdown.
    И решение как сконвертировать в MD уже найдено и оно работает на всех статьях?
    > Вопрос в том, будет ли от этого пользы?
    > Если перенесём всё на markdown, они займут меньше места в БД?
    Стоит проверить с помощью того решения для конвертации что у вас есть. Обычно занимает меньше места.
    > При выдаче на сайте текста статьи, как конвертировать Markdown в HTML?
    Написав код конвертации из MD в HTML. На сервере.
    > Если да, то это большая нагрузка на сервер? (сайт довольно посещаемый)
    В любом случае никто в здравом уме не будет сервить HTML прямо из БД, по любому есть вытесняющий кеш на приоритетах, в котором живет этот HTML и раздается людям. Так что конвертация HTML->MD будет происходить не каждый запрос.

    Если делать на клиенте, то поисковики увидят plain text, а не маркдаун, MD очень похож на обычный текст, так что трагедии не будет. Но у него нет форматирования (заголовки, абзацы) понятного для поисковиков, так что это для них будет как каша из текста.
    Ответ написан
    1 комментарий
  • Какой язык (или их совокупность) с самым низким порогом входа для фриланса?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сам изучаю Python, а именно машинное обучение, очень нравится именно эта сфера.
    Покажите любой Ваш проект, реализованный с использованием НС.
    Простая задача: создать самообучающегося бота для игры в "крестики-нолики".

    Как только Вы сможете решать задачи направленные на оптимизацию бизнеса через создание верного алгоритма (нейросети), язык программирования будет Вам уже не особо нужен.
    Ответ написан
    Комментировать
  • GPL v3 запрещает установить рекламу AdSense?

    GPL не ограничивает использование продуктов, в т.ч. коммерческое и возможности доработки под собственные нужды, в т.ч. коммерческие.
    Ответ написан
    Комментировать
  • Альтернатива EAV, структура базы?

    alekciy
    @alekciy
    Вёбных дел мастер
    Структура базы. На тестах 250 тыс. товаров с 10 тыс. параметров (10 параметров на один товар) отрабатывает менее чем за 1 мс на posgresql, так что самым тормозным местом будет явно не база.

    >Хотелось бы знать, чем же все таки это плохо.
    Ни чего плохого в EAV нет. Если под текущий размер базы выделены достаточные аппаратные ресурсы и в базе в нормальном виде расставлены индексы, то самым тормозным местом будет явно не база. Так что «советчиков» которые без конкретных аргументов так говорят можно сразу спокойно слать лесом.
    Ответ написан
    5 комментариев
  • Альтернатива EAV, структура базы?

    @vladar
    Вообще, лучшая альтернатива EAV — schemaless-базы, тот же MongoDB, например. Другой вариант — использовать SQL (EAV или отдельные таблицы) + schemaless поисковик (например, elasticsearch).
    Ответ написан
    Комментировать
  • Что не правильно в запросе PostgreSQL?

    @hell
    "В его личном деле было написано - ОСОБЫЕ ПРИМЕТЫ - все" (Dellamorte Dellamore)
    1) Мне кажется, что вам стоит серьезно переработать структуру БД
    2) Перефразируем ваш запрос:
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT DISTINCT pc.product_id
          FROM product_characteristic pc
          WHERE pc.product_id = p.id
            AND pc.characteristic_id= ANY   (2,     19,        20)
            AND pc.selected_option_id=ANY (129,   2001569,   2001570, 2001571)
         )

    Или, "совсем по русски"
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT DISTINCT pc.product_id
          FROM product_characteristic pc
          WHERE pc.product_id = p.id
            AND (pc.characteristic_id =2 OR  pc.characteristic_id =19 or pc.characteristic_id =20)
            AND (pc.selected_option=129 OR pc.selected_option=2001569 OR pc.selected_option=2001570 or pc.selected_option=2001571)
         )


    То есть вместо пересечения характеристик, вы выбираете их объединение
    Ну и, поскольку подзапрос вообще говоря самостоятелен, и независим от внешнего запроса, я не очень понимаю, что у вас в нем делает p.id и как оно вообще будет работать.
    3) Если попробовать написать то, что вы хотели, получится примерно следующее
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT pc.product_id
          FROM product_characteristic pc,  product_characteristic pc1,product_characteristic pc2,  
          WHERE pc.product_id=pc1.product_id and pc.product_id=pc2.product_id
            AND pc.characteristic=2 AND pc.selected_option_id=129
            AND pc1.characteristic=19  AND pc1.selected_option_id=2001569
            AND pc2.characteristic=20  AND pc2.selected_option_id in  (2001570, 2001571)
         )

    Во-первых - убираем DISTINCT из подзапроса - он даст нам перечень product_id, и даже если они будут повторяться, основной запрос выберет только уникальные строки

    Во вторых - добавляем еще два псевдонима к таблице product_characteristic
    для каждого псевдонима ставим свое условие по id характеристики и id выбранной опции

    Ну и сообщаем, что искомый product_id для всех таблиц product_characteristic у вас одинаковый.

    Если у вас selected_option_id уникален для каждой опции, можно исключить из запроса поле selected_option_id
    тогда получится примерно так:
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT pc.product_id
          FROM product_characteristic pc,  product_characteristic pc1,product_characteristic pc2,  
          WHERE pc.product_id=pc1.product_id and  pc.product_id=pc2.product_id
            AND pc.selected_option_id=129
            AND pc1.selected_option_id=2001569
            AND pc2.selected_option_id in  (2001570, 2001571)
         )
    Ответ написан
    5 комментариев
  • В каком стеке web технологий одновременно: высокий порог входа, высокие зарплаты и в целом не проблема найти удалёнку?

    Robur
    @Robur
    Знаю больше чем это необходимо
    высокий порог входа больше не в технологиях а в решаемых задачах.
    Если вы предлагаете услуги создания лендингов - то порог (и оплата) на уровне лендингов и не важно на чем вы его запилите

    Развивайтесь в сторону создания более сложных вещей - там и технологии поймутся.
    Более сложные - это всевозможные веб-приложения, забудьте о сайтах.
    А приложения могут быть уже какими угодно и с большим разбросом по сложности - может быть CRUD админка которую любой индус накидает, а может быть какая-нибудь замороченная система бизнес-аналитики, где кнопки в браузере - это только 10% от всего функционала, и это одна из причин почему ищут фуллстеков. Фуллстек в состоянии взять фичу и сделать её полностью, а не "накидать кнопок и ждать бекенд" или "сделать апишку и отдать фронту".
    Ответ написан
    14 комментариев
  • Не умею верстать под IE. Есть ли какие нибудь гайды или видео по верстке под это кривое убожество?

    @painmaker
    ИМХО, если это заказ от клиента - разубедить его поддерживать ИЕ и:
    <!--[if IE]> Да скачай ты уже нормальный БРАУЗЕР!!!11 -->
    Ответ написан
    3 комментария
  • Как проверить сайт на адаптивность?

    В инструментах разработчика в браузерах есть адаптивный режим. Можно выбрать по модели девайса, либо указать размер экрана руками.
    Ответ написан
    1 комментарий
  • Как объединить два объекта javascript с заменой значений по ключу, если он существует?

    В jquery есть для этого функция extend(), если использование этой библиотеки в проекте допустимо.
    Ответ написан
    Комментировать
  • Как сверстать этот язычок?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Как сделать такие переходы между экранами?

    @Listed_Illusion
    на глаз - блоки по 100vh и ивент листенер на событие мыши с +-100vh+transition:transform.
    Ответ написан
    Комментировать
  • Как создать превью страницы сайта?

    AItF4
    @AItF4
    Помог ответ? Отметь решением.
    Геннадий Уваров, чтобы это сделать, вам нужно добавить в head страницы теги:

    <meta property="og:title" content="">
    <meta property="og:site_name" content="">
    <meta property="og:url" content="">
    <meta property="og:description" content="">
    <meta property="og:image" content="">

    Далее нужно каждому мета-тегу заполнить параметр content=""

    За что отвечает каждый тег:
    og:title - заглавие страницы, он же тайтл. Можете скопировать из тега title.
    og:site_name - название сайта.
    og:url - ссылка страницы, где вы добавляете этот код. Если это однастраничник, то это просто ссылка на главную сайта. Если сайт на CMS или самописный и у него много страниц, то вам придется для каждой указать свой тег, со своей ссылкой.
    og:description - описание страницы. Можете скопировать из тега description для страницы, на которую добавляете теги.
    og:image - ссылка на картинку, что характеризует страницу. Можете указать ссылку на лого сайта, или нарисовать конкретную картинку для этих целей.
    Ответ написан
    2 комментария
  • Как создать превью страницы сайта?

    Eridani
    @Eridani
    Мимо проходил
    Opengraph разметка
    P.S. Открыли бы код, посмотрели, далее по совпадениями берем код и лезем в гугл.
    Ответ написан
    Комментировать
  • Как умножить переменную на 100% в php?

    Умножить на 100%, видимо, от упомятого аргумента $ipsa3 так:

    $result = $ipsa3 * ((100 / 100) * $ipsa3);
    // или просто
    $result = $ipsa3 * $ipsa3;

    С переменной процентов
    $percent = 100; // сколько процентов
    $result = $ipsa3 * (($percent / 100) * $ipsa3);

    Про проценты

    Проценты это доля от чего-то. Число 1/100 (сотых долей чего-то). Целое что-то это всегда 100% этого чего-то.
    50% это 50/100 или половина чего-то, что-то * 0.5
    Задача «умножить на 100%» хоть и звучит несколько странно, но выполнима, если понять, на 100% от чего просят умножить. Т.е. на целое что? Тут предполагаю, что на целую эту же переменную $ipsa3
    Ответ написан
    2 комментария
  • Оцените пожалуйста верстку?

    vilka_2009
    @vilka_2009
    Верстаю
    1) Тег section не в правильном месте используешь. Он означает что-то более глобальное и общее.
    <div class="limpon-is">
            <div class="bg-color"></div>
            <div class="squares-bg"></div>
            <div class="wrapper">
                <div class="brandon-img"></div>
                <section class="limpon-text">
                    <div class="small-button"></div>
                    <h3>Limpon Is Suitable For<br> Anytype LandingPage</h3>
                    <p>Lorem ipsum...</p>
                    <a href="#" class="btn btn230blue">get started now</a>
                </section>
            </div>
        </div>

    Например тут section-ом должен быть блок с классом ".limpon-is", а у тебя просто его текстовая часть. Он должен объединять в себе весь логический блок, пусть в нем даже есть какие-то декоративные блоки.
    2) Так же, я бы не стала делать такие декоративные блоки (.bg-color, .squares-bg) и декорировала псевдо-элементами, потому что они не несут никакой смысловой нагрузки, в отличие от скриншотов и иконок.
    3) .testi-bg - почему картинкой, а не css-ом? если что-то можно верстать, то нужно верстать. Например, радиокнопки в форме - это обычно кружок в кружочке. Это точно не стоит лишних обращений к серверу за картинкой, их отрисовка и хранение. Здесь тоже не вижу никакого смысла делать вместо фона с закруглением - картинку.
    4) .review-block1 - Вот таких классов не должно быть ни в коем случае, .review-block - таких тоже лучше избегать. Это все равно что диву назначить просто класс block. Див - это же итак блок. Или еще круче div с классом div. Будет вообще шикарно.
    5) в blockquote в твоем случае излишне вставлять параграф .
    6) .review-block - фотографию автора обзора нельзя делать псевдо-элементом. Это не просто декоративный элемент, это как имя автора отзыва и относится не к самому блоку, а к его содержимому. Поэтому должен быть тег с классом .author-photo, например.
    Как лучше делатьь:
    <div class="review">
                <blockquote>It is a long established fact that a read her will be distracted by the readable content of a page when looking.</blockquote>
                <div class="review-author">
                    <img class="author-photo" src="image.jpg" alt=""/>
                    <span class="author-name">Rolin B. Mirano</cite>
                    <cite class="author-company">ceo, uihub</cite>
                </div>
        </div>

    Тут мы объединяем смысловые элементы одним родителем .review-author
    7) .plans-header - зачем тут делать ширину блока? Излишне.
    8) Список услуг в тарифах должен быть списком, а не одним параграфом. Жирный минус!
    unexceptable

    hqdefault.jpg
    9) Опять же, список тарифов - это section. А у тебя этим тегом каждый тариф выделен. ".team-list" - это не section. ".our-team" - это section.
    10) .team-plus - мой совет: не парься высчитыванием радиуса в пикселях. когда тебе нужно сделать круг. Просто border-radius: 50%, можно 100%, можно 9999рх. В любом случае, если нужно будет поменять размер круга, то не нужно будет менять размер радиуса.
    11) Такие штуки как .team-position - это не параграф в тексте или статье. Поэтому не используй тег пожалуйста. Используй тег .
    12) При желании в форме обратной связи можно оформить текст авто-заполнения, чтобы не было сильных отличий.
    13) В любом поле формы должен быть padding, как левый, так и правый. У тебя ни в одном поле нет правого падинга. Поэтому при длинном тексте он наедет на иконку. А длинным может быть и фио, и почта. А не только текст в текстареа.
    5d27626ad09e1936454445.png
    5d2764e97c3cb017292066.png
    14) Кнопочка "submit now" - иконка должна быть псевдоэлементом у текста. Иначе если текст поменяется придется и ее двигать.
    15) .foot-so - не делай сокращенные имена классов. Тут невозможно понять что это. Ступня?! footer-social, хотя бы.
    16) Предпочтительнее все таки футеру тоже назначать класс. footer.footer получается
    17) На ссылках хочется эффектов наведения (кроме cursor: pointer), а на кнопках - плавности наведения (transition).
    18) .subscribe button - попробуй border-radius: 9999px. Лайфхак, если радиус в 2 раза меньше высоты кнопки ;)
    19) А что это так? Почему только ко второму заголовку такое правило?
    .text-scroll h4:nth-of-type(2) {
        margin-top: 27px;
    }

    20) Центрируем флексами без подгонки пикселей отступов.
    .burger-areal {
      display: flex;
      justify-content: center;
      align-items: center;
      cursor: pointer
    }
    .burger {
      width: 30px;
      z-index: 333;
    }
    .burger span:last-child {
      margin-bottom: 0;
    }


    Надеюсь ты не примешь критику близко к сердцу, а сделаешь из нее правильные выводы. В основном, честно, мне все очень понравилось. Все замечания чисто на опыте. Удачи тебе в развитии!
    Ответ написан
    4 комментария
  • Оцените пожалуйста верстку?

    Chefranov
    @Chefranov
    Новичок
    • Не хватает transition у кнопок
    • У главного меню нет ховеров
    • Блок с цифрами хорошо бы анимировать
    • Нет адаптива под устройства меньше iPhone X
    • Хорошо бы добавить плавный скролл к главному меню
    • По кнопке Free Trial и Choose plan по идее должен быть pop-up
    • В IE верстка кое-где ломается
    • Что будет если добавить еще членов команды или отзывов клиентов?
    • Есть кнопка для воспроизведения видео, но никак не работает
    • Блок с скриншотами по идее должен быть слайдером
    Ответ написан
    2 комментария
  • Как организовать структуру базы данных для характеристик товаров магазина?

    @art_karetnikov
    Лучший мой проект: Мобильный банк Сбербанка РФ.
    Доброго. Что ж тут думать, это ж не шахматы. Вот у вас есть условно 1000 свойств товара. У некого товара из них заполнено всего 3. Остальные хранить пустыми, разумеется, не нужно.

    Что нужно - а очень даже просто, следите за рукою:

    Берем id товара, условно 1189. Берем три id свойств товара, 11, 22, 33. Заводим таблицу с полями:

    Id_ProductProperty int
    Id_Product int
    Id_Property int

    И вот сюда аккуратно кладем:

    1 1189 11
    2 1189 22
    3 1189 33

    Всё. Есть у вас свойство - оно в этой таблице, а значит, True. Нет свойства - нет его в этой таблице.
    Таблица полностью интовая, еще индексы ставите, как положено, на join поля - и все летает.
    Ответ написан
    2 комментария