• Как сжать папку .git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Вы явно делаете что-то не так, раз репо занимает столько места. Уточните, что вы там храните?
    Стандартные процедуры сборки мусора и перепаковки не сильно помогут. Надо удалить лишнее руками.
    Либо тупо обрезать старую историю и использовать текущее состояние проекта как начало новой истории.
    git reset $(git commit-tree HEAD^{tree} -m "Новое начало истории")

    Затем сделать сборку мусора
    git gc --prune=now --aggressive

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

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

    Rst0
    @Rst0
    Ответ написан
    Комментировать
  • Как правильно наследовать бандл?

    Комментировать
  • Как оптимизировать одновременную подгрузку 2000 картинок низкого качества?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Однозначно спрайты.
    Во первых - поэксперементировать с форматом, если лого у вас в основном малоцветные - больше подойдет пнг, нежели вебп или жпег. Фотошоп позволяет достаточно эффективно оптимизировать картинку.
    Во вторых - сумма байт от всех картинок скорее всего будет в разы больше одной большой, в силу алгоритмов сжатия, так как они работают эффективнее на большой картинке.
    В третьих - "резать" на фронте ничего не надо, просто вставляете бэкграундом со смещением.
    Как вариант для избегания пустых мест в этом блоке - скрыть его до загрузки спрайта. По загрузке сделать видимым.
    Ответ написан
    Комментировать
  • Как расширит диапазон используемых функций в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Какой-то странный вопрос.
    Во-первых, использование функций - не самоцель. Образованный человек отличается от пэтэушника в первую очередь не словарным запасом, а тем, что умеет выражать свои мысли четко и понятно. И может написать большой текст так, чтобы его было удобно читать.
    А какие слова он при этом использует - дело десятое. Да, можно иногда сократить текст, используя общепринятый термин вместо его описания, но это не принципиально.
    Так же и с кодом. Он должен быть четким, красивым и осмысленным.

    Во-вторых, встроенные функции - это вообще какая-то ерунда. Используется раз в неделю. Куда важнее умеешь ли ты пользоваться библиотеками. Вот где эрудиция-то проявляется. Сидишь ли на коленке колупаешь CURLOPT или используешь гузлю. mail или phpmailer. И так далее.
    Как в анекдоте - ты уже не сам анекдот рассказываешь, а только номер называешь.

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

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

    Но если для общей эрудиции, если совсем словарный запас совсем мизерный, можно на ночь читать списки функций для работы со строками и массивами.
    Ответ написан
    4 комментария
  • Как ускорить foreach?

    tmaslov22
    @tmaslov22
    Backend developer
    Проверять наличие товара по прайсу в базе нужно через SQL запрос. В этом примере тянутся данные из нескольких таблиц БД и потом через php производятся вычисления. Нужно что бы вычисления делала СУБД, а не PHP.
    Ответ написан
    Комментировать
  • Зачем нужно это поле в Jira?

    Mark переводится как "оценка" или "метка" или "отметка".
    Очевидно, что это какое-то кастомное поле и следует вопрос задать тому, кто его добавил.
    Например своим коллегам
    Ответ написан
    Комментировать
  • Как распаковать архив zip, закаченный в репозиторий на Github?

    @Akela_wolf
    Extreme Programmer
    Скачать и распаковать.

    Если же речь о том, чтобы распаковать этот ZIP прямо в репозитории, чтобы содержимое архива было доступно как содержимое репозитория - то никак, github такой функции не предоставляет.
    Ответ написан
    7 комментариев
  • Как повысить свои навыки в построении архитектуры сложных приложений?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    1. Хорошо помогает начать изучение с простых паттернов проектирования. Прежде всего это простые и понятные паттерны типа "стратегия", "команда", "итератор", "шаблонный метод", "посредник", "цепочка обязанностей". Изучив и поняв эти паттерны вы посмотрите на ООП по новому: не как просто структурированный код плюс данные в одном объекте, а именно как задумывалось его создателем - объект самостоятельная единица взаимодействующая с другими такими же посредством сообщений. Причём она является first class также как в функциональном программировании функция. К тому же на указанных паттернах строятся и остальные. Например, фабричный метод - это частный случай шаблонного метода. Так постепенно придет понимание куда и зачем применять различные паттерны.
    2. Когда решаете какую-либо задачу, думайте о нескольких вариантах архитектуры для её решения. Далее старайтесь выбирать
    вариант не на основе личных предпочтений или предыдущего опыта (не важно, положительного или отрицательного), а на основе анализа, какой из вариантов здесь реально потребуется с точки зрения дальнейшего развития проекта. Предыдущий опыт также надо учитывать, но все проекты разные, требования разные, и каждая ситуация может отличаться. Надо смотреть как могут изменяться или расшириться системные и функциональные требования (разумеется, для этого надо быть в контексте этих требований - т е знать их самих, манеру работы с проектом заказчика и т д) Во многих случаях, когда вы не сможете выбрать из-за недостатка информации, это логически подведёт вас задавать заказчику дополнительные вопросы. И через этот итеративный процесс приходит понимание, где и как применять паттерны.
    3. Обратите внимание на паттерны ERP систем (для примера книга "Шаблоны корпоративных приложений" Мартин Фаулер) Особенное внимание надо уделить такому шаблону как инверсия зависимостей. Данный шаблон лично мне помог совершенно по другому взглянуть на ООП (во второй раз, уже после того как я стал применять другие паттерны ООП) Вот здесь https://blog.byndyu.ru/2009/12/blog-post.html очень понятно на мой взгляд описано (язык C# но всё тоже самое будет для любого ОО языка) Кроме того в этом блоге много всего по проектированию и рефакторингу.
    4. Обратите внимание на книгу "Growing Object-Oriented Software, Guided by Tests" Стив Фриман Перевод на русский не гуглится, возможно его и нету. Но книга полезна тем, что в отличие от многих других книг по TDD в ней разбирается не только методика тестирования и написания тестов, но и принцип тест -> код -> рефакторинг. И разбирается на достаточно длинном примере. Из неё вы можете подчерпнуть привычку рефакторить, а не переписывать заново. Причём даже если у вас на проекте цикл другой - например тесты пишутся после функционала, всё равно образ мысли изменится и масштабный рефакторинг не будет вызывать непреодолимого желания выбросить и переписать с нуля.
    5. По рефакторингу могу порекомендовать книгу "Работа с унаследованным кодом" Майкл Физерс. Кроме того об этом много статей в уже упомянутом блоге Александра Бындю. Грубо говоря я бы назвал ту подборку статей "как не переписывать и начать жить"
    6. Ещё один блог где собрано большое количество полезных материалов по ООП, рефакторингу, проектированию, это блог Сергея Теплякова Вот ссылка на его подборку книг по теме: sergeyteplyakov.blogspot.com/2013/08/blog-post.html
    7. Изучайте материалы постепенно. Не стоит сразу пытаться воткнуть только что полученные знания в первый попавшийся проект. Обсуждайте возможные решения с коллегами. Со временем они также станут поддерживать эту практику. Если есть возможность, попрактикуйте парное программирование. Причём не обязательно с более опытным коллегой. Иногда вопросы задаваемые наивным человеком заставляют задуматься гораздо крепче, чем ответы получаемые от мудрецов.
    Ответ написан
    1 комментарий
  • Визуализация php кода?

    dmitrydeco
    @dmitrydeco
    Ответ написан
    Комментировать
  • После выполнения команды php app/console doctrine:schema:update --force происходит ошибка, в чем может быть причина?

    slimus
    @slimus
    Symfony, Golang
    Скорее всего у вас в коде завязано на старую версию бандла, а вы ставите новую. Покажите код на который тут ругается. Ну и sf2.8 сильно устаревшая версия
    Ответ написан
    Комментировать
  • Меняют ли аннотации данные в коде?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В первую очередь, наверное, стоит обратить внимание на это:
    Аннотации представляют собой некие метаданные, которые могут добавлятся в исходный код программы и семантически не влияют на нее, но могут использоваться в процессе анализа кода, компиляции и даже во время выполнения.

    Далее обратите внимание на RetentionPolicy:

    RetentionPolicy.SOURCE - аннотация используется на этапе компиляции и должна отбрасываться компилятором;
    RetentionPolicy.CLASS - аннтоация будет записана в class-файл компилятором, но не должна быть доступна во время выполнения (runtime);
    RetentionPolicy.RUNTIME - аннотация будет записана в class-файл и доступна во время выполнения через reflection.


    Чтобы аннотация "заработала" нужен так называемый Analyzer (Processor)
    Вот, пример процессора:
    https://www.baeldung.com/java-annotation-processin...
    https://thetechstack.net/how-to-process-annotation...
    https://cloudogu.com/en/blog/Java-Annotation-Proce...

    @SQLString(30) String firstName;
    Процессор при помощи рефлексии получит доступ к экземпляру данного класса, затем прочитав данные указанные в аннотации создаст соответсвующую таблицу с соответствующими колонками согласно указанным аннотациям
    Ответ написан
    Комментировать
  • Меняют ли аннотации данные в коде?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Сами по себе аннотации ничего не меняют. Если написать Member member = new Member() то поле firstName экземпляра member будет равно null, а не 30. Нужен какой-то ещё код, который обработает аннотации и в соответствии с ними выполнит какие-либо действия. Обычно обрабатывают аннотации фреймворки, компилятор или его плагины.
    Ответ написан
    2 комментария
  • Имеет ли смысл использовать в проектах свою реализацию аутентификации и авторизации с использованием JWT, когда есть OAuth2?

    @dimuska139
    Backend developer
    Во всех моих проектах используется и авторизация через соц. сети, и авторизация через email-пароль. Я не очень понял, как OAuth2 противоречит использованию JWT-токенов. Вы залогинились через VK, допустим, и бэкенд вашего сайта после этого сформировал пару токенов (access - jwt и refresh - обычный токен). То есть OAuth2 - это по сути делегирование выполнения аутентификации стороннему сервису, где юзер уже зарегистрирован ранее. А после этого (при успешной аутентификации) вы формируете токены (у себя на сервере) и крутите (я про ротацию) сами их как хотите (это к OAuth2 уже не относится). То есть ответ такой: одно не исключает другое.

    Или вы спрашиваете о том, есть ли смысл в 2022 году оставлять возможность регистрироваться через email+пароль? Если да, то это зависит от бизнес-требований. Как стоит задача - так и делайте. Во всех моих проектах есть регистрация в том числе и через email+пароль (и это решал не я).

    Может ли это мне как-то навредить в будущем

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

    P.s. продублирую на всякий ещё и тут: https://gist.github.com/zmts/802dc9c3510d79fd40f9d...
    Ответ написан
    1 комментарий
  • Чем плох md5(md5($pass)) для пароля?

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

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

    Возможно, непонимание происходит оттого, что существует не один, а несколько векторов атаки на пароль.
    1. Поиск хэша по "радужным таблицам" (rainbow tables): огромным базам данных, где собираются заранее посчитанные хэши для любых возможных строк.
    2. Метод грубой силы (bruteforce): перебирать все комбинации символов и применять к ним хэширующую функцию до тех пор, пока она не вернёт искомый хэш.
    3. Поиск по словарю. Похож на брутфорс, но перебор не всех возможных значений, а всего нескольких тысяч самых популярных паролей, типа "123", "password" и пр.
    phpfaq.ru/tech/hashing

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

    Не нужно ничего велосипедить.
    У MySQL же есть репликация из коробки:
    https://habr.com/ru/post/56702/
    https://dev.mysql.com/doc/mysql-replication-excerp...
    Настроить можно разное. Постоянное соединение не нужно.
    Ответ написан
    Комментировать