• Как делается backend на Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Выбирайте PHP. Месяца не хватит даже на изучение материала.
    Ответ написан
    5 комментариев
  • Можно/целесообразно ли делать анимированные переходы в вебе?

    @karambafe
    Классный пример, спасибо, сохранил себе в закладки.

    Тут сильно зависит от технологий, которые применяются в проекте. Если это стандартный серверный рендеринг, то такое сделать не получится. В данном же случае используется изоморфный фреймворк nuxt.js, который при переходам по ссылкам внутри проекта использует клиентский рендеринг, а при "прямой" загрузке страницы - серверный.
    Именно за счет клиентского рендеринга можно хранить глобально определенные данные и делать такие смены интерфейса

    Тут 2 подводных камня:
    1. Красивые анимации - это всегда сложно и долго для тех, кто с ними плотно не работает.
    2. Почти вся информация забирается с сервера, а значит надо при переходе на новые страницы постоянно делать запросы, выполняющиеся определенное время. В этот момент в интерфейсе желательно вставлять какие-то заглушки, которые потом аккуратно будут заменяться на новый контент.
    Ответ написан
    2 комментария
  • Стоит ли учить Grid и Flex css?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Да. Учите и то, и другое.
    Ответ написан
    Комментировать
  • Стоит ли учить Grid и Flex css?

    Vlatqa
    @Vlatqa Куратор тега CSS
    Нет
    Вся эта мода приходит и уходит
    Учите таблицы, они будут жить вечно
    Ответ написан
    2 комментария
  • Какой выбрать монитор для верстальщика?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Какой выбрать монитор для верстальщика в 2019 году?

    широкоформатный или 2 вместо одного

    Если ли смысл в 4k?

    нет

    Не раздражают ли верстальщиков изогнутые формы?

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

    Как вы считаете?

    программно или в уме
    Ответ написан
    17 комментариев
  • Правильно ли реализовал структуру БД?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Самая распространенная ошибка всех начинающих - это наименование полей.
    Заимейте привычку именовать основные поля, по которым будут связи в будущем, с именем таблицы.

    если таблица authors, то ключевое поле должно быть authors_id
    если таблица book, то поле обзывайте book_id

    Это сейчас у вас 3 таблицы и можно понять что куда к чему относится.

    А когда завтра вы будете джоинить по 5-6 таблиц, вы просто запутаетесь где и что с чем джоинится.
    Вот самый обычный пример с 9 джоинами. Если бы во всех таблицах были бы поля просто id, я бы голову сломал чтобы сджоинить. И это самый обычный запрос. А если сюда еще добавить интерсекты, кростабы, группировки, условия и вложенные запросы, то все колом встанет, чтобы интуитивно понять куда что с чем джоинить.

    SELECT
    				o.order_id,
    				lpad(o.order_id::text, 8, '0') AS order_number,
    				o.order_date,
    				o.order_state,
    				o.member_id,
    				o.contacts_data_id,
    				o.invoice_uuid,
    				o.invoice_number,
    				z.organization_short_name AS company,
    				z.organization_id,
    				y.organization_business_number AS bin,
    				f.contact_firstname AS firstname,
    				f.contact_lastname AS lastname,
    				d.*,
    				p.*,
    				x.supply_id,
    				i.invoice_id,
    				'2'||lpad(i.order_id::text, 6, '0') AS invoice
    			FROM
    				orders o
    			JOIN contacts_data s ON
    				o.contacts_data_id = s.contacts_data_id
    			JOIN contacts f ON
    				s.contact_id = f.contact_id
    			JOIN organizations z ON
    				s.organization_id = z.organization_id
    			LEFT JOIN organization_data y ON
    				z.organization_id = y.organization_id
    			JOIN order_data d ON
    				o.order_id = d.order_id
    			JOIN spare_parts p ON
    				p.part_id = d.part_id
    			LEFT JOIN supply_data x ON
    				x.order_data_id = d.order_data_id
    			LEFT JOIN supply xx ON
    				xx.supply_id = x.supply_id
    			LEFT JOIN invoices i ON
    				i.order_id = d.order_id


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

    @Barney_Gubmle
    Добрый день. А может массив лучше создать Перед foreach, а после по ненадобности unset'ить?
    Ответ написан
    1 комментарий
  • Bootstrap-Vue - В чём фишка данного симбиоза?

    copist
    @copist
    Empower people to give
    Расскажите плиз о технологии, и чем развёрнутей, тем лучше.

    Вот захотел ты сделать сайт SPA или PWA с любимой тебе вёрсткой на базе Twitter Bootstrap и любимой библиотеки Vue. Сверстал. Поповеры не появляются, дропдауны не выпадают, модалки не открыватся, формы не валидируются, клики не работают.

    Оригинальный Twitter Bootstrap имеет поддержку интерактивных элементов на Javascript. Реализовано это на библиотеке jQuery. Если делаешь на Vue, придётся подключать ещё и jQuery, что лишняя библиотека на 100+ килобайт, что, конечно, не катастрофа (пока ты не на мобилке).

    Vue работает с состояниями привязывает данные к отображению, а jQuery работает с DOM и событиями. Это вопрос производительности. Работа JQuery начитается когда загружен и распарсен JS и HTML. Работа Vue начинается в тот момент, когда загружен и распарсен JS, то есть чуть раньше. jQuery модифицирует DOM на лету, перестраивая текущий документ. Vue работает с shadow DOM, а затем подсовывает уже готовую интерактивную страницу в пустой документ, что быстрее (разница в секунды на десктопе, десятки секунд на м...).

    Vue реализует компонентную парадигму. Куски страницы являются изолированными кусочками кода (HTML CSS JS), которые цепляются между собой динамически, а обмениваются данными через аттрибуты и события. Предположим, что вы решили следовать компонентной парадигме, тогда согласно вот такому примеру нужно будет увязать самостоятельно все интерактивные компоненты. Компонента-кнопка. Компонента-поле ввода. Компонента-форма. Компонента-контейнер. Получается около 50 компонент. Для некоторых надо будет написать логику на jQuery. Если посмотреть на код jQuery этих микрокомпонент, то он окажется несложный, его вполне можно переписать на Vue. Ну там класс заменить или клик отработать. Когда от кода jQuery не останется следа, его можно будет из проекта удалить.

    И вот получается Bootstrap-Vue

    На компоненты побили. От Jquery избавились. Написано в единой парадигме. Работает быстрее.

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

    Так же будет Не лишним оценить технологию: плюсы, минусы, стоит ли вообще с этим работать ...

    Это сам изучай и сравнивай. Навыки и опыт воздушно-капельным и через Internet не передаётся
    Ответ написан
    4 комментария
  • Анимация волны по картинке, как сделать?

    LenovoId
    @LenovoId
    svg, css,js
    Я конкретно как сделано не скажу но применяли pixi.js и greensock в анимации этих слайдов ...в общем на технологии WebGL реализовано

    Вот этот эффект применили : https://pixijs.io/examples/#/basics/custom-filter.js
    Ответ написан
    Комментировать
  • Laravel response SPA?

    @vism
    Вам злые дяди не разрешают другие переменные слать, кроме message?
    Ответ написан
    Комментировать
  • Как определённые свойства в массиве объектов привести к нижнему регистру?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Собрать новый массив:

    const newArr = arr.map(function({ ...n }) {
      return this.reduce((acc, k) => (acc[k] = acc[k].toLowerCase(), acc), n);
    }, [ 'firstName', 'lastName' ]);

    Обновить существующий:

    const keys = [ 'firstName', 'lastName' ];
    arr.forEach(n => keys.forEach(k => n[k] = n[k].toLowerCase()));
    Ответ написан
    Комментировать
  • Как деплоить небольшие проекты?

    @Stqs
    senior software developer
    вопросы у вас философские, на каждый можно отвести часы обсуждения
    Полноценный CI/CD поднимать не вижу смысла ввиду размеров

    вы ж все равно собираетесь какие-то скрипты мутить и чото выдумывать,
    какая разница это будут крон скрипты на сервере или джоба в дженкинсе? по-скорости написания - одно и тоже будет. так что по-моему размер тут не имеет значение
    единственное что имеет значение - насколько явно у вас описан процесс(алгоритм) билда/разворачивания приложений
    с этой точки зрения мое видение примерно такое:

    1) git не есть инструмент для развертывания по, git лишь для версионирования кода
    и по-идее результатом вашей работы должен быть не код в гитхабе, а какой-то вменяемый артефакт, готовый к деплою (docker-image, pip пакет, npm пакет, deb пакет, jar, war, zip в крайнем случае, и тд и тп). Если производить артефакты то вопрос с тегами отпадет сам собой - у вас будет артефакт какой-то версии и все
    сервер не должен знать ни про какие гиты и ни про какие-то теги в нем
    Здесь я бы рекомендовал паковать все в докер-имеджи хотя бы только потому, что сервер в итоге не будет знать ничего о зависимостях приложения, нужных библиотеках, ниочем вообще, вам нужно установить только докер
    Огромное преимущество использование докера - в Dockerfile вы вынуждены волей/неволей описать точно и явно все шаги требуемые для установки приложения. И что самое замечательное - это все будет храниться в том же репозитории, под контролем гит - шикарно.
    Артефакты желательно хранить в каком-то артефактории,
    но если реально все просто - то можно хранить несколько последних версий прямо на сервере в какой-нибудь папочке

    2) как только вы получили артефакт - его можно деплоить
    неплохо было б знать особенности вашего проекта, но грубо говоря допустим что достаточно его зааплоадить на сервер, положить в нужное место
    опять же с этим дженкинс справится на ура и займет у вас это все дело 10 минут . Если вы опишете логику в Jenkinsfile вы выиграете еще раз потому что процесс развертывания(алгоритм) будет описан опять же ЯВНО. И будет тоже под контролем гита. (Jenkins должен знать только в каком репозитарии и в каком месте ему искать Jenkinsfile)
    Если же вы будете крутить какой-то спрятанный cron скрипт на сервере - о нем никому ничего не будет известно. Поверьте уже через короткое время все это дело начнет усложнятся, что-то забудется, что-то измениться и это все вместе больно ударит вас по яйцам.

    В чем еще преимущество такого подхода: если вам нужно сделать roll-back на предыдущую версию вам не нужно собирать проект заново выкачивая все с гита, ведь у вас есть предыдущие артефакты, ролбек в таком случае вообще не проблема - просто указываем предыдущую версию артефакта и деплоим еще раз и все

    3) Env Variables
    когда приложение стартует - считывает все что ему нужно из переменных окружения
    деплой джоба может каждый раз эти переменные устанавливать перед тем как деплоить - это было бы тоже круто потому что вы сделали бы это знание так же явным

    Итого имеем
    - логика сборки проекта описана в Dockerfile и находится под гитом
    - логика деплоя находится в Jenkinsfile и находится под гитом, и что самое главное является кодом (Jenkinsfile пишем на груви, для простых вещей вам понадобиться 30 минут изучения и все)
    - на сервере мы ничего не устанавливали совершенно кроме самого докера
    - мы храним несколько версий нашего приложения на всякий случай и можем быстро откатиться не прибегая к гиту вообще
    - сервер не знает ничего о гитах
    - на сервере нет НИКАКОЙ дополнительной логики по разворачиванию вашего приложения
    - имея все это очень легко добавлять другие сервера для деплоя - что нам нужно - грубо говоря указать другой айпи и набор env variables к нему ( если они конечно отличаются)
    giphy.gif
    Ответ написан
    5 комментариев
  • Как оценить стоимость разработки?

    mixail_fet
    @mixail_fet
    Дизайнер веб-интерфейсов
    Ответ написан
    1 комментарий
  • Python для enterprise приложений? Используют?

    1) Можешь почитать статьи от Рамблера, Варгейминга - у них вся инфраструктура идет на питоне. Там достаточно интересно рассказывается, почему был выбран питон, и какие сложности им приходится преодолевать.

    2) Если коротко, то за скорость разработки ты платишь гемором при поддержке и расширении. Плюс есть некий дефицит кадров.

    Так почему кто-то берет python, а не Java:

    - 9 из 10 проектов будут адекватно работать на python (так как они не разростутся до уровня мега-компаний)
    - многие любят python, на нем приятно писать проекты.

    Самый типичный кейс интерпрайза на Питон:

    1. Сделали какой-то стартапчик на питоне.
    2. Стартап выстрельнул
    3. Начали расширяться и расти.
    4. Так как все было написано на питоне, остались на питоне.
    5. Ключевые моменты стали переписывать/дополнять go/node.js сервисами
    Ответ написан
    Комментировать
  • Какой CMS движок учить начинающему?

    yudinikita
    @yudinikita
    Инженер-программист из России
    Учи WORDPESS. Заказов на фрилансе куча, да и учится легко.
    Ответ написан
    Комментировать
  • Как запретить ввод отрицательных чисел?

    0xD34F
    @0xD34F Куратор тега Vue.js
    @input="onInput($event, product)"

    methods: {
      onInput(e, product) {
        product.quantity = Math.max(0, parseInt(e.target.value) || 0);
      },
    },

    или

    watch: {
      products: {
        deep: true,
        handler() {
          this.products.forEach(n => n.quantity = Math.max(0, parseInt(n.quantity) || 0));
        },
      },
    },
    Ответ написан
    Комментировать
  • Стек технологий для Джуна?

    1) Java - корпоративный стек, поэтому топаем в местную компанию, где пишут на Java. Разговариваем, спрашиваем. Они тебе сами скажут, на чем они пишут, и что им надо в качестве минимума.

    2) Проблема Java заключается в том, что ты сам дома, на своих проектах вообще никак не сможешь потренироваться, ибо твои проекты и корпоративные легаси монстры - это как небо и земля, ничего общего не имеют. Поэтому исключительно на практике или стажировке надо набивать шишки.
    Ответ написан
    Комментировать