• Как понять какого типа был объект?

    @Cheypnow
    Суть полиморфизма как раз в том что бы не было необходимости узнавать конкретный тип. Достаточно имплементить единый интерфейс, а различающуюся логику писать в реализации.
    Ответ написан
    Комментировать
  • Как заставить curl дожидаться загрузки динамической страницы?

    dimsog
    @dimsog
    Переносил код с PHP 4 на 7.4...
    Логично, что динамический контент подгружается с какого-то внешнего ресурса по AJAX. Внешним ресурсом может быть сам сайт или API. Так почему бы не обратиться к этому ресурсу напрямую?
    Ответ написан
    Комментировать
  • Редактирование аудиофайла в PHP?

    dimsog
    @dimsog
    Переносил код с PHP 4 на 7.4...
    php exec ffmpeg, но не говорите никому, что это я вам сказал :)
    если с нодой более/менее, попробуйте https://www.npmjs.com/package/ffmpeg
    Ответ написан
    2 комментария
  • Редактирование аудиофайла в PHP?

    GavriKos
    @GavriKos
    Ответ написан
    Комментировать
  • Редактирование аудиофайла в PHP?

    inoise
    @inoise Куратор тега PHP
    Solution Architect, AWS Certified, Serverless
    Как ни удивительно но просто для наложения второй дорожки я сейчас не придумаю ничего лучшего чем воспользоваться ffmpeg. они это умеют
    Ответ написан
    Комментировать
  • Скажите хорошие видеоуроки по JUnit тестированию в андроид аппликациях?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Начните называть приложение приложением. Полезно будет.
    Аппликация - это вот:
    19127_9096d2a30043af39f449e7d5f8acca3e.j
    Ответ написан
    Комментировать
  • Смысл сокрытия, когда есть рефлексия?

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

    А рефлексия - это чёрных ход в JVM. Рефлексивный код медленный и небезопасный. Он наоборот увеличивает сложность и сводит к нулю половину достоинств языка. Применять рефлексию допустимо только при разработке инструментальных средств и фреймворков. И даже при этом стоит стремиться сократить обращение к ней.

    Образно говоря, вам необязательно пить и есть, питаться вы можете и через капельницу. Но это не значит, что вам не нужны зубы и 5 метров кишечника.
    Ответ написан
    1 комментарий
  • Каким плохим вещам учит PHP?

    @Kostik_1993
    Web Developer
    Жить хорошо и кушать вкусно, но это не у всех))

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

    В настоящее время и синтаксис подтянулся на уровень, и строгая типизация появилась и много много всего. Учите основы и паттерны, а язык вам ничего плохого не даст.
    Ответ написан
    5 комментариев
  • Почему Visual Studio Code производительнее Visual C++ и IntelliJ IDEA?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    При чем плагинов наставил столько что функционал уровнялся.

    Ваша ошибка в этом. Никакими плагинами невозможно уравнять редактор кода с интегрированной средой разработки. Тем более с такой, как IDEA, которая способна на лету выполнять семантический анализ.
    Ответ написан
    Комментировать
  • Чем отличается Hibernate от spring Data и в принципе инструменты работы с БД?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    JDBC - это стандарт доступа к базам данных, JPA - это стандарт персистентности, Hibernate - это реализующий его ORM, Spring Data - это механизм организации репозиториев, а репозиторий - это абстракция, лежащая на уровень выше ORM. То есть Spring Data использует Hibernate, а Hibernate использует JDBC.
    Ответ написан
    3 комментария
  • Что конкретно делает эта функция 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 подключить к онлайн базе данных?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Теперь задайте себе пару вопросов:
    1) При чем тут javafx и каким боком она связано с сутью вопроса?
    2) У вас есть рабочее приложение которое работает с БД, Логично что приложение ваше и вы его писали, следовательно гдето в таком явном месте есть самая обычная строка подключения к БД в которой написано "localhost". Так вот это не намекает на место с которого стоило начать и попробовать вписать тут ссылку удаленного сервера?
    3) Вы хотя бы думали о абсурдности и глупости своего вопроса?
    Ответ написан
    Комментировать