• Как правильно хранить image на сервере (в mysql)?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Хранить тело бинарного файла в базе — идея ниже среднего и оправдана в редчайших случаях.
    Самым распространённым способом сейчас можно назвать использование S3-compatible хранилищ: просто загружаем пользовательский файл туда и храним идентификатор/urn файла.
    Ответ написан
    3 комментария
  • Два одинаковых товара, но разного цвета. Как отобразить это в реляционной модели?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    select 
        p.name, 
        group_concat(case when a.name = 'color' then pa.val end) colors
    from products p
    join products_attributes pa on p.id = pa.product_id
    join attributes a on a.id = pa.attribute_id
    group by p.id, p.name;


    https://sqlize.online/sql/mysql57/41ca313cb32e2f96...
    Ответ написан
    Комментировать
  • Как определить объем поддерживаемых браузеров в компании при разработке сайтов?

    @alexalexes
    Берете статистику использования браузеров в проектах, которые охватывают основную аудиторию.
    Смотрите наиболее старые версии браузеров, которые используют более 1% пользователей - это будет нижняя планка поддерживаемых браузеров. Узнаете названия движков этих браузеров и их версии - эти данные вписываем в тех. задание.
    Через год снова смотрим статистику, и примечаем, как изменились версии, какие версии ушли ниже 1%.
    Если ваш начальник или какой-то ключевой пользователь, находящийся в этом 1%, упорно сидит на старом браузере, то этот момент прописываем отдельным пунктом в ТЗ - также регулярно интересуемся, не изменились ли у него предпочтения, чтобы занести эти изменения.
    Ответ написан
    Комментировать
  • На чём делать сайты?

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

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    $words = ['key1', 'key2', 'key3', 'key4'];
    
    $str = 'key1 bla';
    
    foreach($words as $word) {
        if(strpos($str, $word) !== false) {
            echo "{$word} найдено в {$str}\n";
        }
    }


    в php8 можно использовать str_contains()

    проверить наличие подстроки в строке можно функциями
    strpos()
    stripos()
    strstr()
    stristr()
    str_contains()
    preg_match()
    и даже прости хоспади explode()
    Ответ написан
    2 комментария
  • В чем смысл do while? Как его можно использовать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    do-while удобно применять когда например есть пользовательский ввод и есть реакция на ошибу. Где нужно ввод
    повторить. Например

    do {
      s = input("Enter your bidthday: ")
    } while(!isValidDate(s));

    Еще я использовал для простого I/O когда надо что-то по-символьно читать и проверять
    что файл не закончился (результат не отрицательный).

    В последних версиях Scala (3.x) мусье Одерский внезапно зобанил оператор цикла с постусловием.
    Я уж не помню как он это аргументировал.

    В качестве альтернативы предлагалось делать такой композитный предикат который делает
    сначала действие а потом проверяет.

    while ({ <body> ; <cond> }) ()

    Еще дальше пошел Дейкстра. Он придумал специальный вид do-while для конечных автоматов.
    Такой себе гибрид do-switch-case-while. Где можно как в DSL описать исходящие переходы.
    Правда я не помню где он его реализовал.

    UPD: Ошибочка. Не Вирт а Дейстра. Путаю их.
    Ответ написан
    Комментировать
  • Как правильно приводить к нижнему регистру и сравнивать?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Ну что-ж вы так убиваетесь!? Вы же так никогда не убьётесь!


    if (mb_stripos($str1, $tags[$t][0]) !== false) {
    Ответ написан
    Комментировать
  • Как улучшить читабельность кода при большом объёме пользовательского текста?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    В коде вообще не должно быть подобного содержимого
    В ларавел это решается выносом строковых литералов в файлы перевода

    throw new Exception(__('messages.order_failed'));

    // messages.php:
    return [
        'order_failed' => 'любое количество текста',
    ]


    Наверняка в Yii тоже есть подобный механизм.

    UPD
    Упс, не дочитал. А всё из-за ваших скриншотов, отвлекли


    Используется фреймворк: Yii2. В нём есть средства интернационализации, и используя их можно вставлять идентификатор текста, вместо самого текста: Yii:t('PROVIDER_CANCEL_ERROR'), но всё же он не для таких целей предназначен.


    Именно для этого данные средства и предназначены.
    Ответ написан
    1 комментарий
  • Как создать сайт для связи двух отделов компании?

    Sanes
    @Sanes
    Любая Ticket система или CRM
    Начните отсюда.
    Ответ написан
    Комментировать
  • Как вычислить виновника из-за которого отваливается интернет с какой-то периодичностью в маленькой сети?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Такого рода проблемы все и всегда решаются однотипно.
    1. Необходимо сформулировать критерии наличия проблемы.
    Как именно пропадает интернет, насколько часто, как надолго. Это нужно для диагностики. поиска причины и определения ушла ли проблема после принятия каких либо мер.
    2. Делить проблему на части и проверять части по отдельности.
    Самый эффективный способ делить - это пополам. Отсекаем часть сети и проверяем наличие проблемы в обеих частях (если есть возможность) или в одной из частей.
    3. Когда найден минимальный проблемный участок, который уже нельзя или бессмысленно делить - заменяем его.
    4. Помним, что чаще всего сложные проблемы - это композиция нескольких более простых. которые по отдельности могут не проявляться. В вашем случае может быть проблема, связанная с нагрузкой на роутер, например, которую создает один из услов из-за плохого контакта обжима и большого объёма биттых пакетов. Устранив одну из причин, вы, может быть, сделаете проявления проблемы реже, но не устраните её полностью. К примеру, если замените ротуер, битые пакеты будут всё равно будут нагружать вашу сеть и портить ее производительность, но это будет не так очевидно. Переобжав коннектор вы избавитесь от части нагрузки, но еслив ваш ротуер работал на переделе, то лишний вафай-клиент или тяжелый видос в сети сможет его снова нагрузить до критического снижения производительности.

    Итак, пробежимся по перечисленным пунктам сначала.
    1. Критерии. Поиск критериев - это часть решения. Обычно в этом случае нуно сорать необходимую статистику. Есть куча софта, который это умеет делать, но пинг есть всегда под рукой.
    Для этой тулзы есть две полезных опции: ключ для бесконечного пинга и размер пакета.
    В разных ОС эти ключи немного разные, поэтому ищите их отдельно, у меня нет винды под рукой, поэтому не стану на этом заострять.
    Скаж лишь, что пинговать лучше большими пакетами, жалетально превышающими размер TTL, прописанный в роутере. Тогда такой пинг будет реже проскакивать в периоды хорошей связи, то есть выловит больше пролблем.
    Пинговать нужно в отдельных окнах сразу несколько хостов:
    - ya.ru - этот хост всегда отвечает на пинги и выявит проблемы с DNS
    - 8.8.8.8 - это гугловый DNS-сервер, тоже всегда отвечает на пинги, покажет, что связь с инетом есть даже если DNS, прописанныйна компе не правильно работает.
    - 192.168.0.1 - или какой там IP у вашего роутера. Нужно. чтбы отделить проблемы с инетом от проблем с внутренней связностью до роутера
    - 192.168.0.x - ip одного из компов в сети. Я обычно пингую несколько компов, доступных через баксимальное число потенциально проблемных узлов - ethernet-розеток, свичей, вайфай-соединений... Этот пинг поможет понять где проблема, во внутрисетевой связности или в последней миле.

    Учтите, что проблемы часто бывают комбинированные и каждое сочетание симптомов будет свидетельствовать о раных проблемах.
    Да, тревожным принаком может служить не только пропадание пакетов, но и скачки в длительности их возврата, особенно если такие длительности достигают 500мс и выше. Но и скачки от 3мс до 250мс тоже будут свидетельствовать о каких-то проблемах.

    Запускать пинг на всех компах лучше одновременно и на некоторое время. Например минут на 20. Потом по статистике будет видно сколько где пакетов пропало.

    2. Если критерии наличия проблемы позволяют, то можно попробовать отрубать части сети и смотреть наличие проблемы. Это я в том смысле, что если проблема происходит в среднем раз в пару-тройку часов, то отрубать на многие часы части сети при диагностикем ожет быть неприемлемым.
    Редкеи пробемы дольше отлавливать. Но напоминаю, что критерии можно детализировать, ведь если пакеты у вас пропадат относительно редко, то скачки времени их возврата могут случаться чаще и подсвечивать проблему. Также можно сделать рамер пакета близким к максимальному, это должно тоже в некоторых случаях участить проявление проблемы.
    Иногда не мешает нагрузить сеть комированием по локалке большого файла. В линуксе можнно с помощью утилиты tc послать большой поток рандомных байт на любой сокет..
    3. Плавающие проблемы случаются из-за плохого обжима, перебитого жверью кабеля, перегрызенного UTP в плинтусе, из-за умиращих конденсаторов в блоке питания роутера (БП может не выдавать необходимого при нагрузках тока, но вольтметром такая неисправность не будет различима без нагрузки). Вообще старые (да и не только) роутеры могут страдать поплывшими электролитическими конденсаторами не только в блоках питания.
    Хорошо, когда можно подменить роутер.
    4. ну с четвертым пунктом ничего не пососветуешь, только разделать и тестировать все по отедльности и в разных сочетания и да поможет нам ктулху.

    А для тех, кто дочитал этот опус до конйа - интересная задачка. Что пингуют эти команды, как и почему?
    ping 1.1
    ping 2130706433

    Тех, кто знает, попрошу не спойлерить=)
    Пусть для кого-то будет сюрпризом этот дивный мир=)

    UPD. Простите за адское количество опечаток в тексте. Писал в спешке и с непривычной клавиатуры. Исправлю всё попозже. Не ожидал, что многим ответ придётся по душе. Вроде ж накапитанил как мог.
    Ответ написан
    5 комментариев
  • Как из 1 инпута сделать сабмит и загрузку файла?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    <form action= …>
        <input name="fileskin" type="file" onchange="this.form.submit()">
    </form>
    Ответ написан
    Комментировать
  • Бизнес по доставке еды. Информационная составляющая. С чего начать?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    1. регистрируете ИП
    2. создаете сайт пусть на C# NET6
    2.1 авторизация через соц. сети + локальная
    2.2 для поисковиков Razor pages и или https://yandex.ru/dev/turbo/
    2.3 админка на минималках
    2.4 апи отображения, используются как в мобильном приложении так и в контроллерах
    2.5 оплата через яндекс пай
    2.6 подключаете jivo для быстрой связи на сайте
    2.7 апи для связи с бухгалтерией
    2.8 рабочее место оператора (создание заказа, обработка заказов)

    3. мобильное приложение
    3.1 авторизация через апи 2.1
    3.2 проверка статуса, история, горячие предложения
    3.3 интерфейс оператора, просмотр заказов, изменения статуса
    3.4 интерфейс пекаря просмотр заказов изменение статуса, каждое изменение статуса отправляет уведомление всем учавствующим в цепочке.
    3.5 интерфейс курьера
    Ответ написан
    5 комментариев
  • Почему скрипт PHP PDO не хочет получать данные из базы?

    @rPman
    Есть ли в базе данные по условию?data = :data AND ref_id = 10215.
    В data хранятся данные в формате?date("d-m-Y");.
    По коду если запрос вернет пустой результат у тебя должна быть ошибка (варнинг в логах веб сервера или консоли где выполняется код), так как $depref1 не определен.
    и т.п.
    Ответ написан
    5 комментариев
  • Какую альтернативу взять место MongoDB?


    а её заблокировали в России

    Только облачный Mongodb Atlas.

    А развернуть свой экземпляр можно без каких-либо проблем.
    Если хочется облако - можно взять dbaas у какого-нибудь провайдера.

    MySQL радикально отличается от mongodb как языком запросов, так и парадигмой.
    GraphQL - вообще даже не база данных, а только лишь протокол
    Ответ написан
    Комментировать
  • Chrome не посылает cookie с разрешенным CORS?

    OCTAGRAM
    @OCTAGRAM
    На первом снимке куки из таблицы принадлежат домену localhost, а междоменный запрос отправляется на узел что-то-там.cyclic.app. С этим запросом могут быть отправлены только куки от родного домена что-то-там.cyclic.app или наддомена (.cyclic.app)
    Ответ написан
    8 комментариев
  • Существует такое понятие, как "Ассоциативный список"?

    @igor6130
    Ну оно так и называется: ассоциативный массив, словарь, объект или даже карта.
    Ответ написан
    Комментировать
  • Есть ли смысл в 2023 году учиться вёрстке?

    Sanes
    @Sanes
    Это неразрывные технологии. Одно без другого не может существовать в настоящее время.
    Ответ написан
    3 комментария
  • Является ли чтение Readonly свойств объекта нарушением инкапсуляции?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Давайте представим объект и DTO которым пользуется объект. Если объект возаращает DTO как представление самого себя, например методом showStruct(): DTO будет ли это являться нарушением инкапсуляции?

    Я понял ваш вопрос. Смотрите. Философия ООП базируется на том что все действия с объектом должны быть санционированы языком или средой выполнения. Например в Java есть техника рефлексии которая позволяет много чего делать например менять приватные поля. Это часто используется в Mock/Mockito и я часто про это говорю. Мокито - фактически взламывает инкапсуляцию. Но это всех устраивает потому-что "тестить нуна!".
    В Java также есть технология сериализации-десериализации которая обеспечивает сохранения состояния объектов на диск или передачу их в сеть для дальнейшей работы (например пользовательская сессия прыгает между нодами кластера). И это действие (сериализация) полностью санкционировано средой и языком. Всех это устраивает. Хотя с моей точки зрения - этож капец взлом. Но зато в Java вы никогда не сделаете down-casting объекта одного типа к типу другого если иерархия этого не позволяет. Этого делать нельзя ... ну потому что это точняк нарушение ООП. И нельзя найти никакой санкции на такое странное действие. Вот в языке С++ например вы можете жонглируя указателями взглянуть в любую память своего процесса или потока и прочитать любой байт или word/dword. Что можно сделать в PHP из подобного? Я не знаю. Но новерное что в PHP много механик которые не позволяют делать хакинг когда. Вот. Поэтому ООП и считается философией программирования а вовсе не тюрьмой. Вобщем код надо писать по правилам языка и среды а не "хачить". И лучшие практики ООП они как раз стоят именно на этой идее. Кроме того - не существует единого ООП - а есть просто разные его реализации в разных языках. Короче вы не найдете самого-самого-ООП-шного языка.

    А вообще если это опнсорц - ну сделайте себе форк и меняйте что хотите в исходниках.

    И Еще пример. если объект не будет возвращать никаких данных о себе, то тогда как придерживаться принципа OpenClosed?

    Про что вообще OpenClosed? Это - расширенная трактовка ООП в части SOLID (вторая буква О).
    Означает что если вы хотите внести изменение в класс - то вы его наследуете. Например
    class BMWX5 extends BMW { .. }
    Мы ничего не нарушили. Мы не меняли свойств BMW. Мы создали новый класс BMWX5 где есть изменные методы. Оригинальный BMW мы не трогали. Все - в правовом поле.
    Ответ написан
    6 комментариев
  • Является ли чтение Readonly свойств объекта нарушением инкапсуляции?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    dto являются легчайшими объектами взаимодействия с бд, они просто по своей сути не могут содержать в себе логики, вся логика выше
    Ответ написан
    Комментировать
  • Насколько сложно устроиться во Frontend начинающему в 2023?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Как уже и ответили так же как в 2022, 2021, 2020, 2019 ...
    По своему опыту отвечу что большинство моих успешных коллег уже на 2-3 курсе работали по профильной специальности, кто в университете на кафедре, что давало нехилый буст при сдаче предметов, кто в серьезных фирмах.

    В общем рассылайте резюме, ходите по конференциям их многие фирмы устраивают в институтах или университетах.
    Ответ написан