Задать вопрос
  • Mysqli vs PDO — что выбрать?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    PDO и mysqli — это две сильно разные вещи. PDO является универсальным DBAL, позволяющим работать с любой поддерживаемой базой.

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

    если вы собираетесь использовать другие базы, то имеет смысл использовать PDO, да ито. придётся дополнять его квери билдером, чтобы получить реальную переносимость. в иных случаях пользуйтесь mysqli, который предоставляет больше функциональности.
    Ответ написан
    2 комментария
  • Есть ли хоть какое-то преимущество использования функтора перед обычной функцией в данном случае?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    У функтора перед функцией есть только одно преимущество - это наличие состояния функтора, которое может меняться между обращениями к его функциональному оператору и влиять на его поведение. Функтор настраивается эксклюзивно, функция - по понятным причинам - только глобально.
    У функции перед функтором тоже есть преимущество - это адрес функции, по которому сразу можно начать ее исполнение. У функтора всегда будет два адреса - адрес метода функционального оператора и адрес самого функтора.

    Исходя именно из этих преимуществ и следует выбирать между функтором и функцией.
    Скажем, если бы нужно было nums вписать в CSV таблицу в виде матрицы, то проще использовать функтор. Создать его, настроить поток вывода, символ-разделитель столбцов, количество выводов до перехода на следующую строку и передать в std::for_each.
    Если такая настройка поведения не требуется, от функтора лучше отказаться в пользу функции во всех случаях.

    Функтор используется в реализации идиомы делегата и коллбека. Делегаты позволяют универсальным образом хранить самые разные точки исполнения кода и безопасно проводить по ним исполнение.
    Если использование делегатов оправдано необходимостью, в делегаты оборачивают даже указатели на функцию, чтобы сохранить единообразие подхода к управлению исполнением.
    Ответ написан
    Комментировать
  • Как решить задачу по JS?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    У вас элементы добавляются парами, что случайно срабатывает правильно на чётном n; при нечётном n это невозможно. Нужно добавлять элементы по одному, и такой проблемы не будет.
    function valueRepeater (n, firstWord, secondWord) {
    	let result = [];
    	for (let i=0; i<n; i+=1){
    		result.push(i%2===0?firstWord:secondWord);
    	};
        return result;
    }
    Ответ написан
    Комментировать
  • Как найти участки кода несовместимые с PHP 8.1 версии?

    pxz
    @pxz
    ✔ Совет: Вам помогли? Отметьте ответы решением.
    Есть специальная тулза для этого — Rector.

    Позволяет выбрать целевую версию PHP и покажет в отчёте места, н совместимые или написанные в стиле старых версий. Также позволяет большинство участков кода отрефакторить автоматически.

    https://github.com/rectorphp/rector
    Ответ написан
    3 комментария
  • Как центрировать текст?

    noder_ss
    @noder_ss
    Линуксоид-энтузиаст и SQL разработчик
    text-align работает, просто оберните текст не в span, а в p
    Ответ написан
    1 комментарий
  • Какой игровой/физический 2d движок на javascript выбрать?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    В pixi нет физики, надо брать отдельный движок — Box2D или Bullet. В phaser физика встроена.

    phaser более высокоуровневой, и если вы не делаете что-то совсем невероятное и доселе небывалое, он быстрее приведет вас к цели. Туториалов на него едва ли не больше, чем ангуляр.
    Ответ написан
    Комментировать
  • Как реализовать анимацию при открытии окна с видео?

    DanArst
    @DanArst Куратор тега CSS
    Гриффиндор в моде при любой погоде!
    2 комментария
  • На какой cms начать верстать магазин лучше всего?

    zahod5277
    @zahod5277
    PHP-developer
    Joomla мертва, это факт. Она еще лет 5 назад уже никому не была нужна :)
    Абсолютно бесполезная в российских реалиях система, пустая трата времени.

    Если магазин небольшой и стоит вопрос "сделать магазин быстро и дешево", то тут либо WP с его костылями, либо MODX Revo + Minishop2. Хотя, тут есть два очень жирных минуса (говорю как разработчик на MODX с семилетним опытом и создавшим на нём около 50-ти магазинов):
    1) Чтобы сделать реально крутой сайт на MODX нужно немножко понимать, что и зачем. Правильно выстроить структуру сайта, файлов, прикрутить файловые шаблоны и чанки и установить только нужные модули, а всяких хлам из маркета можно заменить нормальными самописными решениями.
    Мой минимум это PDOTools, Minishop2 и MIGX. Этими инструментами можно покрыть большое количество стандартных функций, плюс купить модули для эквайринга и магазин готов.
    2) MODX, в принципе, уже тоже никому не нужен. Над развитием системы постоянно работают, но в свободное от основной работы время и поэтому проект устаревает, не успев выкатить новую версию. Количество работы на MODX сейчас стремится к нулю, когда 6 лет назад на любом фриланс сайте можно было найти заказ буквально за час.

    Если у заказчика есть деньги и он настроен серьёзно, то лучше использовать 1С Битрикс. Я сам не люблю эту систему из говнокода и костылей, однако она лучше всего работает с российскими законами и бизнесом. В редакции Бизнес есть вообще всё из коробки, включая эквайринг. Установил, натянул вёрстку, настроил модули и вперед. Ну Битрикс очень популярен и разработчики Битрикс стоят дороже остальных веб-мастеров. Так что потом просто не будет проблем с поиском работы.
    Ответ написан
    1 комментарий
  • Почему не работает for внутри append?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    Почему не работает for внутри append?


    Потому что это синтаксическая ошибка. Цикл for не будет возвращать подобным образом массив с шестью элементами, которые вы пытаетесь вставить как набор HTML тегов в элемент с классом second.

    Чтобы добиться желаемого результата, конкретно в данном случае, вы можете сделать например так:

    const getSetOfElements = () => {
         let arr = [];
    
         for (let i = 1; i <= 6; i++) {
              arr.push(`<div class="test">${i}</div>`);
         }
    
         return arr;
    }
    
    const setOfElements = getSetOfElements();
    
    $('.second').append(`<p>hello</p> ${setOfElements.join("")}`);


    Или:

    const setOfElements = [...Array(6)].map((_, i) => (`<div class="test">${i + 1}</div>`)).join("");
    
    $('.second').append(`<p>hello</p> ${setOfElements}`);


    Чтобы более корректно описать суть вашей ошибки, понадобиться много букв и возможно вам будет не интересно читать, а мне жалко тратить своё время. Поэтому можете пройтись по документации, ознакомиться с синтаксисом языка. Многое сразу встанет на свои места.
    Ответ написан
    2 комментария
  • Как убрать рамку вокруг div элемента?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    body {
        margin: 0;
    }
    Ответ написан
    Комментировать
  • Стоит ли закрывать поддомены для индексации в robots.txt?

    Если они не должны индексироваться, то закрывай
    Ответ написан
    Комментировать
  • Возможно ли заниматься 3д моделированием на моем пк?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вот это было сделано в 2000 году, по моему на целеронах
    https://www.youtube.com/watch?v=G58gFchy-QM&t=47s
    И меня останавливала только девушка которая была в конторе.
    Ответ написан
    Комментировать
  • Как практиковаться в программировании?

    Adamos
    @Adamos
    от выбора библиотек

    Да, это сложно.
    Надо, во-первых, понять, что тебе вообще надо.
    Потом поискать, как это вообще решается. Сейчас, когда есть гугль и форумы, этот этап стал значительно легче.
    И вот когда перед тобой распахнется все богатство выбора решений и возможностей - не искать самое оптимальное и правильное, а взять первое попавшееся, описание которого тебе в общем понятно. И по этому понятному руководству нарукоблудить кучу говнокода, добиваясь единственной цели - чтобы оно заработало.
    После того, как полученный продукт все-таки запустится и будет удален, кругозор немного изменится, и дальше пойдет легче...
    Ответ написан
    Комментировать
  • Как поставить ограниченное число булетов в swiper-slider?

    @mikhailivanko
    https://swiperjs.com/swiper-api
    Параметр dynamicMainBullets

    var swiper = new Swiper(".mySwiper", {
            pagination: {
              el: ".swiper-pagination",
              dynamicBullets: true,
              dynamicMainBullets: 4
            }
          });
    Ответ написан
    3 комментария
  • Доход от мобильных приложений для одиночки?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    и человек заработал миллионы, в интернете не так уж много информации именно о обычных разработчиках, не топ счастливчиках

    Такие счастливчики не пишут о своих успехах и своих доходах. Деньги любят тишину.
    Ответ написан
    Комментировать
  • Какой можно применить алгоритм для хранение индекса для 50 миллиардов записей в golang?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Немного бухгалтерии. Если взять по максимуму.

    Размер одной записи должен быть порядка 60 + 32 +8 = 100 символов (байт для простоты)

    При 50 млрд записей объем хранимых данных должен быть порядка

    50 000 000 000 * 100 = 5 000 000 000 000 = 5 триллионов байт.

    В дисковом хранении это будет примерно 4.5 терабайта. Задачка для in-memory неподъемная. Нужен диск + мемори.

    Если я там где-то ошибся в расчетах - то только в средних значениях. Если подставить не максимумы а среднее - то цифры будут поскромнее. Но в любом случае - многовастенько для покупки памяти.

    Вобщем нужна дисковая БД которая встраивается в приложение. На требование менеджеров которые запретили использовать БД забейте. Они ничего не понимают. Делайте БД встраиваемую в приложение. В качестве таких (встраиваемых систем можно поробовать) LevelDb, BerkeleyDb, RocksDb. Они поддерживают индекс класса B+Tree и это даст возможность искать группы записей по одному ID. Для этого класса систем любую запись можно найти за 4-5 дисковых IOPS. Если какдый IOPS стоит 15 мс (это я так мерял свой собственный магнитный HDD) то любой поиск группы ключей для TTFB будет порядка 15 * 5 = 75 милисекунд. Ну если вы поставите SSD - то быстрее.

    По поводу предложений хранить в файлах. До того как обсуждать это - надо уяснить требования по времени отклика. Сколько секунд вы согласны ждать - насколько можно и партицировать (или шардировать ваш файл).
    В простейшем случае мы делим большой CSV файл на 512 partitions по хешу от ID и получаем соотв время фулл-скана всего файла поделенное на 512. Дальше - играйтесь с этим параметром партишенинга выводя его на доступный уровень отклика. Из недостатков - будет россыпь файлов. Надо почиать документацию на вашу файловую систему (ext4?) и тюнить ее так чтоб она не сдохла от такого числа inodes.

    Я поддержу оба сценария. И с встраиваемой БД и с файлами. Но с БД надежнее т.к. есть транзакции а файлы у вас могут быть в крешнутом состоянии долго. И вы об этом ничего знать не будете.

    По поводу Parquet. Не взлетит. Скорее всего индекс по данному типу файла - это совсем не то что вкладывают туда релационные системы. Обычно Parquet/Orc/Delta вкладывают в индекс смысл - отбрасывания тех полосок данных (stripes) которые бесполезны при чтении всего файла. Такой индес - обычно просто либо range-признак либо карта Блума. И в случае с range - дает эффект на сортированных данных. Для прочих - будет бесполезно т.к. фулл-скан все равно обеспечен. А если фулл-скан то зачем тогда вообще индекс.

    Вобщем для дизайна архитектуры нам нужны цифры. Средние длины по колонкам. И я-бы еще запросил кардинальность по полю ID.
    Ответ написан
    7 комментариев
  • Что важно в процессоре больше для программирования, тактовая частота или количество ядер?

    @rPman
    Последние 10 -15лет частота не является определяющим параметром (ее потолок уже достигнут). Важными параметрами являются размер кеша процессора и количество ядер (последнее не сильно актуально для разработчика, за исключением c++ разработчиков, которым приходится пересобирать такие крупные проекты как например chromium). К сожалению, так как обычно кеши процессора делятся на ядра, чем больше этих ядер тем меньшее значение имеет очередное увеличение его размера. Так для современных процессоров кеш меньше 16мб..32мб - уже маленький.

    Смотри на синтетические тесты 'single thread', именно этот параметр определяет фактическую скорость работы на рядовых задачах, а многопоточный тест покажет только возможности процессора для очень узкого списка задач, типа числодробилки.

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

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

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Можно начальный индекс вырезания подстроки менять, и часы забирать только когда длиннее часа:
    -    console.log(new Date(media.duration * 1000).toISOString().slice(11, 19));
    +    console.log(new Date(media.duration * 1000).toISOString().slice(media.duration > 3600 ? 11 : 14, 19));
    Ответ написан
    1 комментарий
  • Почему в FormData попадает не весь список form?

    Alexandroppolus
    @Alexandroppolus
    кодир
    У четвертого поля формы нет аттрибута name, потому он не в игре.
    Ответ написан
    Комментировать