• Как перенять объектно-ориентированное мышление?

    tzlom
    @tzlom
    Очень просто.
    Для начала - признайтесь себе что процедурное программирование у вас тоже страдает (иначе бы у вас не было этого вопроса), это не страшно, но с этим тоже надо что-то решать.
    Берёте любой свой процедурный проект (лучше маленький чтобы не застрять в рутине).
    Шаг первый - всё есть функция, поэтому весь код вне функций кладёте в функции, итого у вас получается что вне функций идёт только вызов main() (или как вы её назовёте)
    Второй шаг - функции работают только с тем, что в них передали. Удаляете глобальные переменные.
    Появляется проблема глубокой вложености, т.е. у вас внутри вызова А вызывается Б а в ней В которая хочет переменную из области видимости А, и таких случаев много. Тащить в Б все эти переменные - грустно и печально, поэтому делаем хитрость, каждая функция первым аргументом получает массив неких значений. Правило одно - функции не меняют имена и количество переменных в массиве, только значения.
    Третий шаг - функции должны быть короткими, выносите повторяющийся код в отдельные функции, если в функции используется много переменных - это повод разбить её на несколько меньших.
    Четвёртый шаг - вы уже пишете на ООП. Если 3 шага правильно сделаны, то осталось только оформить это дело согласно новым правилам - первый аргумент-массив это члены класса, соответственно функции использующие одинаковый массив - методы этого класса, прийдётся разобраться с доступом к полям и отдельными зависимостями, но это уже будет просто и понятно когда ты до этого доберёшься.
    Ответ написан
    4 комментария
  • Как перенять объектно-ориентированное мышление?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Т.е. сложно понимаю, что "засунуть" в один объект, что в другой, что должно быть статическим методом, что приватным и тд.


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

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

    Теперь задумаемся о декомпозиции всего этого хаоса. Мы находим какую-то задачу, которую выполняет наш код (например какую функцию вызвать для обработки каждого конкретного запроса) и выносим это в отдельный объект. Отправка email-ов - отдельный объект. Весь SQL зашиваем в отдельный объект. Соединение с базой - объект. Пользователи - объекты. Все - объекты.

    И главное, у каждого объекта есть своя область ответственности. UNIX way. Каждый объект делает что-то одно и делает это хорошо. Бывает так что ну... нужно сделать так что бы один объект делал две вещи. НЕ вопрос, мы можем его попросить сделать что-то сложное, а он будет как хороший менеджер тупо делегировать работу другим объектом. То есть он и сложную штуку сделает, и сам не будет знать как она делается.

    А все безхозные функции, которые не пренадлежат никаким объектам (например функции порождающие объекты) можно вынести в статические методы. Главное что бы статичесих переменных у нас небыло (ибо это те же глобальные переменные). И поменьше публичного ибо черт его знает что эти разработчики будут использовать. Причем "те разработчики" это вы завтра.

    Вообщем писав всё время на процедурке, сложно перейти на ооп.


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

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

    Подскажите, какой проект начать писать (гостевая, блог), или может начать изучать фреймворк.


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

    Есть хорошие упражнения на развитие понимания объектно-ориентированного проектирования. Например вот: https://habrahabr.ru/post/206802/

    Сразу хочу отметить что это крайности. Упражнения же. Они должны ограничивать вас что бы заставлять думать и задавать правильные вопросы.

    Или может подскажите книгу/сайт где пошагово в ооп написан какой-то проект, чтобы быстрее пришло понимание.


    Так вы научитесь делать один конкретный проект а на втором вы уже проиграете. Так дела не делаются. Надо разобраться с причинами появления идеи ООП. Ну то есть что было до. Можно еще с функциональным программированием попробовать разобраться. В PHP оно слабо применимо, но основные идеи очень тесно переплетаются с ООП и познав немного функциональщины ваше ООП будет лучше. Да и если про ООП вы можете найти много булшита, про функциональщину врут мало.
    Ответ написан
    3 комментария
  • Upwork - как грамотно сдать работу и потребовать оплаты?

    syschel
    @syschel
    freelance/python/django/backend
    А какой тип контракта был?
    Если по фиксированной оплате. Тогда нужны условия:
    1) Клиент верифицировал свой паймент (в профиле добавил способ оплаты и подтвердил его работу).
    2) Клиент зарезервировал сумму за контракт или милестоун в апворке (с клиента списалась сумма и лежит на апворке замороженной).
    Если эти условия выполнены. То просто загружаем через апворк работу и жмём "отправить на проверку". Всё, теперь ждём. Отправлять нужно ТОЛЬКО через апворк, а не в скайпе/почте.
    Если почасовая оплата, то должен быть трекер и п1. из предыдущего варианта выполнен. Так же отправляешь работу через апворк на проверку.

    Почитай перед началом гайд(инструкцию) по апворку. Довольно много информации собранно именно фрилансерами, а не оф-правила биржи --> odeskconf.github.io/guide
    Ответ написан
    Комментировать
  • Upwork - как грамотно сдать работу и потребовать оплаты?

    opium
    @opium
    Просто люблю качественно работать
    Ну просто говорите заказчику что закончили отдаете ти работу и он платит , выдумывать какие то глуплсти тут лишнее , заранее ни от чего большего чем описано в начальной справке апворк не застраховаться
    Ответ написан
    Комментировать
  • Upwork - как грамотно сдать работу и потребовать оплаты?

    @entermix
    Нужно попросить, чтобы клиент зарезервировал средства для Вас, если это фиксированная оплата

    https://www.youtube.com/watch?v=ceh5-gtNskY

    Но и тут есть нюансы.
    Ответ написан
    Комментировать
  • Как изменить функцию, чтобы вызывать ее изменив параметры через объект func({color: red})?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    function popupMockup(opts) {
      var options = {
        closeOut: true,
        color: 'rgba(0,0,0,.7)',
        openTime: '.4s',
        fromSide: 'bottom',
        fromStyle: 'ease-in-out',
        popupDistance: '170px'
      };
      if (typeof opts !== 'undefined')
        for (var key in opts)
          options[key] = opts[key];
    }
    Ответ написан
    1 комментарий
  • Скачанные шрифты vs link?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Здесь всегда выбор, который зависит от фактора доступности серверов Google.
    Например, если вы делаете публичный веб-сайт, к которому всегда будут обращаться только люди с неограниченным доступом к Интернет, то вопросов никаких нет - используете сервера Гугла. Очень высока вероятность, если шрифт часто используемый, то он уже будет в кэше браузера и не произойдет повторной загрузки. В скорости и надежности серверов Гугла можете не сомневаться.
    Но бывают ситуации, когда с сайтом работают из локальной сети и доступ к другим ресурсам жестко ограничен. Обычно в таком случае делают белый список, в который вносят сайт. Обычно в таком случае другие сайты попадают редко. В таком случае, весь контент, включая скрипты, шрифты и картинки должен находиться у себя на хостинге.
    Есть еще один, исключительно российский момент, называется Роскомнадзор. Если этим желтая вода ударит в голову, они могут прикрыть доступ и к гуглу. И сделано это будет под благовидным предлогом.
    Ответ написан
    6 комментариев
  • Обновление страницы через browserSync обгоняет компиляцию файлов. Как справиться?

    надо событие ловить
    gulp.src('src/pug/**/*.pug')
        .pipe(pug())
        .pipe(gulp.dest('src'))
        .on('end', function() {browserSync.reload({stream: true}))
    Ответ написан
    2 комментария
  • Какой шрифт использовался в сериала "Лучше звоните солу!"?

    stratagema
    @stratagema
    Шрифт Coffee Service
    82f9f6fc15a548dea5e9fcf9ac06c0b3.png
    Ответ написан
    Комментировать
  • Почему php форма отправляет только "запомненные" данные на мейл?

    @theg4sh
    Для начала нужно найти место потери данных. Сделайте
    $('#form').submit(function(e) {
          var $form = $(this);
          console.log($form.serialize());
          return false;
          ...
    });

    В консоль должны упасть сериализованные данные.
    Далее если все ок, то смотрим в FireBug вкладку Net и глядим, все ли данные попадают в тело запроса.
    Ну и наконец смотрим что приходит на сторону сервера через
    var_dump($_POST); die();
    Ответ написан
    Комментировать
  • Какую лучшую и легкую библиотеку посоветуете для динамичных svg диаграмм?

    @calsh
    Java Developer
    Мне больше всего понравилась SnapSVG. Простая и весьма удобная.
    Делали мы много разных диаграмм. И очень кастомных, и стандартных. И сначала использовали svg. Но скоро убедились, что есть проблема с производительностью. SVG работает с DOM, поэтому большой объем данных и частая перерисовка диаграммы может потребовать очень много ресурсов от клиентской машины.
    В этом случае лучше использовать html5 canvas. Преимущества и недостатки каждого подхода описывать не буду, но в нашем случае svg использовать не получалось(у нас на странице было от 3 до 6 разных диаграмм и данные обновлялись раз в секунду. На слабеньких машинах страница падала минут за 5-10)
    p.s. Пробовали работать с svg напрямую без библиотек, в плане производительности было не сильно лучше.
    Ответ написан
    Комментировать
  • Вопрос по filter в Angular js?

    AMar4enko
    @AMar4enko
    Мое мнение, что им бы стоило выкинуть filter вообще в версии эдак 1.3
    Он привносит дополнительную ненужную абстракцию, с ним нужно четко понимать, что это не магия. Опыт его использования применим только к ангуляру.
    Нет никакой проблемы сделать дополнительное состояние для хранения фильтрованной коллекции и выводить уже ее. Обновлять ее при наступлении каких-то событий (типа изменения данных формы и.т.д)
    Я в своей практике (а она довольно обширная) использовал filter только в самом начале.
    У вас есть шанс избежать этого и потратить время на изучение действительно фундаментальных вещей.
    Ответ написан
    5 комментариев
  • Canvas или svg для динамичных диаграм?

    dom1n1k
    @dom1n1k
    SVG удобнее, Canvas (при должном подходе) быстрее - вот и выбирайте.

    А то я тут делал страничку с отзывчивыми SVG-графиками с библиотекой Chartist.js
    https://gionkunz.github.io/chartist-js/
    На странице их штук 20, но каждый в общем-то довольно простой.
    Так у меня ресайз окна браузера (мощный десктоп, быстрый современный браузер) отрабатывает секунды 2. А на мобильнике всё это дело отрисовывается секунд 5-7.
    Ответ написан
    Комментировать
  • Как сделать высоту блока 100% не смотря на панель с url на телефонах, которая исчезает?

    pm_wanderer
    @pm_wanderer
    junior-HTML
    Такое часто бывает у фиксированных боковых менюшек. Там просто высота viewport меняется, а стили пересчитываются только после того, как палец отпускаешь с экрана.
    Можно поставить высоту 110 процентов например.
    Ответ написан
  • Как практиковать AJAX без сервера?

    Вам в любом случае понадобится сервер.
    1) Если знаете чуть чуть Php то можно скачать OpenServer, xxamp, и просто нажать на кнопку запустить сделать базу и подсмотреть в интернете коннект на пыхе. и практиковаться. А вообще любой гайд про Ajax в первых уроках показывают как настроить сервер

    2) Поставить Node. js - в целом на ноде можно писать JS скрипты любые и смотреть как они работают. Опять же посмотреть в интернете как его установить и запустить одной командой.
    Ответ написан
    Комментировать
  • Как практиковать AJAX без сервера?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Node.js сервер
    var http = require("http");
    http.createServer(function(request, response) {
      response.writeHead(200, {"Content-Type": "text/plain"});
      response.write("Hello World");
      response.end();
    }).listen(8080);

    $ node server.js

    python сервер
    $ python -m SimpleHTTPServer 8080

    И про LAMP почитайте например.
    Ответ написан
    Комментировать
  • Как практиковать AJAX без сервера?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Локально поднять сервер, с помощью того же OpenServer на Windows.
    Ответ написан
    Комментировать
  • Равномерная анимация столбца вверх на Raphael?

    Добавьте такой маленький хак
    var bar = paper.path(
    		"M 100, 500" +
    		"L 200, 450" +
    		"L 300, 500" + 
        "L 300, 500" + // эта строка
    		"Z"
    	)

    https://jsfiddle.net/beyktkbp/
    Ответ написан
    1 комментарий