• Почему сыпется svg?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Вы много раз используете такие штуки, как use и clip-path, указывая там id елементов. Но сами id на странице не уникальны. Вот и ломается все. Используйте уникальные id для элементов.
    Ответ написан
    4 комментария
  • В чем разница между 'фабричным методом' и 'простой фабрикой'?

    @rundle
    Привет.

    Пример с сайта неудачный. Он не показывает выразительность фабричного метода в отличие от фабрики. Я изменил пример ниже.

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

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

    Например, мы открыли в Москве и Питере магазин по продаже телефонов и в классе BeelineStore есть общие методы для всех телефонов (код на java схематичный). Samsung стал поддерживать 5G интернет, поэтому сделаем тариф для этих телефонов дороже.

    spoiler
    abstract class IMobile {
    	void prepare() {
    		System.out.println("Подготовим документы по продаже от ООО Билайн");
    	}
    	void setInternetTariff() {
    		System.out.println("Установим стандартный тариф Билайна для интернета");
    	}
    	void box() {
    		System.out.println("Упакуем в желтый пакетик");
    	}
    }
    
    class BeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Установим отдельный тариф для 5G интернета");
    	}
    }
    
    class BeelineIPhone extends IMobile {}
    
    class BeelineStore {
    	public IMobile orderPhone(String type) {
    		IMobile phone = null;
    
    		if (type.equals("samsung")) {
    			phone = new BeelineSamsung();
    		} else if (type.equals("iphone")) {
    			phone = new BeelineIPhone();
    		}
    
    		phone.prepare();
    		phone.setInternetTariff(); 
    		phone.box();
    
    		return phone;
    	}
    }
    
    // использование
    // var mobileStore = new BeelineStore();
    // mobileStore.orderPhone("samsung"); <- клиентский код

    Однако при изменении, удалении или добавлении новых видов телефонов мы бы открывали наш класс BeelineStore и расширяли новыми конкретными типами. А если мы добавим модели телефонов, то дерево условий станет сложнее. Если одни аспекты системы изменяются, а другие остаются неизменными — пора заняться инкапсуляцией.

    spoiler
    class MobileFactory {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new BeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new BeelineIPhone();
    		}
    
    		return null;
    	}
    }
    
    class BeelineStore {
    	MobileFactory factory;
    
    	public BeelineStore(MobileFactory factory) {
    		this.factory = factory;
    	}
    
    	public IMobile orderPhone(String type) {
    		IMobile phone;
    
    		phone = factory.getMobile(type);
    
    		phone.prepare(); 
    		phone.setInternetTariff();
    		phone.box();
    
    		return phone;
    	}
    }
    // использование 
    // var mobileFactory = new MobileFactory();
    // mobileStore = new BeelineStore(mobileFactory);
    // mobileStore.orderPhone("samsung"); <- замечу, клиентский код не изменился

    Окей - мы вынесли процесс создания телефонов - это и есть фабрика. И тут мы расширяемся, дела в нашей компании пошли хорошо и мы открываем филиалы на Урале. Тарифы на Урале будут дешевле, как стандартные, так и для 5G интернета. А также в Москве и Питере запускается программа по обмену старых телефонов на новые. И тут нам помогает фабричный метод.

    spoiler
    abstract class BeelineStore { // класс становится абстрактным
    	protected abstract IMobile getMobile(String type); // возвращается метод getMobile
    
    	public IMobile orderPhone(String type) {
    		IMobile phone = getMobile(type);
    
    		phone.prepare(); 
    		phone.setInternetTariff();
    		phone.box(); 
    
    		return phone;
    	}
    }
    
    class CenterBeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для 5G интернета в центре России");
    	}
    }
    
    class CenterBeelineIPhone extends IMobile {}
    
    class СenterBeelineStore extends BeelineStore {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new CenterBeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new CenterBeelineIPhone();
    		}
    
    		return null;
    	}
    	
    	public void tradeIn(String phone) {
    		System.out.println("Вы обменяли старый телефон на новый с доплатой");
    	}
    }
    
    class UralBeelineSamsung extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для 5G интернета на Урале");
    	}
    }
    
    class UralBeelineIPhone extends IMobile {
    	void setInternetTariff() {
    		System.out.println("Отдельный тариф для стандартного интернета на Урале");
    	}
    }
    
    class UralBeelineStore extends BeelineStore {
    	public IMobile getMobile(String type) {
    		if (type.equals("samsung")) {
    			return new UralBeelineSamsung();
    		} else if (type.equals("iphone")) {
    			return new UralBeelineIPhone();
    		}
    
    		return null;
    	}
    }
    // использование
    // var centerBeelineStore = new СenterBeelineStore();
    // centerBeelineStore.orderPhone("samsung");
    // var uralBeelineStore = new UralBeelineStore();
    // uralBeelineStore.orderPhone("samsung");

    Мы смогли сохранить единые для всех магазинов стандарты оформления заказа, а также добавили региональные отличия.
    То есть фабричный метод гораздо гибче. Простая Фабрика обладает узкой специализацией, а фабричный метод ведет к созданию инфраструктуры, в которой реализация выбирается субклассами.
    Простая Фабрика инкапсулирует создание объектов, но она лишена гибкости фабричного метода в изменении создаваемых продуктов.
    Ответ написан
    Комментировать
  • Как изучать node js в 2019м?

    Начните сначала с клиентского JS и пускай learn.javascript.ru будет вашей библией на это время.

    Изучать нужно также, как и любое другое ремесло — практика и теория, при этом практика в случае с программированием должна преобладать.

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

    Не пытайтесь найти универсальный ответ в данном вопросе.
    Ответ написан
    Комментировать
  • Как хранятся числа в памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    struct Data {
      short id;
      double val;
    };


    я понимаю что 32 00 11 49 - это интовское значение

    в этой структуре short int, 2 байта. 0x32 0x00 -- это оно (0x32 + 256 * 0x00 = 50), little endian.
    0x11 0x49 -- это мусор. 0x02 0x56 0x00 0x00 идущие дальше -- это тоже мусор.
    0x33 0x33 0x33 0x33 0x33 0x33 0xf3 0x3f -- это double (0x3ff -- порядок, 0x3333333333333 -- мантисса, значение = 0x1.3333333333333 * 2 ^ (0x3ff - 1023) = 1.19999999999999995559), little endian, ieee754.

    Как в данном выводе понять где выравнивание происходит?

    Можно воспользоваться макросом offsetof.
    Ответ написан
    5 комментариев
  • Фотошоп в ubuntu?

    Каким боком фотошоп к фронт разработке? И каким образом авокод сравнивают с фотошопом если они выполняют разные задачи?
    Вы рисовать хотите и называете это фронт разработкой?
    Дизайнер может в Adobe XD выслать вам ссылку на макет, которая открывается в браузере, и вы получите кликабельный макет и все ассеты (картинки, стили, размеры) и воровать его не нужно, просто качай
    https://zeplin.io/ https://avocode.com/ отвязывают вас от инструментов дизайнера, они рисуют в чем удобно, а вам высылают ассеты
    В https://www.figma.com/ и рисовать можно и делиться ассетами, но лучше експортировать их в зеплин
    Ответ написан
    4 комментария
  • Как быстро засыпать чтобы было больше времени на изучение программирования?

    Zoominger
    @Zoominger
    System Integrator
    Б-же, до чего же у вас много свободного времени.

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

    После этого будете засыпать за 5 минут. Повторять через день. Проверено, работает. Проблемы с засыпанием возникают из-за малоподвижного образа жизни. Спорим, у вас жирок?

    Альтернатива - литр пива за 1,5 часа до сна или две плюшки [ЗАБЛОКИРОВАНО РКН] за час до сна.

    И кста, "больше времени на изучение" никогда не равно "будет эффективнее".
    Ответ написан
    4 комментария
  • Как управлять серверами linux с одного сервера?

    planc
    @planc
    ansible
    Ответ написан
    Комментировать
  • Работать с файлом word из программы?

    Nipheris
    @Nipheris Куратор тега C++
    Ну если прям из C++ кода, попробуйте библиотечки:
    - DuckX
    - DocxFactory
    Ответ написан
    Комментировать
  • Как правильно (!) примонтировать папку «www» в FTP-папку пользователя?

    @harabudjasim
    Самый простой способ это добавить mount /var/www /home/gavrila/ftp/sites в автостарт системы. Но это небезопасно и подходит только для поиграться.
    Насколько я помню, для администрирования сайта делают отдельного пользователя для каждого сайта и этому пользователю выставляют папку с сайтом как home каталог. тогда при логине по FTP система автоматически перейдет в папку с сайтом. vsFTPd умеет брать конфиги пользователей не из системы, значит можно не засорять систему лишними пользователями. Почитай про добавление пользователей в vsFTPd. Основной посыл это заставить ftp сервер chroot`нуть тебя в папку с сайтом при логине.
    Ответ написан
    Комментировать
  • Как вставить php код в json?

    @Kostik_1993
    Web Developer
    Вопрос тупее некуда. Зачем вам php в json? Чего вы хотите этим добиться? Вы хотите вывести сам код? Или его результат? Причём тут Laravel? Вы делаете это в шаблоне?
    Ответ написан
    Комментировать
  • Какую литературу посоветуете по тестированию?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    TDD Кента Бека - помогает понять, откуда взялась популярная архитектура фреймворков тестирования (ссылка) - читала, мне частично помогла.
    xUnit test patterns - не читала, но все советуют - тоже объясняет принципы написания тестов без четкой привязки к технологии (ссылка).
    По разнице в подходах тестирования - существует пирамида тестирования, но на практике мне не всегда понятно, где границы - приемочные и UI тесты ориентированы на use cases - т.е. на путь - в какой последовательности юзер проходит фичу и какой результат ожидает на каждом шаге (заходит на страницу, заполняет данные, ждет ответа; программа-клиент получает токен, шлет запрос, ждет респонс), а модульные тесты ориентированы на проверку кода как изолированных элементов - т.е. тестирование происходит отдельно от общего процесса, в котором этот код используется, чтобы можно было локализовать проблему с максимальной точностью.
    PHPUnit я изучала только по документации, просто прошлась по всем примерам, считаю приемлемым вариантом изучения. Лучше сначала хорошо понять PHPUnit, а потом учить Codeception. Учиться, как мокать и стабать, можно уже на конкретных задачах, по мере надобности.
    Ответ написан
    1 комментарий
  • Проблемы с челкой на Android?

    RomReed
    @RomReed
    JavaScript, Flutter, ReactNative, Redux, Firebase
    Если бы это был iphone то я бы посоветовал вам но это какой то китай скорее всего. По это вам придется его определить и для него написать самому стили которые вас устроят.
    Ответ написан
    8 комментариев
  • Как правильно выстроить разработку и деплой сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Разработка и контроль версий

    Читаем про git flow, восхищаемся и интегрируем.
    Читаем PSR-ы, восхищаемся и интегрируем. Не помешает: Попросили проверить код, на что смотреть нужно?
    Читаем про vagrant. На базе вот этого вот строим dev окружение. Можете поиграть с https://puphpet.com/. До docker все же стоит дорасти.
    Постигаем Phpstorm, и радуемся жизни.
    Можете посмотреть так же: https://github.com/index0h/php-conventions

    Тестирование

    Читаем про phpunit, восхищаемся и интегрируем.

    Документирование

    Рекомендую взять за правило: документирование алгоритмов нужно только в крайнем случае, когда используются некие хаки. Говнокод лучше переписать на что-то очевидное, чем объяснять, какая муха вас укусила и где.
    Что касается docblock-ов для помощи ide - это отличная идея.

    Деплой

    Самый простой и надежный способ: root у вашего nginx/apache указывать как ссылку на каталог текущей прод версии. При релизе - заливать код с помощью rsync в новый каталог, а далее менять ссылку на новый релиз.
    Например у вас каталог с версиями кода:
    production -> v1.0.2 - текущая версия
    v1.0.1 - старый релиз
    v1.0.2 - текущая версия
    v1.0.3 - новый релиз
    Когда подготовка завершена - вы только меняете симлинк production на v1.0.3. Если что не так - можно быстро откатиться на предыдущую версию.
    Ответ написан
    11 комментариев
  • Сущесвует ли переводчик текста/Статьей/новостей с помощью ИИ?

    sim3x
    @sim3x
    Нет
    Ответ написан
    Комментировать
  • Работает код на чистом js быстрее чем jquery?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Вопрос сам по себе глупый. Jquery - это и есть js. По сути, это набор функций, упрощающий разработку и сокращающий код. То что будет быстрее зависит от твоего ур-я. jq писали не глупые люди, сможешь ли ты написать лучше? Не думаю. Другое дело, что функции в jq более универсальны, для этого приходится жертвовать скоростью, но разница в скорости выполнения скрипта будет в пару десятков миллисекунд, а вот что касается скорости загрузки, ты можешь сократить код с jquery на 20-30% минимум.
    Ответ написан
    2 комментария
  • На чём писать он лайн билеты?

    @Kirill-Gorelov
    С ума с IT
    Выбери то, что ты хорошо знаешь. Или на крайний случай то в чем ты сможешь легко разобраться.

    Знаешь юи? Делай на нем и не парься.
    Я знаю django, я бы на нем стал делать. Но это не значит, что ты должен все бросить и делать на django или еще на чем.
    Ответ написан
    Комментировать
  • Как вы учились или как вы считаете чему нужно учить Web-разработчика в ВУЗе?

    @oldzas
    1) в вузе мне не хватило gita
    2) обучение меняется каждый год, я учился - а после меня ввели предмет программирование в 1С))
    3) вышка нужна, часто общаюсь с програмерами, которые не могут реализовать ту или иную задачу, хотя теория в вузе давалась. Чего не знают самоучки: теория графов + сети петри + конечные автоматы + трансляторы. В итоге когда они реализовывают те или иные задачи = получается каша ((

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

    Fragster
    @Fragster
    помогло? отметь решением!
    https://kassa.yandex.ru/developers/using-api/testing
    ну а настройки хранить в .env файле, который в гитигноре
    Ответ написан
    Комментировать
  • Каковы минимальные требования к "железу" для приложения Tomcat/Pure Servlets/MySQL?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Кот Том отжирает около 20-60 мегов памяти. Мускул - примерно также. (но конечно же есть варианты). Вместо tomcat можно взять Jetty - ест гораздо меньше - мега 2 в минимуме. В принципе, если не делать мемориликов и утечек памяти, то любой хостинг начального уровня на 1 CPU и 512Mb - за глаза, даже с кешированием, гусарами и куртизанками.
    А все остальное: производительность, rps и все остальное - зависит только от вашего приложения, кеширования, архитектуры, работы с базой и данными. Как пример linux.org.ru , сайт с гигантской аудиторией. Вот что они о себе пишут - https://www.linux.org.ru/about (см. Софт и Сервер).
    Ответ написан
    Комментировать
  • Как сделать резервное копирование?

    Zoominger
    @Zoominger
    System Integrator
    tar + cron, классика всех классик.

    Можно rcync + cron.

    Манов полон Гугл.
    Ответ написан
    Комментировать