• Почему составной индекс в MySQL не используется полностью?

    @BorisKorobkov Куратор тега MySQL
    Web developer
    Индекс хранится в B-tree.
    При = найти нужную запись очень легко.
    При > найти нужную ветку гораздо дольше, но все равно быстрее, чем без индекса.
    При order by все равно надо перебирать ВСЁ. А это проще сделать без индекса.
    Ответ написан
    Комментировать
  • На чем в США или Европе сегодня делают сайты?

    @l1l1l1
    По поводу технологий:
    • PHP, фреймворков куча но выделю laravel и symfony
    • Python + django
    • Ruby on rails
    CMS:
    • Wordpress
    • OpenCart
    • Drupal

    Где искать клиентов:
    • Upwork (много проблем с подтверждением личности, но вполне реально работать новичку)
    • Toptal (очень высокий уровень входа, привел просто как пример)
    Ответ написан
    2 комментария
  • Есть ли какие-либо недостатки у статических методов?

    @D3lphi
    Значит так, берем толстую тетрадь, ручку и пишем фразу "Статические методы не имеют отношения к ООП" до тех пор, пока не запомним это на всю жизнь.
    Суть объектно ориентированного программирование, как понятно из названия, заключается в том, что должен существовать объект. Статика существует не в контексте объекта, а в контексте класса! Из этого вытекает то, что на протяжении всего жизненного цикла вашего кода будет существовать лишь одно глобальное состояние статических членов класса.

    Использовать статику нужно в случае, если то, что вы ей описываете принадлежит всей группе объектов, а не одному. Например, у класса Human может быть статический метод numberOfLegs(), который возвращает количество ног у людей. Количество ног - это общее свойство для всех людей (Речь идет о здоровых людях). В данном случае можно было использовать константу класса, но это не так важно, ведь, по сути, константа - это тоже статический контекст. А вот имя - это уже свойство каждого отдельного человека. И очень важно чтобы статические методы не изменяли состояние системы в целом, не содержали побочных эффектов.
    В статические методы можно выносить какую либо служебную логику. Например, метод перевода числа из арабской в римскую запись следует сделать статическим.

    Есть ли у статического варианта какие-то подводные камни

    Большое количество. При чем, не таких уж и подводных. Из-за того, что статика глобальна, она плохо поддается тестированию, ее нельзя замокать. Глобальное состояние плохо поддается отладке. Отсутствует возможность подменить реализацию, так как это позволяют сделать объекты.
    Ответ написан
    4 комментария
  • Certbot для NGinx в Docker?

    @chromimon
    Идея работы certboot проста

    1) По определенному URL (/.well-known) certbot размещает данные (файл)
    2) После чего обращается к серверу LetsEncrypt
    3) Сервер LetsEncrypt опрашивает сайт, на котором размещен certbot с разных адресов и тем самым убеждается, что сервер тот, за кого себя выдает.
    4) LetsEncrypt отдает сертификат/ключ certbot`у

    Как сделать:

    1) Использовать certbot в режиме webroot (не nginx)
    2) В nginx прописать ./well-known чтобы указывал туда, куда certbot положит файл, который проверит LetsEncrypt
    3) В nginx указать брать сертификат/ключ оттуда, куда его положит certboot

    Пути к файлам для пунктов 2) и 3) - нужно указывается в параметрах certbot.

    То есть куда кладет файлы certbot - оттуда берет и nginx


    Сертификат LetsEncrypt действует 90 дней, поэтому нужно его обновлять (разумеется, чаще чем раз в 3 месяца)
    Certbot запоминает свои настройки и обновлять чтобы не обязательно все параметры со всеми путями задавать.

    И, разумеется, nginx должен быть доступен снаружи и именно по тому самуму url "/.well-known"

    Готовое решение
    https://github.com/diresi/docker-nginx-certbot
    Ответ написан
  • Как избежать race condition при переводе денег?

    @frosterdam
    Есть ещё вариант, помимо предложенных ранее. Немного экзотический. Но имеет место быть, т.к. сам лично столкнулся с ним, используя вендорское ПО.

    Это состояние трансфера в каждый момент времени. Грубо говоря, когда создаётся трансфер, то сразу генерируется запись (в отдельной табличке, например) со статусом это трансфера, например, CREATED. Когда выполняется какое-либо действие, то состояние изменяется (изменяется именно поле статус в записи), например, на LOCKED. И если оно LOCKED, то никакие действия с этим трансфером сделать нельзя. Если же трансфер выполнен успешно, то статус переходит в, например, APPROVED или ACCEPTED. А если в ходе трансфера были ошибки, то он переходит в статус, например, DECLINED.

    Как показала практика, то такого решения хватает в 99% случаях.
    Ответ написан
    Комментировать
  • Разве Composer бесполезен в 2017?

    search
    @search
    мама говорит что я особенный
    Композер - это, пожалуй, лучшее что произошло с пхп 5й версии.
    Валить или переубеждать тимлида - это по сути одно и тоже, если присмотреться. Просто демонстрация вашей неспособности брать на себя ответственность.

    Года 3 назад на моей прошлой работе в команду пришел очень толковый проактивный человек, который никого не стал переубеждать. Он просто стал делать правильные вещи. Без объяснений. И без приглашений. Коммитеть юнит тесты. Подключать линтеры. Деклайнить неудачные пулл-реквесты. В итоге он сам стал тимлидом где-то через год.

    Такие дела.

    Не у всех, правда, стальные яйца. Но за проактивность никогда еще не увольняли. Если вы уже создали пулл реквест, то "переубеждение" становится задачей тимлида.
    Ответ написан
    3 комментария
  • Что делать с жалобой на торрент-клиент от хостинг-провайдера?

    hostmaster
    @hostmaster
    DevOps Engineer
    Любой кто участвует в раздаче bittorrent видит IP адреса всех активных участников, это используют компании нанятые правообладателями. Они подключаются с раздаче, собирают IP адреса и/или сохраняют часть сетевого трафика с этих IP для возможного доказательства в суде. Зачем они начинают писать жалобы провайдерам и шантажировать пользователей, так в некоторых европейских странах это грозит серьезным штрафом.

    Да провайдер VPN может вас сдать "с потрохами". "не ведем логов" это очень не конкретная формулировка, если они пришли к вам значит логи есть. Они могут называть это метаинформацией но это все равно логи.

    Поэтому внимательно читаем правила использования и проверяем репутацию провайдеров. Проверяем разрешено ли использование bittorrent и что провайдер будет делать при получении DMCA notice. Не гонимся за дешевизной.

    На вопрос что делать. Предположим вы в России, правообладатель скорее всего нет, где провайдер VPN не очень важно. Тогда Вам практически ничего не грозит, вы вне их юрисдикции. Подавать на Вас в местный суд долго дорого и бесперспективно, по этому лучше бы Вам все отрицать. Провайдер может Вас сдать, однако вряд ли будет это делать без решения суда иначе это серьезное нарушение защиты персональных данных. Максимум на что они пойдут это отключат Ваш аккаунт. Поэтому "нет не качал, не знаю, не видел, не в курсе вообще о чем вы"
    Ответ написан
    Комментировать
  • Как лечить спину айтишникам?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Идете к врачу, получаете направление на МРТ.
    Идете на МРТ, делаете снимок.
    Идете к врачу, понимаете что именно у вас со спиной - ушиб, воспаление, защемление нерва, протрузия, грыжа.

    Слушаете рекомендации врача что с этим делать. Решаете как дальше жить.
    Просто без диагноза по МРТ идти в зал, особенно если у вас уже грыжа/протрузия - значит убить себе спину окончательно. Идти на массаж с защемлением нерва или воспалением - мало смысла. Там нужно подождать, возможно даже поколоть что-то, если воспаление зашло далеко и само не хочет проходить.

    В общем, первым делом - диагноз. Без него - лучше вообще ничего не начинать.
    Ответ написан
    4 комментария
  • Установка ubuntu без флешки?

    @pfg21
    ex-турист
    Андроид-телефон с рутом, на него поставить прложение drivedroid
    в телефон залить iso-образ, путь "куда" посмотреть/настроить (я обычно настраиваю на микросд) в настройках drivedroid - image directories.
    потом запустить drivedroid, он покажет содержимое диры
    долго нажать на нужный образ и выбрать в менюшке convert image using isohybrid
    После чего кортко нажать на образ и смонтировать на одно из "посадочных" мест (обычно два).
    drivedroid перенастроит усб-подсистему андроида (вот ипонадобиться рут) и для компутера телефон будет отображаться как усб-привод с образом, из которого можно загрузиться.
    перезагрузить комп - войти в меню выбора загрузочного устройства и выбрать устройство linux image чегото там
    после чего пойдет загрузка с iso-образа.
    кучу линух и виндовс так ставил.

    кучу iso-образов можно качнуть из самого drivedroid
    Ответ написан
    Комментировать
  • Как определить необходимую мощность хостинга для сайта на Angular 5, NodeJS, PostgreSQL?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    На первое время большой посещаемости не ожидаю - до 500 активных пользователей в день.
    Самого слабого решения - должно вполне хватить при условии, что у Вас там нет сумасшедших фоновых серверных вычислений или рендеринга.

    При домашнем сервере, для Вас важными критериями будут:
    1. Стабильность (постоянство/uptime) соединения сервера с Интернет-сетью.
    2. Загруженность интернет-канала до вашего сервера, особенно при параллельных сессиях.

    Советую брать что-то из IoT-решений для малого энергопотребления и бесшумной работы со стандартными комплектующими: линк
    Ответ написан
    2 комментария
  • Как организовать онлайн-трансляцию с нескольких смартфонов?

    keydon2
    @keydon2
    ...
    Неплохо для вчера поставившего линукс.
    Публикуйте с каждого смартфона разные потоки (разные названия потоков). Соответственно у вас будут разные ссылки, которые вы сможете принимать в OBS.
    В целом у вас неплохое и что важно бесплатное и опенсурсное решение.
    Проследите чтобы у вас хватало канала(к OBS, для гарантии битрейт потока*2*количество потоков) и процессора(т.е. это не должна быть совсем нищенская VPS) и интернет со смартфонов должен быть достаточно стабильным. Ну и обязательно заранее протестируйте за день и за час до трансляции. На всякий случай предусмотрите бекап вроде тытрубы.
    Удачи.
    Ответ написан
    3 комментария
  • Как програмным путем, закрепить ярлык на "Начальном экране" Win 10?

    @azarij
    В меру опытный никто
    для c:\windows\system32\calc.exe сначала создаем шорткат в C:\Users\USER\AppData\Roaming\Microsoft\Windows\Start Menu\Programs.
    потом повершелом:
    (New-Object -ComObject shell.application).namespace('c:\windows\system32\').parsename('calc.exe').invokeverb('pintostartscreen')
    странно, но работает вроде
    Ответ написан
    2 комментария
  • Для чего используется Java в современном вебе?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вот я, как раз сбежал обратно на яву после 8 лет программирования на python!
    И несказанно этому доволен - java8 стала очень и очень приятная, ну а бонусом прирост в скорости на моем приложении - 200х!
    И так, как минимум рекомендую для web посмотреть jooby.org, sparkjava.org и конечно же spring boot.
    На jooby как раз пишем маркет, очень весело и современно.
    Да, на котлин пока не смотрел.
    Ответ написан
    2 комментария
  • Что нужно знать чтобы стать начинающим системным инженером (devops)?

    Singaporian
    @Singaporian
    Статья, которую должен прочитать каждый.

    DevOps - не профессия. Это название культуры доставки кода от разработчика (dev) через тестировщиков и до сисадмина(ops) и обратная связь по этой цепочке.

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

    Профессии, которые отрисуются в процессе построения этой методологии следующие:
    • Build Engineer - инженер, который управляет зависимостями, сборками, конфликтами кода.
    • Release Engineer - инженер, который управляет репозиторием кода (кто куда и по каким правилам мерджится и откуда бренчуется). Пожалуй, это самая сложная задача в больших проектах. Особенно с нестрогим Agile или в Waterfall.
    • Automation Engineer - инженер, который занимается автоматизацией рутинных задач. Обычно деплоймент, автотесты, etc. Все эти buzz-слова типа Docker - его инструментарий.
    • Site Reliability Engineer - инженер, который поддерживает ops (апгрейды, расширение железа)
    • Configuration Manager - непонятная мне специальность. Жуткое порождение HR-специалистов, давящих на громкое название позиции. Можно было бы пойти дальше и назвать специальность ZooKeeper Vice President

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

    Почти всегда все эти роли совмещают один-два человека. Ну это зависит от качества кода.
    Назовем эту компанию BRAE/CM для краткости.
    Задача BRAE/CM состоит в том, чтобы программный код, который выходит из под пера программистов, оставался на контроле программистов и сисадминов одновременно. Программисты, равно как и сисадмины, благодаря DevOps-подходу, имеют возможность и даже обязаны обслуживать код на протяжении всего жизненного цикла от планирования архитектуры до мусорки.
    То есть сисадмины начинают рулить еще до того, как код попадет к ним - на ранних стадиях, а программисты продолжают рулить своими задачами уже после того, как код от них ушел к сисадминам - на поздних стадиях. И все это прозрачно друг для друга и все проблемы и решения ходят туда сюда и не спотыкаются о бюрократия в стиле "ничего не знаю, мы код уже закоммитили, у меня тут свои проблемы, у них сломалось - пусть сами и чинят".

    Так вот эта работа - завершающая стадия системного администратора и начинающая стадия разработчика. Поэтому не бывает Junior BRAE/CM.
    BRAE/CM бывает всегда только Senior в системном администрировании и всегда Junior в программировании.

    Еще один момент. В домашних условиях можно выучить инструменты на базовом уровне. Но не поварившись в одной кастрюле с реальными разработчиками, смысл всей этой кухни не понять. Так что сразу забейте. Но если хотите, могу описать пошаговый длинный путь как стать RE/CM:

    Сразу оговорюсь по языкам.
    У каждого языка свое предназначение. Java чаще используется в корпоративном секторе. Там много серверов и сложные бизнес-приложения. Поэтому Java-мир очень чувствителен к таким понятиям, как "технинческий долг" и "управление процессом разработки". И именно поэтому именно там все основные вакансии DevOps и именно там будет самый интересный опыт.
    Кроме Java, традиционно сильная DevOps-культура у Ruby. Практически все остальные языки не имеют столь развитой и популярной инфраструктуры в в данном контексте и потому вам скорее всего будут неинтересны.
    Другими словами, если в среде разработчиков выбор языка - тема для холивара и эмоций с миллионами сравнительных анализов с противоположными результатами, то для специалистов по DevOps выбор очевиден и прозрачен. Java - это одновременно самые интересные задачи, самый богатый toolset, самый большой выбор вакансий и самые высокие зарплаты.

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

    Итак, что делать:
    1) Почитать книги Head First по Java. Пройти курсы Java на EDX.
    2) Освоить SVN. Есть прекрасные тьюториалы. (GIT освоим позже)
    3) Поставить VirtualBox (не VMWare!!!)
    4) Написать простенькое приложение. Код коммитить в SVN. Собирать его при помощи maven.
    5) Поднять на отдельной виртуалке Jenkins. Он должен брать код приложения на SVN и запускать свой локальный maven для сборки.
    6) Написать модульные тесты (unit tests) своего кода. Пусть maven и их прогоняет.
    7) Поднять где-нибудь Nexus. Усложнить задачу maven, чтобы он теперь складывал все в Nexus. Если maven'у потребуются внешние библиотеки, он тоже не сам должен ходить в интернет, а через Nexus (Central repo).
    8) Настроить на своем десктопе vagrant так, чтобы он с нуля создавал виртуалки VirtualBox.
    9) Создать виртуалку DEV через vagrant. При этом ansible должен на ней что-нибудь настроить (например установить JDK)
    10) Научиться деплоить jar/war из Nexus на виртуалку DEV чем-нибудь. Чем - не посоветую, так как сам работаю с очень сложным IBM uDeploy, а это точно не для новичка. Посмотрите в сторону Rundeck или чего-то такого. Может самим Jenkins'ом задеплойте.
    11) Напишите интеграционные АВТОтесты. На чем хотите (как вариант: Selenium).

    Усложняем систему.
    12) Донастраиваем Jenkins: собирает maven-проект; выкладывает на Nexus; дергает vagrant/ansible для создания виртуалки SIT (system integration test); деплоит приложение на SIT; прогоняет автотесты на SIT; удаляет виртуалку после успешного завершения автотестов.
    13) Прикручиваем SonarQube в Jenkins для статического анализа кода. Исправляем косяки своего кода, согласно полученным от SQ рекомендациям.
    14) Прикручиваем мониторинг Sensu.
    15) Пишем нагрузочные тесты на чем-нибудь. В идеале потрогать два инструмента: jMeter и Gatling.
    16) Как и в 12-м шаге прикручиваем в Jenkins автоматизацию создания виртуалки SLT (Stress/Load test) и прогона на ней тестов. Только уже лоад-тестов(обязательно) и стресс-тестов(опционально) соответственно.
    17) Дописываем в свое приложение какой-нибудь функционал, чтобы использовалась база.
    18) Придется познакомиться с LiquiBase. Деплой SQL руками делать запрещено.
    19) Перейти на Docker (то есть теперь приложение выкладывать не напрямую в ОС, а внутрь докера)

    20) Денек на то, чтобы почитать про Agile, Scrum, Waterfall и прочие организационные порядки.

    А теперь немного уходим в управление проектом:
    21) Поставить Atlassian Jira. Разобраться, чем отличаются Epic, Story, Task, Sub-Task. Создать себе подобной этой структуре фронт работ (делать его не придется, просто нафантазируйте).
    22) Поставить Atlassian Stash и связать его с Jira.
    23) Переехать со своего SVN на GIT, предоставленный Stash'ем.
    24) Пройти Git-тьюториал какой-нибудь. Инструмент очень нетривиальный.
    25) Взять любую таску в работу. При этом в начале работы сделать новый Git branch из тикета Jira.
    26) По завершению работы запустить всю построенную ранее цепочку, но уже для своего брэнча.
    Дайте попробую угадать: вам пришлось скопировать все джобы и переписывать в них ветки?
    27) Сделать джобы нормально. Чтобы одни и те же можно было использовать для любых веток - по аналогии с принципом программирования "reuse code". У Вас будет reuse job :)
    28) Сделать pull request, самому сделать code review и самому себя же за-approve'ить. После этого сделать merge своей ветки в master.
    29) Сделать сборку брэнча автоматической по git-hook (или SCM pool)

    30) А теперь высший пилотаж: к чертям Docker, Copistrano и прочую buzz-word-hipsters-галиматью. Теперь вы с этим знакомы и сможете применить, но пришло время выгрызать этот детский сад калёным железом. Теперь вы доставляете код только как .deb-пакеты. Это значит, что вы:
    a) разбиваете control-файл на несколько пакетов, возможно с lib*,
    b) оверрайдите все ~20 dh_ в файле rules так, чтобы все это соответствовало вашим наработкам в предыдущих пунктах.
    c) раскидываете файлы по .install
    d) самое тяжелое: готовите .preinst, .postinst, .prerm, .postrm файлы СОГЛАСНО ИХ ПРИМЕРАМ .ex, сгенерированным dh_make - то есть с разбиемнием на update/configure/broken-install и что там еще есть. Это означает, что при переустановке, при апгрейде, при даунгрейде, при удалении и при пурдже, у вас будут разные сценарии, каждый из которых должен быть проработан досканально. На этом этапе вы также познакомитесь с понятием "регрессионные тесты".

    Ну как бы базовый вариант вот. Но это далеко не весь инструментарий и путь. Это так, для начала.
    Кроме этого неплохо бы познакомиться с Puppet (это не очень подходит для DevOps, скорее для рядовых админов с кучей серверов, но это очень популярный инструмент ввиду того, что никто не понимает, что такое DevOps и вас скорее всего заставят управлять сотней серверов, вместо релиз инжиниринга). А так же нужно познакомиться с операционными системами NixOS (обязательно) и CentOS/Debian (опционально, но я бы палкой бил тех, кто не знает эти OS). Кроме того, надо базово ориентирваться в PostgreSQL.

    Внимание, важный момент, который должен быть вшит на уровень подсознания у DevOps-ориентированного инженера: вы все время пробуете новые инструменты. Вы всегда будете находить что-то очень отличное. Знаете Nexus как свои пять пальцев и он решает почти все проблемы? Отлично! Теперь выкидываете Nexus и ставите Artifactory. Знаете хорошо CentOS? Круто! Теперь пробуете все это проделать на Windows или Debian. Потому что только когда вы сможете сравнивать инструменты, ваша работа будет ювелирной. А DevOps бывает либо ювелирным, либо он не DevOps. Вы должны быть языко-независимым, платформо-независимым и инструменто-независимым.

    Что будет дальше? Дальше вы начнете работать с микросервисами (сотни одинаковых контейнеров в облаке, которые должны как-то работать друг с другом без ручной конфигурации). Тогда познакомитесь со всякими Consul, ZooKepper и кучей инструментов AWS/OpenStack.
    Ответ написан
    13 комментариев
  • С чего начать изучение ядра sf 4?

    voronkovich
    @voronkovich
    Вы имеете ввиду HttpKernel? Тогда начните с документации: https://symfony.com/doc/current/components/http_ke... :)

    В Symfony всего три компонента (на мой взгляд), которые и составляют "ядро":
    • HttpKernel
    • HttpFoundation
    • EventDispatcher

    В кратком изложении можете про них почитать тут: https://gnugat.github.io/2016/02/03/ultimate-symfo...
    Ответ написан
    Комментировать
  • Взял первый заказ на UpWORK от индуса. Как разрулить проблемы?

    coderisimo
    @coderisimo
    Я в подобных случаях поступал несколько иначе. Возможно это выглядит странно, но я не спешил открывать проект. Я писал заявку, затем предлагал ознакомиться с фронтом работ и даже пробовал что-то , без открытия работы на апворке. Заказ -фикс, так что вы в любом случае получите оговоренную сумму, но получите возможность оценить масштаб катастрофы )))) и в случае чего не ввязываться.
    Впрочем, данный подход не застраховал меня от похожей ситуации... )))) Увы. ))
    Ответ написан
    6 комментариев
  • Какую базу данных использовать для 93 млн строк (товары)?

    @awesomer
    93 млн. - сама по себе смешная нагрузка для современных СУБД на современных компьютерах.
    Выбор СУБД зависит от того - а что именно вы собираетесь с этой базой данных делать.- в вопросе это не указано.

    Ну например, если ваша цель быстро искать в это БД товары, а ваши 30 колонок - это фильтры, то отлично подходит СУБД для именно что полнотекстового поиска (пусть вас не смущает название, для фасеточного поиска она тоже подходит отлично). Это, к примеру:

    • если вы ориентированы на скорость SphinxSearch
    • если вам нужен кластер, то это ElasticSearch
    • если вам нужны традиционные инструменты типа SQL, - то это PostgreSQL, MySQL.


    Если же задача другая - то идеальным выбором может быть и другая СУБД.
    Нужны детали.

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

    Рассмотрим задачу быстрой перезаписи - вы имели ввиду все 90 млн. перезаписывать целиком? Не частично. А вот это будет действительно проблемой. Мало какая из СУБД способна на быстрые изменения такого объема.

    Ну и третий раз повангую - максимально быстрый доступ к данным - это если данные размещены в оперативной памяти. Один из наиболее развитых инструментов, с размещение в оперативной памяти и с функционалом СУБД - Tarantool. Быстрее, чем in-memory DB, к которым относится Tarantool - и вариантов нет.

    Но понадобится соответствующее количество оперативки.

    Если оперативки мало, то можно глянуть Aerospike. Это "почти in-memory DB". Но объемы данных могут быть огромны, при небольших запросах к оперативке. От оперативки требуется только целиком вмещать индексы, а не сами данные.

    Короче, ванговать мне надоело.

    У вас нет постановки задачи - ответить вам посему и нечего конкретного невозможно.
    Ответ написан
    Комментировать
  • Figma и заказчик?

    @McBernar
    Не заказчики, а клиенты :) Забудьте это дурное слово.

    Все просто — предупреждайте клиента, что работаете в Фигме и никакого PSD у вас нет, потому что это прошлый век. Если он говорит, что его разработчики работают с PSD, просто объясните ему, что, во-первых, скорее всего они работают и с Фигмой, а если и не работают, то очень обрадуются тому удобству, которое она дает — возможность сразу смотреть параметры шрифтов, все отступы и расстояния, цвета, копировать css-сниппеты и очень удобно вытаскивать картинки из макета.

    Клиент не должен разбираться в современных подходах к разработке — для него Фотошоп еще долго будет стандартом. Но и не надо идти на поводу у клиента — просто объясняйте ему все как есть. У меня за три года, как я полностью перешел на Скетч, не было ни одного клиента, который бы все-таки потребовал Фотошоп. Короч, не надо бояться разговаривать. Клиент не барин, а партнер.
    Ответ написан
    8 комментариев
  • Как внедрять Bootstrap 4.0 в проект 2003 "постепенно"?

    @sidni
    Php Developer
    Подключите его первым файлом имеющихся стилей и посмотрите насколько он развалит верстку и шрифты, далее попытаться своими стилями насколько это возможно вернуть сайт в исходное состояние и если это получиться то новый функционал вы можете смело верстать на бутсрапе
    Ответ написан
    Комментировать