• Какие навыки/специальности стоит приобрести для открытия и развития своего бизнеса в it?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как IT спец, имеющий свой бизнес - нихрена из ит тебе в бизнесе не надо, иногда даже сильно мешает. В бизнесе нужен человек который умеет подать и продать продукт. Все остальное - забота работников фирмы, если ты не сам себе фирма, но мы ведь не про фриланс говорим?
    Поясню - я имею огромное счастье что рядом со мной человек который имеет деловую жилку(в отличии от меня) и не сильно понимающий "что под капотом", зато понимающий насколько нужен человеку наш продукт и чувствующий сколько и за что тот готов платить. Вот это для бизнеса просто бесценно. А из навыков мне пригодился опыт настройки локалки и умение работать руками, полки/столы собирать - на начальном этапе многое приходилось самим делать ).
    Ответ написан
    Комментировать
  • Есть ли обучающие материалы по ООП?

    sanek_os9
    @sanek_os9
    Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
    Вот вам стог сена stog.jpg
    Вот вам тюк сена 617.jpg
    Какая между ними разница? И то, и то сено.
    Но, тюк он компактный, его удобно складывать, его легко переносить, вы из него хоть домик постройте. Стог это такая...просто куча, с этой кучей не удобно работать, сыпется, раздувает ветром, переносить сложно, и домик не построишь. Кто знаком с сельской жизнью тот поймет)
    Так вот, процедурный стиль, это стог сена, ООП это тюк сена. Процедурный стиль громоздкий, имеет огромную кучу каких то функции с длинными именами, его трудно поддерживать, вообще трудно вносить какие либо изменения, и если таковы понадобится, а сайт большой, то одно и то же изменение придется одинаково менять во многих местах, если вдруг вы где то забыли внести изменение то в лучшем случае это вызовет ошибку и вы её исправите, в худшем все продолжит работать но именно в том месте не так как надо, попробуйте потом найти это место...Что дает нам ООП...много чего, краткость кода, его ясность, его легко поддерживать, там нет повторяющегося кода, если вы что то захотите изменить, это нужно будет изменить единожды и ничего у вас не сломается после этого.
    Что касается примеров, этот пример должен быть большим что бы увидеть преимущества ООП подхода, это во первых, а во вторых преимущество особенно сильно проявляется когда вы работаете над этим проектом а не когда он уже написан и работает а вы смотрите на это со стороны.
    Еще раз напомню что
    Да, кто-то скажет что это не имеет смысла, но всё же любопытно было бы сравнить.

    вы что хотите сравнить? что красивше выглядит? кстати код написанный на ООП выглядит красивее и уже именно поэтому стоит его использовать)
    Напомнить я хотел что не сравнивать его нужно, а работать с ним.
    -----------------------------
    Вот пример, который не покажет всех преимуществ, это лишь пример одного из многих преимуществ ООП. Задача такая, получить данные пользователя и вывести их на экран.
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . $user['name'] . '<br />';
    echo 'Фамилия: ' . $user['surname'] . '<br />';
    echo 'Город: ' . $user['city'] . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return;
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Казалось бы в чем тут преимущество если в ООП из данного примера больше кода, а выше я говорил о его краткости) краткость возникнет со временем при увеличении нашего приложения, еще я говорил что на ООП не любоваться нужно а работать с ним, так давайте же выполним следующие, сделаем так что если какие то данные не заполнены то выводилось сообщение "(данные не заполнены)"
    Процедурный стиль:
    $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
    $q->execute([$id_user]);
    $user = $q->fetch();
    echo 'Имя: ' . ($user['name'] ?? '(данные не заполнены)') . '<br />';
    echo 'Фамилия: ' . ($user['surname'] ?? '(данные не заполнены)') . '<br />';
    echo 'Город: ' . ($user['city'] ?? '(данные не заполнены)') . '<br />';

    ООП:
    class User{
        public $id;
        public $data;
        
        public function __construct(int $id)
        {
            $this->id = $id;
            $this->data = $this->getData();
            
        }
        private function getData(): array
        {
            $q = $pdo->prepare("SELECT * FROM `users` WHERE `id` = ? LIMIT 1");
            $q->execute([$this->id]);
            return $q->fetch();
        }
        public function __get($name)
        {
            if (isset($this->data[$name])) {
                return $this->data[$name];
            }
            return '(данные не заполнены)';
        }
    }
    $user = new User(1);
    echo 'Имя: ' . $user->name . '<br />';
    echo 'Фамилия: ' . $user->surname . '<br />';
    echo 'Город: ' . $user->city . '<br />';

    Вы заметили как изменился процедурный стиль? Нам пришлось изменять каждое поле, нам пришлось повторятся, и хорошо что у нас только три поля а не десятки, и хорошо что у нас то проект из одного файла а не из....многих. И еще очень хорошо что вышла PHP7, иначе пришлось городить еще кучу условий.
    Вы заметили как изменился код ООП?
    В одном месте изменился кусочек кода, было:
    return;
    Стало:
    return '(данные не заполнены)';
    Такие случаи будут появляться сплошь и рядом, поэтому выбор ООП подхода очевиден.
    Еще более наглядно покажет преимущество ООП если мы добавим редактирование анкеты, в процедурном стиле нужно будет создавать три запроса (потому что в нашем примере три поля, в настоящем проекте их может быть десятки), в ООП придется один раз немного повозится (совсем чуть-чуть) и сделать универсальное обновление данных, что в результате, именно в том месте когда где потребуется обновление получится так:
    Процедурный стиль:
    $q = $pdo->prepare("запрос");
    $q->execute([/*переменная*/])

    И так три раза (в нашем примере, а в реальном проекте больше)
    ООП:
    нужно будет всего лишь написать так (например имя изменить)
    $user->name = 'новое имя';
    Мы не просто свойство изменим, данные изменятся и в базе данных, всего лишь одной такой строкой, но как это сделать пусть будет домашним заданием, ибо уже три часа ночи и я пойду спать, всем добра)
    Ответ написан
    5 комментариев
  • В чем моя причина провала тестового задания Яндекса?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну давайте я покритикую:

    возьмем файлик

    1) вы не разобрались как объявлять методы у прототипов с новой нотацией `class`:

    class Travelsort {
        constructor() {}
        sortTickets(tickets) {}
    }


    2) вы не умеете пользоваться исключениями.
    if (!Array.isArray(cards)) {
        throw new ValueError('Wrong input');
    }


    3) использование let там где должен использоваться const

    4) в принципе использование переменных там где их быть не должно

    5) вы зачем-то реализовали свою функцию сортировки, я не увидел в требованиях отсутствия возможности использовать старый добрый Array.prototype.sort

    6) Общие замечания по кодинг стайлу. snake_case там где должен быть camelCase, пишите с большой буквы то что должно быть с маленькой и т.д.

    7) нарушения принципа единой ответственности. У вас объеткт умеет и сортировать и писать куда-то. Это категорически плохо.

    8) Если исправить 7-ой пункт то наш класс превращается просто в функцию.

    Далее... берем следующий файлик

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

    2) вы зачем-то тут в прототип объекта строки впихиваете функции для парсинга CSS. Таким образом мы нарушаем принцип единой ответственности. Да и в целом расширять без надобности прототипы объектов как-то не ок.

    Чуть дальше проскролил - вы пытаетесь расширить прототип строк для того что бы добиться API jquery? ух, батенька.

    3) очень много дублирования.

    4) очень плохо с protected variations.

    Справедливости ради, ваш код входит в категорию ">50% JS кода", так что не расстраивайтесь. Просто для работы в яндексе нужен чуть более высокий уровень и понимание вещей.
    Ответ написан
    17 комментариев
  • Доменная зона .io — что я пропустил?

    @Polim
    IO еще можно расшифровать как "Интернет организация" (internet organization)
    Ответ написан
    Комментировать
  • Как сохранить в текстовой файл имя текущей директории, где находиться батник?

    @res2001
    Developer, ex-admin
    Если добавишь ключ /s к dir, то будут полные пути, но появится содержимое подкаталогов и сами подкаталоги. Если подкаталогов нет, то такой вариант подойдет.
    Если есть, то придется делать в for:
    for %%a in ("%pathdir%\*") do >>myFiles.txt echo.%%~fa
    Ответ написан
    6 комментариев
  • Почему Python selenium не запускает браузер?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host


    а google.com открывается?
    Ответ написан
    2 комментария
  • Как сделать что бы цикл сохранял текущию позицию?

    Bellicus
    @Bellicus
    И швец, и жнец, и на дуде игрец.
    for(var j=1; j < 4; j++ ) {
        var i = j*5-5
        for(i; i <= j*5 ; i++) {
            ...
        }
    }
    Ответ написан
    Комментировать
  • Как можно с помощью pywinauto открыть jar file?

    urtow
    @urtow
    *nix, python, QA, bagpipe, folk music
    app.start("java -jar start.jar")
    Ответ написан
    Комментировать
  • Как исправить ошибку при установке Pyautogui?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Ну дык у вас в ошибке же требует установленного модуля PIL (Pillow)
    Ответ написан
    2 комментария
  • Как с помощью регулякри вытащить Id?

    id.match(/id="(.+?)"/)[1]
    Ответ написан
    Комментировать
  • Как избавиться от запятых на выходе регулярного выражения?

    var str = "My number is: 122-325-557-907";
    var reg = /([^-,])+/gi;
    console.log(str.match(reg).join(""));
    Ответ написан
    Комментировать
  • Не работает send_keys при использывания PhantomJs, что делаю не так?

    @GeneD88
    QA
    Это баг фантома последних версий. На 1.9.8 - скрипт проходит.
    Ответ написан
    5 комментариев
  • Как правильно отправить емайл на Gmail?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    1 комментарий
  • Как правильно у скласса вытащить "href"?

    var domains = document.querySelectorAll('.a-href');
    for(var i = 0; i < domains.length; i++) {
    	alert(domains[i].getAttribute('href'));
    }
    Ответ написан
    Комментировать
  • Как правильно у скласса вытащить "href"?

    Wernalur
    @Wernalur
    codepen.io/anon/pen/MybgzO

    А вообще если вся задача этого класса - помечать ссылки с href, то можно сделать так
    codepen.io/anon/pen/qZqWGg
    Ответ написан
    Комментировать