• Как, используя ffmpeg, можно организовать прогресс бар?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1 комментарий
  • Почему блог для стартапов имеет требование "нет монетизации"?

    pragmatik
    @pragmatik Куратор тега Хабр
    Лично я вижу эту ситуацию так: Стоимость подписки на блоги компаний служит своего рода фильтром от всего того рекламного говна, которое пытаются пропихнуть на Хабр. Тариф "Стартап" ввели исключительно для поддержки интересных и общественно-полезных проектов, а не для того, чтобы каждый ноунейм мог разместить на Хабре свою рекламу. Соответственно, критерий отсутствия монетизации и является той лакмусовой бумажкой, которая помогает оперативно отсеивать желающих по-быстрому разбогатеть, сэкономив на рекламе. Если бы не эти ограничения, то Хабр уже давно состоял бы из рекламы "чуть более чем полностью".
    Ответ написан
    Комментировать
  • Контроллер одного действия в MVC?

    Если тебе так удобнее будет поддерживать - почему нет?
    Такой подход много где применяется и он точно лучше, чем божественные контроллеры
    Ответ написан
    3 комментария
  • Новичёк без предыдущего опыта в разработке, способен устроиться сейчас Junior Golang Developer?

    EvgenyMamonov
    @EvgenyMamonov
    Senior software developer, system architect
    Если в программировании опыта нет - лучше начните с Python.

    То, что Go простой в изучении язык - это так, но не на столько простой как пишут в рекламе курсов по Go :)

    Еще в рекламе не учитывается один небольшой, но очень важный нюанс - на Go вам предстоит решать задачи, которые будут значительно сложнее тех, которые будут у вас если вы устроитесь Python/PHP/Frontend программистом.

    Смысл в том, что работодателям, которым нужны Go программисты, нужны люди, которые могут работать с большими нагрузками (как минимум).

    Порог входа в Go + highload + микросервисы значительно выше, чем в Python без highload.

    Можно устроиться на работу на Python + Django и при этом даже с базами не особо уметь работать. Но при этом вы сможете выполнить поставленную задачу и по итогу все будут счастливы.

    А вот с go так не получится, вам нужно будет не просто уметь работать с базами, а делать это очень хорошо, понимать как оптимизировать запросы, структуру базы, как и когда нужно применять денормализацию, вы быстро столкнётесь с проблемой, когда база не поместится на одном сервере, т.е. нужно уметь на практике писать сразу горизонтально масштабируемое приложение и т.п.

    Итого: если взять сроки подготовки с нуля до трудоустройства - то, скорее всего, путь Python будет в несколько раз быстрее. Скорее всего во много раз быстрее :)

    Как вариант можно попробовать Fronend: ReactJS, VueJS и т.п. - тоже будет вполне быстрым стартом.

    Ну и посмотрите developer roadmaps:
    https://roadmap.sh/frontend
    https://roadmap.sh/backend
    https://roadmap.sh/golang (тут надо понимать, что до того, как начнёте изучать Go - надо изучить backend в целом)
    Ответ написан
    1 комментарий
  • Symfony Eventlistener идет зацикливание?

    @Flying
    Вы вызываете EntityManager::flush() внутри обработчика события, который сам вызывается в процессе работы
    EntityManager::flush() (а точнее UnitOfWork::commit()), разумеется вы получаете бесконечный цикл.

    Корректным подходом будет реализация, которая накапливает информацию об изменениях и передаёт их для дальнейшего сохранения. Это можно сделать с помощью Doctrine event listener'а, который содержит в себе обработчики следующих событий:
    1. preFlush
    2. postPersist, postUpdate, postRemove
    3. postFlush


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

    Таким образом ваш обработчик должен действовать примерно следующим образом:
    1. На событие preFlush вы очищаете внутреннюю переменную (например private array $changes = []), в которой будет
      накапливаться информация об изменениях
    2. Обрабатывая события postPersist, postUpdate, postRemove вы сохраняете в $changes
      информацию об изменениях, которую хотите сохранить
    3. В обработчике postFlush вы передаёте накопленные изменения, формируя message, для которого настроен роутинг в async транспорт. Обработчик этого message сможет спокойно сохранить все накопленные изменения, не мешая runtime коду.

    Ответ написан
    2 комментария
  • Как ускорить работу кода?

    Для таких целей отлично подходит паттерн "worker pool"
    https://gobyexample.com/worker-pools

    Создаете воркеров столько, сколько параллельно урлов хотите обрабатывать. Отправляете в канал не слайс урлов, а урлы по-одному. Каждый воркер берет из канала свой урл и все они параллельно обрабатывают разные урлы.
    Ответ написан
    1 комментарий
  • Как встроен HTTP в HTTPS?

    Если HTTP - это тупо текст поверх TCP, то HTTPS - это текст, завёрнутый в TLS, который идёт поверх TCP.

    что значит "модификация"

    1. Хз что ты там читал, но мне вся выдача гугла говорит, что HTTPS - это расширение HTTP
    2. Если не вдаваться в этимологию, то "расширение" - это когда суть расширяемого объекта не меняется, но добавляется что-то ещё. В случае HTTPS - у нас остаётся вся семантика HTTP, но добавляется шифрование.

    По факту это всё-таки другой протокол, который не совместим с обычным Http
    Ответ написан
    Комментировать
  • На кого идти учиться, если хочешь создавать беспилотные автомобили?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На математика.
    Ответ написан
    Комментировать
  • Что именно делает этот код?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вся магия происходит здесь
    Обычный магический метод __call(), который вызывается, когда происходит обращение к несуществующему методу.

    По факту это такой магический геттер на стероидах.
    Отрезает от имени метода первые три буквы и ищет свойство с получившимся именем.
    Свойства добавляются в класс в конструкторе через массив.

    Если свойство не найдено, ищет в массиве имя класса, объект которого надо создать и вернуть.
    Для этого зачем-то меняет регистр с camelCase на snake_case и ищет элемент массива с таким именем по вышеприведённой карте классов. То есть getForwardFrom превращается в forward_from, и по этому индексу возвращается имя класса. почему нельзя было сразу написать в том же регистре - загадка

    В целом - отборнейший говнокод.
    Ответ написан
  • Бывали ли случаи, что deprecated-код вновь объявляли актуальным?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Deprecated не так страшен. Для java экосистемы такой стикер может висеть по много лет. За это время вы успеете поменять проект.

    Более хуже ситуация когда разработчик завязался на недокументированное поведение а его (поведение) в новых версиях исправили. Шок трудно описать :)
    Ответ написан
    Комментировать
  • Зачем нужны роутеры если можно обходиться без них в express.js?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Просто один из уровней абстракции. Точно так же можно сказать о любой функции/методе и так дойти вниз до машинного кода и транзисторов. Кроме того, роутер может иметь более сложную логику, чем просто отработка запроса по ссылке - например использовать параметры из ссылки.
    Ответ написан
    Комментировать
  • Как построить древовидный массив неограниченной вложенности?

    Alexandroppolus
    @Alexandroppolus
    кодир
    вложенность мотет быть неограниченной

    выглядит так, будто у тебя бесконечно оперативы и ты хочешь куда-то её применить )))

    Вот вариант за линейное время работы (из предположения, что хэш-таблица работает в среднем за О(1))
    без рекурсии
    на js, переведи в ПХП сам

    код

    const array1 = [
        {page: '1.ru', title: 'title 1'},
        {page: '3.ru', title: 'title 3'},
        {page: '6.ru', title: 'title 6'},
    ];
    
    const array2 = [
        {page: '666.ru', title: 'title 666', referer: '66.ru'},
        {page: '33.ru', title: 'title 33', referer: '3.ru'},
        {page: '66.ru', title: 'title 66', referer: '6.ru'},
    ];
    
    function createTree(roots, notRoots) {
        if (!roots || !roots.length) { return []; }
    
        const childsMap = new Map();
    
        // строим карту (page => список_чилдов), создавая узлы дерева для чилдов
        notRoots.forEach((child) => {
            let childs = childsMap.get(child.referer);
    
            if (!childs) {
                childs = [];
                childsMap.set(child.referer, childs);
            }
    
            childs.push({
                page: child.page,
                title: child.title,
            });
        });
    
        // всем чилдам (вновь созданным узлам), которые попали в карту, проставляем чилдов
        childsMap.forEach((childs) => {
            childs.forEach((child) => {
                child.childs = childsMap.get(child.page) || [];
            })
        });
    
        // обходим корневые элементы, создаем для них узлы дерева, подставляем чилды по карте
        return roots.map((root) => {
            return {
                page: root.page,
                title: root.title,
                childs: childsMap.get(root.page) || []
            };
        })
    }
    
    console.log(createTree(array1, array2));

    Ответ написан
    2 комментария
  • Как создать видеохостинг с нуля?

    главное - приготовь пару камазов денег на дата-центр.
    Ответ написан
    Комментировать
  • Как создать видеохостинг с нуля?

    Symphony
    @Symphony
    Берете Жомла, подключаете Жикверу, 6 плагинов.
    Готово!
    Ответ написан
    Комментировать
  • Как правильно определить какой JSON вернулся?

    Успешность обычно проверяют по http-коду ответа.

    Если же сервис сделан так, что код ответа всегда 200, то единственный верный способ будет пытаться анмаршалить оба и смотреть на поля, всё верно.
    Ответ написан
    1 комментарий
  • Существует ли какое нибудь api, которое позволяет вытаскивать данные с "умных" часов/браслетов ежесекундно?

    @rPman
    https://developers.google.com/fit/android в т.ч. прямое чтение сенсоров в реальном времени
    ну и само устройство должно поддерживать

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

    Это не деление с остатком, это целочисленное деление.
    Если делишь одно целое число на другое целое число, работает целочисленная арифметика, потому что го это строго статически типизированный язык.
    Чтобы получить дробное число, нужно явно делить одно число с плавающей точкой на другое.
    package main
    
    import "fmt"
    
    func main() {
    	var some = float64(5) / float64(3)
    	fmt.Println(some)
    	fmt.Printf("%T", some)
    }


    Происходит это потому что компьютер так работает на уровне железа. Если процессору дать команду на деление двух целых, ответом будет целое. Если дать команду на деление двух флоатов — будет флоат.
    В некоторых языках компилятор или интерпретатор берут на себя смелость решать за пользователя, какой ему тип нужен и автоматически включают нужный тип деления в зависимости от ситуации (обычно включается флоат на флоат, как в JS, например). Но это может приводить к ошибкам в некоторых ситуациях.
    Поэтому в го, C, C++ и еще многих других языках (обычно это статически типизированные языки), пользователь должен явно выбирать требуемый тип деления, используя нужные типы переменных.
    Ответ написан
    1 комментарий
  • Что делать если на комп попал вирус, можно ли как-то решить проблему без переустановки системы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно, но сложно.
    С переустановкой проще и гарантированный результат.
    Ответ написан
    Комментировать
  • Почему сайт на GitHub Pages не видит CSS?

    RAX7
    @RAX7
    index.html
    - <link rel="stylesheet" href="/color.css">
    + <link rel="stylesheet" href="/resume/color.css">
    Ответ написан
    1 комментарий