• Почему zabbix-agent не может подключиться к zabbix серверу?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Телнет проходит? В обе стороны? Если нет (особенно, если от сервера до клиента) - это и есть причина, копайте фаерволлы и т. п.
    Ответ написан
    Комментировать
  • Какое железо или ноут выбрать для PhpStorm/Docker?

    @ZZahar
    Если решил проблему - нажми "отметить решением"
    Вам подойдет Lenovo IdeaPad 520-15IKB (80YL00LXRA) ибо легкий и все потянет, там аж 16 гб оперативки и видюха на 4 гига + 1ТБ HDD + SSD 256 гб + 15" IPS. Правда там DOS и два ядра, но вам подойдет.
    1) Можно ли взять достойный лаптоп в этот бюджет? И какой?

    Можно. Какой не подскажу т.к не знаю, но на М.видео за 30 есть вполне годный.
    Если да - насколько он сольет десктопу аналогичной цены?

    Во первых, он сольет десктопу вообще ибо там нету нормальной системы охлаждения и главный не достаток неттопа это система охлаждения.
    Если честно в теории не очень, но перегрев может быть заставить уходить в защиту и снижать производительность.
    К сожалению ещё туда нельзя Ryzen запихнуть.
    Если брать десктоп - то только маленький, не полноразмерный системник (часто переезжаем по миру с семьей). Возможны ли такие машинки на взрослых камнях?

    Вполне. Есть такие и с i7, чего думаю вам хватит.
    И если брать десктоп - то какой i5/i7 выбрать? Их что-то немеряно развелось на рынке
    Конечно лучше i7, но если там будет 8 гигов оперативки, то i7 вам не поможет, уж лучше купить с i5, но 16 гигов.
    Ответ написан
    Комментировать
  • Как сделать push-уведомления на сайт самостоятельно?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    без сторонних сервисов - не получится.

    варианта два:

    1. periodical ajax. Но в этом случае пользователь может получить уведомление не сразу, а когда получит, может быть уже не актуально.

    2. WebSocket - моментальное уведомление. Но нужно поднимать свой Websocket демон.
    Ответ написан
    Комментировать
  • Как монетизируются языки программирования и бесплатные фреймворки?

    @di23
    Вы недооцениваете опенсорс. И смотрите только на быстрое получение прибыли с проекта.
    Вот пару моментов которые пришли в голову:
    1. Распространение своей технологии, своей продукции. Завоевать умы гораздо гораздо легче бесплатным продуктам, особенно когда этот продукт хорош. А люди, аудитория стоят дороже денег, надеюсь это не надо объяснять? В конечном счете подсадив людей на технологию можно ими управлять и диктовать свои правила. Это власть.
    2. Деньги можно срубать с больших компаний использующих ваш продукт. Грубо: "Для того что бы я дальше развивал свою технологию мне нужны деньги, иначе я перестану ее развивать, она загнется, а вы, уважаемая компания, потеряете кучу времени и сил переходя на другое решение. По этому прошу отстегивать мне Н-ю сумму ежемесячно" Это грубо, но в целом именно так. Можно сюда еще включить то, что компании могут напрямую просить добавить какой-то функционал в следующую версию вашего продукта.
    3. Банальные пожертвования.
    4. Поддержка. Опять же, у крупной компании возникли проблемы или не понимания вашей технологии. Вы им оказываете индивидуальную поддержку за приличную сумму.
    5. Вас будут приглашать на различные конференции, в универы, в компании и т.д. За это все можно и нужно брать деньги. Вообщем сюда попадает весь заработок с собственного имени и лица, как у голливудской звезды.
    6. Еще можно делать технологию полу-бесплатной. Как Юнити, например. Можно юзать бесплатно, но если ваша игра набрала определенную аудиторию вы должны платить за их технологию. Весьма честно и хитро.
    Да кучу еще всего можно сюда дописать. Главное - это аудитория и популярность. С этими двумя вещами можно ворочать горы.
    Ответ написан
    3 комментария
  • Что изучить первым и выгоднее Angular, Angular 2 или React?

    @beduin01
    Лучше vuejs.org еще ничего не придумали.
    Ответ написан
    Комментировать
  • Как реализуется SPA-приложение, на примере Vue.js?

    @game802 Автор вопроса
    Дали ответ на другом ресурсе, может быть кому пригодится:
    1. Да, на нем пишут как простые штуки таки и полноценные SPA, навигация работает без презагрузки.
    2. Nuxt js это сборка (VueJS + VueRouter и т.д.) которая делает Рендеринг SPA приложения на стороне сервера. Зачем он это делает? - все очень просто. SPA приложения неиндексируются поисковыми ботами из-за своей асинхронности и JS, NuxtJS решает эту проблему, делая рендер на стороне сервера (выполняет все асинхронные действия например запрос к бекенду по REST, и возвращает отрендеренный HTML)
    3. SSR (серверный рендеринг), генерирует ту страницу которую запросил пользователь например: example.ru/item/12, в данном случае SSR спросит у бэкенда Item с id = 12 , и затем сгенерирует и вернет клиенту HTML. В конце HTML документа всегда подключен файл вашего SPA приложения, который исполнится и включит реактивность. Т.е. Получается что первый запрос к сереверу это отрендеренный SSR, а все остальные переходы по приложению это уже SPA
    4. Да, просто ставите NuxtJS и наслаждаетесь разработкой.
    5. Взаимодействует через REST, делая GET|POST запросы на ваш бекенд. Либо через socket. Используйте laravel 5 как бэкенд
    6. Vuex это централизованное хранилище данных. предназначено для того чтобы жёстко отделять данные от view. Все данные хранятся в едином экземпляре, и если происходит set (мутация) для какого-либо значения в хранилище, то во всех местах где был get этого значения, произойдёт обновление.
    Этим обеспечивается реактивность, сайт перестаёт быть просто страницей. Он если хотите "обретает душу"

    Иногда в простых админках я создаю всего один основной action который делает т.н. getAllState, т.е. Берет все состояние относительно пользователя у бекенда. Например берет объекты user, comments, posts. Billing, messages и пишет это в хранилище.
    И когда мне надо обновить данные, я опять вызываю getAllState который обновит хранилище, в это время автоматически вызовется цепочка геттеров/сеттеров и вот тут сработает магия vue. Он сравнит текущий отрендеренный DOM с Новым Virtual DOM. И если где то будут различия он перерендерит этот кусок.

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

    Автор: Евгений Рюмин
    Ответ написан
    4 комментария
  • Как писать много кода, оставляя его простым, как в начале?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    1) Документируй
    2) Абстрагируйся всегда максимально
    3) Пиши классы по принципу "черного ящика"
    4) Один класс решает одну конкретную задачу, не стоит городить комбайны.
    Ответ написан
    5 комментариев
  • На чём писать CRM?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Я бы советовал строить CRM на базе существующих решений. Например, в мире PHP есть OroCRM, открытый исходный код, вменяемая архитектура, строится на базе symfony, тем самым упрощается поиск разработчиков.
    Ответ написан
    6 комментариев
  • Когда лучше macro а когда кастомная twig функция?

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

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

    UPD подведу итог, я бы рекомендовал
    1) использовать кастомные твиг функции, когда требуется какая то сложная логика или запрос данных из системы, но не рекомендовал бы ее для генерации html, просто потому что html в пхп не гуд. но в кастомной функции вы можете вызвать render другого шаблона, это норм, просто может ухудшить поиск верстки для фронтендеров (в случае инклюда для них все очевидно).
    2) макросы - для кучки небольших вещей которые используются часто и повсеместно (инпуты)
    3) инклюды для остальных кейсов, то есть когда данные уже есть и нужно их оформить в html
    Ответ написан
    2 комментария
  • Какую архитектуру выбрать?

    @xeops
    Делаем мы тут одну облачную CRM для турфирм...
    Первая версия вышла где-то в $60K, но покупать не хотели.
    На тот момент, когда клиенты уже готовы были платить деньги за использование, в систему было вложено около $100K.
    Сейчас уже сотни клиентов, системе несколько лет, а она все еще разрабатывается и развивается. И конца этому нет, потому что появились сильные конкуренты.
    Ответ написан
    Комментировать
  • Как выполнить соединение с компьютером из php?

    daager
    @daager
    Интерпретатор php не смог сынтерпретировать ваш файл.
    Ответ написан
    2 комментария
  • Как перенять объектно-ориентированное мышление?

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


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

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

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

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

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

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


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

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

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


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

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

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

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


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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что такое адаптер?


    Смотрите. Есть у вас например micro USB кабель. И есть дырка в новом макбуке - Usb type c. Друг в друга они, как вы понимаете, не втыкаются. И можно взять адаптер microUSB -> USB type-c.

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

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

    За счет этого достигается независимость.

    Что значит "принимает зависимость"?


    Предположим у нас есть метод для смены пароля юзера. Что бы это безопасно провернуть, нам надо пароль захэшировать и хранить в захэшированном виде. То есть нам нужна какая-то штука, которая будет эти пароли хэшировать. Мы о ней знать ничего не хотим, хотим что б нам ее давали:

    public function changePassword(string $password, PasswordEncoder $encoder)
    {
        $this->password = $encoder->encode($password);      
    }


    Это зависимость нашего метода. Он зависит от него. Диалог между объектами можно представить себе такой:

    - Слыш, поменяй пароль на этот
    - Оке, только хэшер паролей мне дай, мне очень надо
    - А какой тебе?
    - Да любой с этим типом
    - Ну ок. На вот пароль и хэшер. Делай дела.

    Что такое вообще эта зависимость?


    Зависимости - это все что мы используем чтобы сделать дела. Это не только библиотечки, но и просто классы, функци и т.д. Весь "сторонний" код с точки зрения нашего кода. И самое важное в том, что "нашим" кодом является тот, над которым мы работаем в данный момент времени, а не все что мы написали. Даже функции, которые есть в языке программирования из коробки являются зависимостями. Вот только от них вам не деться никуда особо, а потому с ними замарачиваться не стоит. Или если есть долговременная поддержка у библиотеки и она устаялась - тоже можно просто использовать. А вот если это поделка на гитхабе с 10-ю звездочками и там до сих пор нет ни одного релиза - но она вам вот очень нужна, возможные поломки в ней (а они рано или поздно будут) стоит "закрыть" адаптером что бы потом поменять на что-то получше или обновить без боли.
    Ответ написан
    Комментировать
  • Как правильно порождать объекты?

    27cm
    @27cm
    TODO: Написать статус
    1. Норм.
    2. Норм.
    3. Плохо, транспорт не должен создавать колёса.

    Вопрос - как логичней это делать? Учитывая то, что в сущности Wheel по-умолчанию нужно установить нек-рые параметры, к-рые зависят от параметров родителя, т.е. сущности Transport.


    Сперва создаёте колесо (через new или через фабрику, как удобнее) и настраиваете параметры, не зависящие от транспорта:
    $wheel = new Wheel();

    Затем добавляете колесо к транспорту:
    $transport->addWheel($wheel);

    Параметры Wheel, которые зависят от Transport, определяются в методе Transport::addWheel() или Wheel::setTransport():
    public function addWheel(Wheel $wheel)
    {
        $wheel->setTransport($this);
        $this->getWheelsCollection()->add($wheel);
    }
    Ответ написан
    1 комментарий
  • Что за магия в symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Что-то как-то теряется смысл контроллера, как посредника между моделью и видом.


    1) Symfony - не MVC фреймворк, это request/response фреймворк. Более правильная терминология для HTTP фреймворка.

    2) Контроллеры - это не один класс, это в данном случае весь слой от точки входа, фронт контроллера, до непосредственно экшена контроллера. View в этом случае - это HTTP, пассивная вьюшка и только. Сама по себе она ничего не умеет, это тупо представление данных собранное контроллером.

    У этого подхода есть название - Model-View-Adapter или Mediating-controller MVC, но все это лишь бесполезные детали.

    3) ParamConverter-ы здорово уменьшают дублирование кода в контроллерах, однако работа с сущностями в контроллерах дело довольно опасное. Это своего рода компромис между "правильной архитектурой" и "стоимостью разработки.
    Ответ написан
    Комментировать
  • Разделение внутри бандла?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    когда бандл большой но не на столько чтоб делать 2 бандла


    Читаем symfony best practice - у вас должен быть всегда только один бандл. AppBundle. Все остальные варианты бандлов - только для самодостаточных вещей, которые вы хотите реюзать между проектами. Причем как правило "в бандл" заранее не стоит это заварачивать а уже когда будет видно что получилось что-то реюзабельное.

    Далее, разделение по функциональности - дело хорошее. Вот только не стоит забывать, что контроллеры к приложению имеют весьма посредственное отношение, это просто UI. Имеет смысл разделять по слоям/зонам ответственности + по функционалу. так у нас может быть такая структура:

    Controller
        User
           UserController
    Entity
       - User
           - UserProfile
           - UserCredentials
           - User
           - UserRepository (только интерфейс)
       - Downloads
           - какие-то сущности


    Словом, делайте так, как вам удобно. Но лучше пусть в одной директории будет 10 файлов, чем если бы у нас было 5 директорий и по 1-2 файла в каждом.
    Ответ написан
    Комментировать
  • Как разместиться правильно на github?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. вместо /v1.0/ используйте теги гита
    2. test | tests | ... - обычно это каталог для авто тестов
    3. build | release | ... - это каталоги для собранных (релизных) файлов, тот же jquery.min.js например
    4. external | vendor | ... - каталоги с внешними зависимостями текущего проекта
    5. src | lib | ... - сам код проекта
    6. bin - каталог с исполняемыми файлами для проекта
    7. var | tmp | ... - каталог для временных файлов
    8. Makefile - настройка для консольной утилиты make
    9. bower.json - зависимости bower
    10. package.json - зависимости npm
    ...

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

    @bears
    Если на клиенте используете что-то типа Backbone например, то неплохо подходит https://github.com/schmittjoh/JMSSerializerBundle так как не надо ничего делать "руками", просто все гоняется в json формате. Для валидации есть symfony.com/doc/current/book/validation.html
    Ответ написан
    6 комментариев
  • За что программист получает деньги?

    reeroe
    @reeroe
    UX/UI дизайнер
    Но вот что я не могу понять, если человек берет по часовую оплату, но из половины и даже больше этих часов он разбирается сам, как это можно сделать, получается, что он не совсем хороший программист? Или это в принципе нормальное явление? И как тогда поступать считать меньшее количество часов ?


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

    Программисту платят не за имитацию бурной деятельности, а за решение конкретных задач в вполне конкретные сроки, причем почасовая оплата или нет роли тут не играет. До тех пор, пока программист укладывается в сроки, мой Вам совет, не пытайтесь заниматься микроменеджментом там, где этого не требуется. Особенно с учетом того, что микроменеджмент написателя кода руками — это задача примерно того же порядка, что микроменеджмент кота. Результат обычно такой же.
    Ответ написан
    2 комментария
  • За что программист получает деньги?

    sabramovskikh
    @sabramovskikh
    За работу. Если грузчику платят за то, что он загружает фуры, почасовая оплата, то зачем ему платить когда он таскает мешки и возвращается за мешком на легке, ведь он не работает?
    Код нельзя написать хорошо никогда. Можно стремится только к этому. Пока он разбирается это процесс разработки продукта. Почитайте книгу о циклах разработки ПО и все поймете
    Ответ написан
    8 комментариев