• Если ли PHP-библиотека для конвертации HTML c CSS Grid в PDF?

    dyuriev
    @dyuriev
    A posteriori
    shell_exec + chromium с флагами headless disable-gpu и print-to-pdf отрисует вам что угодно, что может отобразить chrome.
    у решения есть изъян - на большинстве хостингов даже не пытайтесь запустить, себе дороже, только виртуальные/физические сервера подходят идеально.

    https://github.com/chrome-php/chrome - примерно так
    Ответ написан
    3 комментария
  • Для чего использование Hydrator pattern вместо создания объекта?

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

    Изначально гидратор являлся маркетинговым шаблоном в дизайне Hibernate ORM. Маркетинговым - это потому что нового ничего шаблон не вносит, просто имеющееся называет броским новым термином ради привлечения внимания. Шаблон дизайна - это потому что гидратор явно в коде не представлен, будучи именно высокоуровневым описанием поведения некоторого кода.
    И самое интересное в том, что маркетинговая задумка удалась, хоть и немного в другом смысле. Люди начали понимать гидратор по-своему. В результате часто получается так, что гидратором называются обычные билдер или фабрика, а то и вовсе сериализатор. Термин людям понравился, просто.

    Декоратор для гидратора из приведенного по ссылке кода - это просто еще одна попытка использовать любимый термин. Гидратор в этом коде гидратором не является по всем своим признакам. Это - сериализатор.
    Ответ написан
    Комментировать
  • Как на symfony добавить возможность аутентификации по JWT токену?

    @tukreb
    В общем есть "официальный"
    https://symfony.com/bundles/LexikJWTAuthentication...

    Использую в одном проекте на симфони 5.4 всё устраивает.

    Сам бандл активно развивается тоже https://github.com/lexik/LexikJWTAuthenticationBundle
    Ответ написан
    Комментировать
  • Как найти участки кода несовместимые с PHP 8.1 версии?

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

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

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

    Касательно smtp.mail.ru. 465 порт - SSL, 587 - TLS.
    Плюс адрес ->setFrom([$this->email => $this->name]) должен совпадать с 'username' => 'account@domain.ru'.
    Ответ написан
    Комментировать
  • Что интересного полезного можно писать на GO для прокачки как разработчика?

    @alexeydolgov
    ну если пройти собес цель - то надо скорее много читать чем писать.

    Если для себя:
    1) я лично всяких ботов писал, доменная логика отдельно, а потом подключаешь адаптеры для вк или телеги или еще веб делаешь. Прикольно. Можно еще google dialogflow подрубить, раньше можно было.
    2) Идея например создать доску Уиджи. Типа пишешь сообщение а ответ приходит из dialogflow и его визуально показываешь. правда в такой идее больше фронта чем бэка. И это не конкретно про go, про уровень разработчика.
    3) Еще идея - некий taskmanager, есть например некие задачи с приоритетом, надо их выполнять в пуле воркеров. вот тут и многопоточка и race condition. все по красоте.
    4) мб игры какие то если увлекает это тема
    5) может быть докерные всякие штуки. Например запуск контейнеров каких то для тестирования аля https://github.com/ory/dockertest
    6) придумать свой протокол и реализовать. Книга Михалис Цукалос "Golang для профи" в помощь
    7) рискованный но все же. свой блокчейн или на крайняк свой goethereum клиент. тут и p2p и свои протоколы. Есть где поковыряться

    Идей миллионы, просто ищешь что интересно тебе и делаешь. Но на собесах у меня лично просили код показать примерно никогда. Больше по теории гоняли.
    Ответ написан
    Комментировать
  • Что интересного полезного можно писать на GO для прокачки как разработчика?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Цель - уверенно пройти собес на мидла

    Если цель пройти собеседования, то нужно пройти несколько десятков собеседований.
    Ответ написан
    Комментировать
  • Что интересного полезного можно писать на GO для прокачки как разработчика?

    xenon
    @xenon
    Too drunk to fsck
    У Go есть хорошее преимущество - он быстрый, относительно интерпретируемых языков. У меня была идея сделать на базе Go сервис быстрых вычислений, куда можно накидать разных данных из другой программы (на php/python), и вызвать какую-то операцию, которую этот сервис сделает быстрее, чем родной интепретируемый код.

    Примерно, как redis делает для key-value данных. Ведь почти все нужные от редиса функции можно реализовать и внутри python/php программы, но redis все сделает гораздо быстрее.

    Одна из задач для "вычислителя" - безопасный eval(), я такой делал для python (evalidate). eval() почти всегда - очень опасная функция, чтобы использовать ее в своем коде, но хочется. evalidate - только для python, и это плохо. Удобнее было бы как отдельный сервис (на том же хосте), куда можно загрузить данные, юзерский код и исполнить его. Причем сервис с максимально ужатыми правами, чтобы были минимальные риски по безопасности. Я думал сделать evalidate как сервис, но на пайтоне он слишком медленный был бы, а вот на Go - в самый раз.

    Пример типовой задачи: Онлайн-магазин, у нас есть список товаров (может быть в mysql или в redis или прямо в нашу программу загружается как список). Потом пользователь задает какой-то свой сложный поиск, вроде "Найти все смартфоны до 25 000 рублей, с памятью 128, но не Huawei, а если Apple, то можно и до 50 000" и медленное веб-приложение прокидывает это запрос на наш быстрый вычислитель и получает от него ответ.

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

    Если интересно, можно обсудить эту идею.
    Ответ написан
    Комментировать
  • Что интересного полезного можно писать на GO для прокачки как разработчика?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Ответ написан
    Комментировать
  • Как запретить автоматическое переключение микрофонов в ubuntu (gnome)?

    smorman
    @smorman
    When In Rome do as The Romans do...
    pavucontrol в помощь...
    Ответ написан
    Комментировать
  • Что такое git checkout?

    korobochkin написал основную функцию команды, могу еще добавить, что git checkout отменяет изменения файла, достаточно прописать git checkout <Имя файла> и он будет возвращен в первичное состояние коммита
    Ответ написан
    Комментировать
  • Реально ли работать в одном IT-проекте (продуктовом) больше 5-ти лет и не деградировать профессионально?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Если ты уже поработал в нескольких действительно разных проектах, получил представление о разных вариантах и архитектуры и организации работ, то можно найти сложный проект, который меняется, расширяется и работать в нем всю жизнь.

    Да, возможно будешь знать не все-все-все фичи которые появились на рынке, но если твой продукт сложный, все равно будешь пользоваться либо аналогами либо наоборот иметь свою интересную экспертизу.

    p.s. Вон посмотрите на Торвальдса - он деградировал?
    Ответ написан
    Комментировать
  • Есть ли конвертер аннотаций в атрибуты?

    @Flying
    Посмотрите на Rector, он специально предназначен для подобных манипуляций. Есть отдельные пакеты с правилами для Symfony и Doctrine, но вероятно придётся дописать какие-то правила. Ну и статья в тему.

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

    Да, и Symfony 5.2 уже вышла из поддержки, нужно целиться в 5.4
    Ответ написан
    Комментировать
  • Как проверить mx при валидации email через аннотации?

    @Flying
    checkMX был объявлен deprecated в 4.2 и удалён в 5.0.

    Можно сделать свою реализацию, использовав в качестве основы код из 4.2, но при этом нужно будет учесть причины по которым этот код был убран (1, 2)
    Ответ написан
    Комментировать
  • Как проверить mx при валидации email через аннотации?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    Ее отключили в пятой версии: https://github.com/symfony/symfony/issues/34681#is...
    Используйте egulias/email-validator напрямую
    Ответ написан
    Комментировать
  • Как включить вкладку outline в explorer?

    Dimox
    @Dimox
    Верстаю сайты
    Если нажать ПКМ на слове "EXPLORER" (либо на 3 точки напротив него), то появится менюшка, где можно включить "Outline".
    Ответ написан
    Комментировать
  • Применяется ли во встроенной функции copy отложенное копирование?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Отложенного копирования при копировании слайса нет.
    Вот исходник функции, которая копирует слайсы.
    https://golang.org/src/runtime/slice.go#L34
    В комментарии к функции написано:
    // makeslicecopy allocates a slice of "tolen" elements of type "et",
    // then copies "fromlen" elements of type "et" into that new allocation from "from".


    Исходный код функции на случай, если исходник не доступен

    // makeslicecopy allocates a slice of "tolen" elements of type "et",
    // then copies "fromlen" elements of type "et" into that new allocation from "from".
    func makeslicecopy(et *_type, tolen int, fromlen int, from unsafe.Pointer) unsafe.Pointer {
    	var tomem, copymem uintptr
    	if uintptr(tolen) > uintptr(fromlen) {
    		var overflow bool
    		tomem, overflow = math.MulUintptr(et.size, uintptr(tolen))
    		if overflow || tomem > maxAlloc || tolen < 0 {
    			panicmakeslicelen()
    		}
    		copymem = et.size * uintptr(fromlen)
    	} else {
    		// fromlen is a known good length providing and equal or greater than tolen,
    		// thereby making tolen a good slice length too as from and to slices have the
    		// same element width.
    		tomem = et.size * uintptr(tolen)
    		copymem = tomem
    	}
    
    	var to unsafe.Pointer
    	if et.ptrdata == 0 {
    		to = mallocgc(tomem, nil, false)
    		if copymem < tomem {
    			memclrNoHeapPointers(add(to, copymem), tomem-copymem)
    		}
    	} else {
    		// Note: can't use rawmem (which avoids zeroing of memory), because then GC can scan uninitialized memory.
    		to = mallocgc(tomem, et, true)
    		if copymem > 0 && writeBarrier.enabled {
    			// Only shade the pointers in old.array since we know the destination slice to
    			// only contains nil pointers because it has been cleared during alloc.
    			bulkBarrierPreWriteSrcOnly(uintptr(to), uintptr(from), copymem)
    		}
    	}
    
    	if raceenabled {
    		callerpc := getcallerpc()
    		pc := funcPC(makeslicecopy)
    		racereadrangepc(from, copymem, callerpc, pc)
    	}
    	if msanenabled {
    		msanread(from, copymem)
    	}
    
    	memmove(to, from, copymem)
    
    	return to
    }

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

    @mrdaniv
    Использую Veeam Backup & Replication. Причем бесплатная версия (для юр.лиц тоже) вполне покрывает потребности в бэкапе файлопомойки и системы. Советую.
    Ответ написан
    Комментировать
  • Как пропустить ответ symfony через какой-либо фильтр, обработать вывод?

    Через события. Перехватываешь событие response, меняешь что нужно, возвращаешь новый объект Response
    Ответ написан
    1 комментарий