Задать вопрос
  • Как сжать папку .git?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    1. git хранит всю историю. Но встроенный garbage collector может удалять коммиты, которые не привязаны ни к какой ветке. Поэтому для начала:
    * Удалите ненужные бренчи.
    * Выполнте "git gc --aggressive --prune" после удаления бренчей.

    2. Затем нужно разобраться с тем, что у вас занимает место. Если вы напихали крупных файлов в ваш гит репо и они присутствуют в активном бренче, то никак их не удалить. Точнее можно попробовать удалить сами файлы вручную или при помощи bfg-repo-cleaner, но при этом надо синхронизировать это со всеми участниками. Если у вас гит репо локальный и никто им не пользуется, это проще. Но при этом вы ломаете коммиты - откатиться на них уже будет нельзя.

    3. Наконец следует потратить вечерок и почитать про git-flow, или даже посмотреть 3-4 ютуб ролика от разных авторов которые показывают разные флоу работы с гитом. Там вы поймете почему и зачем люди пользуются rebase, squash, зачем удаляют ненужные ветки и содержат dev/master в хорошем состоянии, когда там нет промежуточных коммитов с commit message типа "апечатка" "забыл" "еще" и подобного мусора. И гит репо занимает минимальный объем.
    Ответ написан
    Комментировать
  • Таск-трекеры - JIRA vs YouTrack - что лучше?

    @inkvizitor68sl
    Linux-сисадмин с 8 летним стажем.
    YouTrack лучше. Просто потому что хуже JIRA уже ничего не может быть)
    Ответ написан
    3 комментария
  • Как сделать localhost безопасным?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Используй docker
    Ответ написан
    Комментировать
  • Как на мастер залить контент другой ветки, избежав всех конфликтов?

    Это, конечно, странная ситуация, но такое бывает, поэтому лучше всего сымитировать слияние, где содержимое одной ветки будет полностью заменено другой:
    git checkout master
    git commit-tree -p master -p feature -m "Overriding master with feature" feature^{tree}
    12346aa23590aa
    git merge --ff 12346aa23590aa


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

    Преимущества:
    • Выглядит как обычный коммит-слияние
    • Корректно сохраняет историю веток
    • Не надо проходить по разработчикам для выполнения каких-либо команд
    Ответ написан
    3 комментария
  • Что думаете о Livewire и Inertia.js?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    ... в каком контексте? Быстро собрать МВП - сойдет.

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

    Двух минут достаточно, что бы понять, что на этом говне ни в коем случае нельзя строить реальный проект. Напоминает мне Laravel и все его суб-проекты (типа Laravel Nova) в целом - вроде все круто и радужно, пока твой проект размером с пару страниц. А как только хочешь больше - начинаешь желать избить Тэйлора и других контрибьюторов.
    Ответ написан
    Комментировать
  • Считать ли опыт разработки под битрикс полноценным опытом в php?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Мало того, что не прокачает, так ещё и весь опыт будет бесполезен в другой стране.
    Ответ написан
    Комментировать
  • Как создать пользователя с правами root и в таком же каталоге?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    1. никогда не делайте так
    sudo passwd 634gdf264h4
    Ваш пароль в открытом виде останется в bash history
    2. Забудьте про рута вот вообще, и никогда не трогайте его руками
    3. Никогда не запускайте ничего от рута - из сервисов и темболее WEB.

    Умоляю, закажите настройку у ТП хостера или на фрилинсе где-то, не плодите ботнет-овские ноды.
    Ответ написан
    Комментировать
  • Как настроить Xdebug в docker?

    denisbondar
    @denisbondar
    Python, PHP developer
    Полное описание использования xdebug с PhpStorm и интерпретатором в Docker-контейнере описано у меня в статье. Может быть кому-то пригодится.
    Ответ написан
    4 комментария
  • Как пробросить USB-принтер в LXD контейнер?

    @cyber-punk Автор вопроса
    Окончательное решение найдено!
    Получилось пробросить, установить и заставить печатать принтер HP LaserJet 1000 (win-принтер) из контейнера LXD.

    Итак, за эталон берем конфиг от Ubuntu 14.04 на котором все работало и пытаемся сделать тоже самое, но в LXD.

    Для проброса USB-принтер в LXD контейнер (в моем примере я использую принтер HP LaserJet 1000, контейнер предварительно развернут на базе Ubuntu 16.04 и называется "print") необходимо проделать следующее:
    • Выяснить, куда подключен принтер

    Для этого на хосте вводим lsusb
    root@aspire-5520g:~# lsusb
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 004: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
    Bus 001 Device 003: ID 5986:0102 Acer, Inc Crystal Eye Webcam
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 03f0:0517 Hewlett-Packard LaserJet 1000
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

    Принтер подключен на Bus 003 Device 002.
    • Проверить, в контейнере, а при необходимости доустановить, поддержку usbutils

    Переходим в контейнер:
    root@aspire-5520g:~# lxc exec print -- bash
    root@print:~# lsusb
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 004: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
    Bus 001 Device 003: ID 5986:0102 Acer, Inc Crystal Eye Webcam
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 03f0:0517 Hewlett-Packard LaserJet 1000
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

    В моем случае поддержка usbutils и поддержка принтеров HP, через hplip, уже установлена.
    Для тех у кого не установлена, нужно в контейнере выполнить:
    root@print:~# apt install usbutils hplip -y
    • Далее на хосте нужно выполнить непосредственно проброс USB-принтера в LXD контейнер.

    На предыдущих этапах мы выяснили, что принтер подключен на Bus 003 Device 002 на хосте.
    Теперь необходимо выяснить кому принадлежат и с какими правами файлы устройств на хосте, а также цифровой идентификатор группы gid.
    Для этого выполним:
    root@aspire-5520g:~# ll /dev/bus/usb/003
    итого 0
    drwxr-xr-x 2 root root       80 Июл 14 21:00 ./
    drwxr-xr-x 6 root root      120 Июл 14 21:00 ../
    crw-rw-r-- 1 root root 189, 256 Июл 14 21:00 001
    crw-rw-r-- 1 root lp   189, 257 Июл 15 10:56 002

    Интересующая нас информация это файл 002, который представляет из себя char-устройство, владельцем которого является пользователь root и группа lp. Права у этого файла 0664.
    Теперь выясним числовой идентификатор группы lp:
    root@aspire-5520g:~# cat /etc/group | egrep lp
    lp:x:7:

    Числовой идентификатор группы 7.
    Ну и наконец, выполним создание этих устройств в контейнере. Для этого выполним:
    root@aspire-5520g:~# lxc config device add print lj1000 unix-char path=/dev/bus/usb/003/002 mode=0664 gid=7
    Device lj1000 added to print
    root@aspire-5520g:~# lxc config device add print lp0 unix-char path=/dev/usb/lp0 gid=7
    Device lp0 added to print

    (По умолчанию unix-char устройство создается с правами 0660, поэтому задание mode=0660 во второй комманде можно опустить)
    • Устанавливаем принтер:
    root@aspire-5520g:~# lxc exec print -- hp-setup -i
    Действуем согласно инструкции выводимой скриптом установки.
    По завершении, скрипт предложит распечатать пробную страницу, соглашаемся и прыгаем от счастья по поводу успешного проброса принтера в контейнер LXD.
    Ура товарищи!!!
    Для добавления автозапуска контейнера после перезагрузки выполним:
    root@aspire-5520g:~# lxc config set print boot.autostart true
    root@aspire-5520g:~# lxc config set print boot.autostart.delay 5

    Это позволит автоматически через 5 секунд после перезагрузки хоста запустить контейнер.

    Единственная проблема с которой можно столкнуться - это нумерация устройства на шине, после передергивания USB шнура в другой порт или в тот же порт с небольшим промежутком времени, но это уже совсем другая история. В качестве наводки могу сказать, что можно привязать устройство к шине (при условии подключения в тот же порт USB) посредством серийного номера устройства и такой замечательной вещи, как udev.
    Всем спасибо за внимание!!!
    Ответ написан
    Комментировать
  • Можно ли изменить значение переменной php при клике на кнопку без перезагрузки страницы?

    Поступил запрос от браузера -> запущен php-скрипт -> скрипт отработал -> выдал ответ браузеру -> выполнение скрипта завершилось

    Вот жизненный цикл любого php-скрипта. После завершения выполнения скрипта все переменные (и их значения) уничтожаются. Т.е. между запросами не сохраняется ничего - нечего увеличивать.
    Однако, Вы можете, при загрузке страницы, забирать значение $kol ява-скриптом, по нажатии на кнопку, ява-скриптом же, увеличивать сохраненное значение, передавать в функцию на php (или сразу считать ява-скриптом же эту функцию, если возможно) и в html ява-скриптом, опять же, вывести результат.
    Ответ написан
    1 комментарий
  • Как лучше реализовать систему фильтрации?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    В сторону товарищей майоров который читают всю переписку.

    Потому что не знаю вариантов как можно запретить писать например вот так:
    санasолСОБАКАyaндекcTOCHKAru - всё в латиниц переведите, там и поговрим.

    или так
    мой телеphone: se7en девять три раза 1 два 45 шисдисят семь


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

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Привлечение внимания

    Это про наружную рекламу, про баннеры, но никак не про сайт. Вот формирование снипетов для поисковой выдачи - можно считать привлечением внимания. А к дизайну это каким боком? Человек уже на сайте. Он уже где-то кликнул, по тому что привлекло его внимание. Уже на сайте.
    Больше клиентов (с мобильных устройств) благодаря адаптивному дизайну

    Тут вообще мимо. Меньший показатель отказов - допускаю. Но опять таки - "адаптивный дизайн" это вопрос верстки, при чем тут дизайн?

    А теперь как реально выглядит ответ на вопрос:
    Какие проблемы решает качественный дизайн сайта?

    - иммидж
    - снижение кол-ва отказов
    - увеличение конверсии
    остальные 15 пунктов, так или иначе будут просто следствием из этих трех.
    Ответ написан
    Комментировать
  • Какие проблемы решает качественный дизайн сайта?

    @Insayt
    Ну тут надо уточнить, что дизайн сайтов/приложений не является продуктом. Это услуга.
    "Картошка" - это продукт. "Доставка картошки" - это услуга. Вы предоставляете услуги, соответственно ставить вопросы надо исходя из понимая этого.

    Бизнес выбирает поставщика услуг по нескольким пунктам:
    1. Доступность - важно что бы было легко вас найти.
    2. Понимание проблем клиента - важно что бы поставщик услуг четко понимал как его деятельность скажется на нашем бизнесе.
    3. Скорость реакции сотрудников и их вежливость - тут думаю все понятно, если на email отвечают неделями и на от*бись, то такой поставщик услуг не получит заказ.


    В контексте вашего вопроса речь идёт о "Понимании проблем клиента".
    И тут важнее не написать большой список, а выбрать конкретный пункт и давить на него. Объясню:

    1. Увеличение продаж - на этот пункт вы влияете очень косвенно (ниже объясню почему). Потребитель больше будет смотреть на цену и скорость доставки, чем на форму кнопочки "Перейти в корзину".
    2. Привлечение внимания - это тоже не ваша работа. Привлекают внимание маркетологи. Клиент даст рекламу в директ, и она будет привлекать внимание. Если вы занимаетесь дизайном рекламных баннеров, то тогда можно говорить о привлечении внимания, но в контексте вашей деятельности вы привлечением внимания к продукту/услуге заказчика не занимаетесь.
    3. Большая конкурентоспособность/отстройка от конкурентов - это тоже не про вас. Конкурентоспособность никак не соотносится с визуальной составляющей. Вы можете сделать идеальную упаковку для пиццы, но если её везут 3 часа, то никакой конкурентоспособности быть не может.
    Отстройка от конкурентов - это тоже не про вас. Немного погуглите про то что такое "отстройка от конкурентов", и поймете это. Отстраиваются на уровне позиционирования и бизнес процессов. Например вы открыли магазин продуктов возле дома. Через пол года рядом открывается пятерочка. Вы начинаете проседать по доходам, потому что пятерка дает лучшую выходную цену для клиента, и тогда вы решаете отстроится от конкурента, убираете весь ассортимент и становитесь магазином "Колбасы от Васи". И расставляете на прилавке 1 вид продукта, но в широком ассортименте, который пятерочка никак не может себе позволить, потому что им не выгодно иметь широкий ассортимент одной товарной позиции. Вот это и есть отстройка.

    А теперь к важному. Продавайте "Повышение конверсии". И только это.
    Бизнес делает рекламу, тратит на это деньги, и тут появляетесь вы и говорите, мы можем сделать новый дизайн вашего сайта, уменьшить "боль" потребителя от использования, что повысит вашу конверсию на N процентов + увеличит кол-во повторных заказов от существующих клиентов. Повышение конверсии даст большую эффективность вашим рекламным затратам, потому что вы можете потратить 100500 миллионов денег, но если вся реклама будет вести на непродуманный, некрасивый и абсолютно неюзабельный лендинг - ваши деньги вылетят в трубу. Такая постановка вопроса будет очень понятна любому бизнесу.

    Так что вывод - переимуйте абстрактный пункт "Увеличение продаж" в более конкретный "Увеличение конверсии", и продавайте его.
    Ответ написан
    1 комментарий
  • В чем концептуальный смысл ухода с jQuery на более современные front end инструменты?

    vicodin
    @vicodin
    Имею некоторый опыт
    В лучшей организации кода => более быстром его написании и удобной поддержке в дальнейшем.
    Ответ написан
    Комментировать
  • Где удобно хранить куски кода?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Целые, но мелкие куски можно вынести в Live Templates (бонусом -- быстрый набор в 2-3 символа + Tab)
    сюда можно засунуть разные GridView, ListView и прочие куски кода, которые нужны часто, но представляют собой 1-2 функции

    Код, похожий на инструкции можно уже засунуть в Gist (есть плагин для Шторма)
    Ответ написан
    Комментировать
  • В чем основные отличия mySQL от Postgre?

    alekciy
    @alekciy
    Вёбных дел мастер
    Использую обе РСУБД. Предпочитаю Postgresql, хотя конечно начинал с MySQL. Из того, что на практике приводит к такому предпочтению:
    1) Отсутствие проблем на по сути пустом месте. Из последнего было, в одной базе есть таблицы с большим количеством текстовых полей. При вставке в одно из них чуть меньше 200 символов он отказывался ссылаясь на то, что переводите на динамические. И я значит должен начать курить тему движков мускула и выяснять, что мне оказывается нужна Barracuda. При той же InnoDb. Хочется спросить такого черта.
    Или вот еще вспомнил. При попытке записи в поле данных, больше чем это возможно для данной колонки он делает запись тупо обрезав лишнее. И проблему могут не заметить очень долго вплоть до момента когда подниматься из бэкапа поздно, там все уже битое.
    Или вот взять и сменить могут дефолтные значение переменных в рамках минорной версии. База после накатки апдейтов и ребута может просто не подняться. На хабре даже была статься по этому поводу.
    В общем множество подобных ситуаций после которых так и хочется воскликнуть "какого черта?!". Со слоном я не помню ни одной такой ситуации.
    2) RETURN во вставках/обновлениях. Можно получить в ответе любое поле такого запроса. И ни каких тебе танцев с LastInsertId.
    3) В последних версиях есть UPSERT которого очень не хватало.
    4) В целом более строгий подход и нет ощущение бардака.
    5) После запуска Postgres Pro появилась полностью руссифицированная документация. Помогает вкатиться в тему новичкам.

    Из минусов некоторое время было отсутствие адекватного UI клиента. Но после того, как стал использовать PhpStorm эта проблема была закрыта.
    Ответ написан
    1 комментарий