• Как протестировать верстку для Сафари на Виндовс?

    Rou1997
    @Rou1997
    Есть же сервисы давным-давно - browserstack.com да и просто купить VPS с OS X можно, там и Safari будет, и симулятор iOS, и все, что есть на OS X.
    Еще имеет смысл установить себе старый Safari, который был для Windows, но на него не стоит рассчитывать, в нем уж слишком многое не работает.
    Ответ написан
    Комментировать
  • Не работает запрос "RESET QUERY CACHE;" Как сделать очистку кэша в Mysql 8?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0.

    https://dev.mysql.com/doc/refman/5.7/en/query-cach...
    Сложно очистить то, чего вообще нет.
    Ответ написан
    1 комментарий
  • Помрёт ли HDD при постоянной работе через USB?

    zergone
    @zergone
    дизайнер
    Мелкий правильно написал - постоянное вращение скорее всего наименьшая проблема для диска. Я встречал рекомендации отключить энергосбережение на HDD именно с точки зрения долговечности дисков, хоть они и жрут энергию.
    Я вижу скорее другие проблемы: 1) Качество переходника, который накрывшись, может утянуть с собой диск; 2) Если диск в корпусе без вентиляции, он может гораздо сильнее греться, что жизни ему не добавит; 3) И снова качество переходника, который может не сгореть, но неправильно работать, коцая данные.
    Я переходник пользовал только для подключения валяющихся старых винтов для малопользуемых бэкапов. А для работы покупал более-менее цивильные Лось и Вестерны внешние. Пока тьфу-тьфу-тьфу не подводили, только у Лося на третьем году странствий офис-дом usb3-порт сломался механически (который широкий и тонкий). Диск (оказался самсунг) до сих пор живет в десктопе.
    Смарт через юсб я встречал только у одной программы, увы не помню точно какая. Гугел!
    Ответ написан
    3 комментария
  • Помрёт ли HDD при постоянной работе через USB?

    Melkij
    @Melkij
    PostgreSQL DBA
    Регулярный старт-стоп нужен для энергосбережения - то есть может быть нужен, не факт что на регулярный старт не будет потрачено больше энергии чем на поддержание постоянной скорости вращения - в зависимости от частоты уходя в сон.
    Для самого диска - исключительно вредно. Количество циклов парковки головок ограничено возможностями механики, старт массивного массива дисков даёт заметную нагрузку на двигатель (в серверах диски не редко сыпятся именно при старте, тогда как 5 минут до выключения были живые), при выключении диск остывает, при старте резко нагревается - а температурные колебания так же вредны для механики. В отличии от поддержания постоянной скорости вращения с примерно постоянной температурой - тепличные условия.

    1) долго ли протянет мой hdd при подключении через sata-usb с учётом того, что он никогда не прекращает вращение?

    Если не помрёт БП вместе с диском - то скорей всего дольше, чем при постоянной старт-стопе.

    2) можно ли получить доступ к данным SMART при таком подключении?

    Зависит от переходника, только экспериментировать.
    Ответ написан
    3 комментария
  • Как быстрее всего импортировать базу в 700 тысяч товаров Wordpress?

    nipopadyuk
    @nipopadyuk
    Как бы странно не звучало, купить VPS.
    Стоит не так дорого. Возьмите на месяц, сделайте поддомен и делегируйте на VPS.
    Дубликатором снимите дамп сайта, поднимите на сервере, залейте товары, верните дам на основной хостинг.
    Ответ написан
    Комментировать
  • Выбор монитора для программиста, как правильно?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Согласен с benipaz - если есть место, два монитора по 24" лучше чем один 26"
    Ответ написан
    1 комментарий
  • Fillable laravel?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Эти фишки Ларавеля нужны только для очень простых rest проектов. В реальной жизни они не то что не нужны, а даже мешают, так-как create часто вызывается из разных мест и с разными параметрами. Лучше создать BaseModel, поставить $guarded = false и не париться на счет $fillable и $guarded. Так что тут либо использовать validor + $request->only, либо чуть модифицированный Request, и от него уже все остальные наследовать. А в нем метод по типу "$request->neededFields()" который отдает только нужные поля, основываясь на array_keys($validationArray)

    Надеюсь понятно. В двух словах: не используй эту хренотень.
    Ответ написан
    3 комментария
  • Можно ли использовать один метод для 2-х роутов?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Можно. Даже для трёх можно. И для десяти тоже.
    Ответ написан
    Комментировать
  • Какова политика ресурса в отношении неграмотных ответов?

    Jump
    @Jump
    Системный администратор со стажем.
    Какова политика ресурса в отношении неграмотных ответов?
    Я вот думаю что ресурс вообще не должен оценивать грамотность ответов.

    Если вы считаете ответ неграмотным - напишите в чем именно ответ является неграмотным, аргументируйте, напишите правильный ответ. И все увидят вашу аргументацию и поймут, что он неграмотный, если вы будете достаточно убедительны.
    Вот и все.

    Вообще грамотность ответа понятие субъективное и во многих случаях ее сложно оценить.
    То, что один считает грамотным, другой может считать очень неграмотным.
    Ответ написан
    Комментировать
  • Какова политика ресурса в отношении неграмотных ответов?

    Nomad_77
    @Nomad_77 Куратор тега Тостер
    Product manager at habr.com
    С другой, раньше можно было безграмотного юзера, лезущего со своими советами, просто обозвать идиотом и не париться.


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

    Отвечая по сабжу: Поскольку модераторы действительно не являются специалистами во всех областях, охватываемых Тостером, неверные ответы удаляются на основании жалоб пользователей.
    Ответ написан
    1 комментарий
  • Транзакции BD в Laravel. Какое поведение в различных ситуациях?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Не используйте ручное управление уровнем транзакции. Исключение - специфичные ситуации, где и так будет понятно, что оно нужно.

    Отвечая на вопрос, DB::transaction(callable) откатит транзакцию при exception'е, остальное (ручное) управление - ничего автоматически не делает, за исключением хендлинга нескольких специфичных ерроров, которые сбрасывают уровень транзакции сами.

    В общем в ручное управление лучше не лезть, ведь про*батся ОЧЕНЬ легко, дебажить - сложно, а лара не все просчитывает.
    Ответ написан
    Комментировать
  • Транзакции BD в Laravel. Какое поведение в различных ситуациях?

    @galaxy
    Не скажу за Laravel (не пользуюсь), но скорее всего эти функции вызывают соответствующие команды БД (BEGIN/START TRANSACTION/COMMIT etc.). Поведение будет, вообще говоря, зависеть от БД.
    Например, если код не дойдет до DB::commit();.

    Транзакция откатится (если вы, конечно, не поймаете исключение, или, например, в том же соединении с БД не начнете новую транзакцию с успешным commit)

    Если где-то в процессе снова будет вызван DB::beginTransaction() - DB::commit()...

    Тут зависит от БД. Mysql, например, при повторном BEGIN закоммит текущую транзакцию и начнет новую. Postgres выдаст предупреждение и не изменит состояние транзакции.

    Если DB::commit(); вообще никто вызывать и не собирался?

    Транзакция откатится при закрытии соединения с БД.

    Еще раз - выше написано про поведение БД, Laravel может иметь свои особенности.
    Ответ написан
    Комментировать
  • Проблемы при генерации документации doxygen для скрипта PHP?

    BOOMER_74
    @BOOMER_74
    Full-Stack разработчик
    Для PHP есть свой стандарт документирования (PSR-5), поддерживаемый многими утилитами (PHPStorm, etc.). Для генерации документации можно использовать phpDocumentor или phpDox (мне понравился phpDox, с phpDocumentor есть некоторые проблемы).
    Ответ написан
    1 комментарий
  • Как вы относитесь к использованию транзакций в Laravel?

    @xfg
    Транзакции повторяют из-за дедлоков. Это такое состояние, когда одновременно выполняются 2 транзакции и первая транзакция блокирует запись, которая нужна второй транзакции, а вторая транзакция блокирует запись, которая нужна первой транзакции. В итоге ни одна из транзакций не может завершиться. Это состояние называется deadlock. В этом случае одна из транзакций должна откатиться, чтобы другая имела возможность успешно завершиться. Так вот, эта транзакция, которую откатили попробует еще 3 раза выполниться, прежде чем окончательно вылетит с исключением.

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

    Вообще на более продвинутом уровне принято сохранять не более одной сущности (объекта) внутри одной транзакции. Таким образом вы получаете худые транзакции и отсутствие дедлоков. Производительность вашего приложения возрастет, но вместе с тем, вы получите проблему атомарного сохранения нескольких сущностей (объектов) в рамках одной бизнес-операции как это происходит в микросервисной архитектуре. Проблему можно решить использованием шаблона saga, но в целом это уже совершенно иной уровень знаний и вникать в это наверное не стоит, если вы делаете что-то небольшое.
    Ответ написан
    4 комментария
  • Как использовать save model и transactions в laravel 5?

    @SvizzZzy Автор вопроса
    Оказалось, что в моем случае нужно было явно указать имя подключения к базе. И всё заработало нормально.
    ps: rollBack(); - не пригодился т.к наверное, если $cn->commit(); не срабатывает, то все запросы отменяются.

    Мой код:

    $cn = DB::connection('ИМЯ_подкл_к_базе'); //DB_CONNECTION из ENV
    $cn->beginTransaction();
      try{
    
      //Мои запросы типа Model::where, save() и тд...
      ...
      
      $cn->commit();
    
    } catch(\Exception $e){
    
      return 'error';
    
    }
    Ответ написан
    Комментировать
  • Надёжный SSD и HDD диск?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну так извини WD Blue - десктопный диск с минимальной стоимостью, не рассчитанный на серьезную и длительную работу. Конечно 2 года немного, и это просто не повезло, но люди, которым нужны надежные диски берут диски для NAS, рассчитанные на работу 24x7, в случае с WD - это Red и Red Pro.
    Ответ написан
    1 комментарий
  • Утверждения PHP (PHP assertions)?

    Мы юзаем фреймворк onPHP, в котором присутствует класс Assert. Пользуемся не то, чтобы активно, но всё же.
    Самый типовой случай: надо проверить, что конфиг заполнен нужными параметрами. Гораздо компактнее использовать assert, вместо кучи if.
    В случае чего исключение кидается WrongStateException, а обрабатывается уж это по-разному. В крайнем случае остановка приложения и запись в лог.
    Ответ написан
    Комментировать
  • Как безопасно отправлять пользовательский текст в базу POST запросом?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед тем как что-то куда-то добавлять надо сначала разобраться что ты делаешь.
    В частности понять что браузер, веб-сервер, и база данных - это разные вещи, и для каждой нужна своя обработка данных.

    В-первых, POST запросом ничего добавить в базу нельзя.
    База вообще ничего не знает про пост запросы. POST запросом можно отправить текст только в РНР.
    А РНР уже будет добавлять в БД.

    Про HTML база данных тоже ничего не знает. Поэтому "htmlspecialchars" к базе данных не имеет никакого отношения. И делать это для добавления в БД не нужно. Это функцию надо применять при выводе данных в браузер, а не при сохранении в базу данных.

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

    Для безопасного добавления данных в БД из РНР, надо отправлять их отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    И не важно - пользовательский у тебя текст, или какой-то другой, POST у тебя запрос, или вообще никакого запроса не было - все эти вещи к работе с БД из РНР не имеют никакого отношения. Важно только то, что данные всегда отправляются в БД отдельно от запроса.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $name, $text, $message, $date);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$name, $text, $message, $date]);

    А дураков, которые сами не знают, как текст в базу сохранить, слушать не надо.
    Ответ написан
    Комментировать
  • Какой правильный путь при написании роутинга?

    copist
    @copist
    Empower people to give
    Не хотел бы углублять в конкретную реализацию. Объяснение на уровне абстракций.

    C моей точки зрения роутер должен выполнять функцию определения по методу HTTP и строке URI, какая функция должна быть вызвана.

    Результатом работы роутера может быть название класса и метода, как в Yii 1. Или может быть даже анонимная функция, как в Laravel, Phalcon, Django, RoR или ExpressJS. Это может быть, наверное, даже ассоциативный массив типа [ "response headers", "response body" ] или имя статического файла.

    Как сказал Сергей Протько, гибкость роутера в том, что роутер ничего не должен знать о логической структуре приложения, но такое я могу сказать только о базовом универсальном роутинге, который работает по карте сопоставлений URI и программных методов. Он действительно мало что знает, потому что парсит регулярки, ищет максимально похожее выражение, возвращает какие-то абстракции.

    С моей точки зрения, гибкий роутинг - это такой, который может быть легко заменён на любую альтернативную реализацию. Совместимость обеспечивается использованием объектно-ориентированного подхода с применением интерфейсов или через duck-typing.
    Например, роутером может считаться класс, который реализует RoutingInterface (это согласно ООП) или содержит метод route(arguments) (это duck-typing).

    Такой подход позволяет реализовать, например, сопоставление пути вида myblog/my-article с контролером
    "blog/view" через поиск по базе данных, а не по регулярке.

    И вот у Сергей Протько был роутинг с картой сопоставлений, а я заменил на роутинг с использованием базы данных. Логичный вопрос: делать карту сопоставления для всех роутов (что если правил будет больше 100?), либо всё это заносить в базу данных? (всё-всё-всё, каждый путь к профилю всех 100 000 пользователей - они же одинаковые /profile/111222). Ну не гибко же!

    Ещё более гибкий роутинг позволяет реализовать каскад роутеров. Если один роутер не смог распознать, кто будет отвечать за этот URI, управление передаётся другому.

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

    Или разбить приложение на модули и реализовать роутинг в каждом модуле приложения, а затем соединять их каскадами. Например, пусть за роутинг профиля пользователя отвечает модуль "User", а за записи блога - модуль Blog. Тогда URI вида /profile/111222 возьмёт на себя User, а /profile-as-an-article мог бы бы перехватить блог, и уже если никто не смог, то 404 Page Not found.

    Идея гибкого роутинга ясна? Нужны примеры с конкретной реализацией?
    Ответ написан
    3 комментария