Ответы пользователя по тегу Программирование
  • Виртуальная машина - для чего нужна при разработке?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Давайте для начала определимся с определением "виртуалка". В Вашем контексте вопроса: Про разработку, насколько я понял, с использованием виртуалок, верно? Это определение можно применить не только к виртуализации как таковой, но и к контейнеризации в целом, хотя технические различия у них есть и довольно много. Так что продолжим с этого, имея в голове инфу о том, что под виртуалкой мы подразумеваем какую-то абстрактную коробку (это только что придуманный термин) внутри которой это всё крутится, не важно что это, виртуалка или контейнер.

    Этой "коробкой" можно назвать вашу ОС. Туда вы ставите всякие apache, mysql, python (давайте называть это AMP), как говорите. Всё ок.

    А теперь чуть изменим правила:
    1) Берём коробку на Ubuntu и запихиваем туда этот "AMP". Теперь у вас внутри вашей ОС есть коробка со всем необходимым.
    2) Берём коробку на Windows и запихиваем туда этот "AMP". Теперь у вас на компьютере две коробки, которые работать могут совершенно одновременно.

    Ну т.е. понимаете, да? У вас внутри, ну, допустим, MacOS висит и Windows и Ubuntu, внутри которых установлен стек "AMP" и один и тот же код, разрабатывая локально вы можете одним кликом мыши/клавиатуры прогонять и там, и там.

    Host OS (MacOS) -> Windows -> "AMP"
                    -> Ubuntu  -> "AMP"


    В случае "контейнеров", например Docker, обычно делают чуть иначе:
    Host OS -> Linux -> Apache
            -> Linux -> MySQL
            -> Linux -> Python


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

    Host OS -> Linux -> Apache (который смотрит на Python 2 и отдаёт результат по 127.0.0.1:80)
            -> Linux -> Apache (который смотрит на Python 3 и отдаёт результат по 127.0.0.1:81)
            -> Linux -> MySQL
            -> Linux -> Python 2
            -> Linux -> Python 3


    Можем открыть две вкладки браузера и смотреть как код работает на совершенно разных версиях питона! И при этом локально у Вас вообще ничего не будет установлено, никаких конфигов, никакого мусора. Что-то не понравится или поломается берёте и сносите кусок, заменяя его на другой. Тут уже воображение.
    Ответ написан
    Комментировать
  • Есть ли яык описания фильтров поиска?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    SQL - backend layer
    GraphQL - frontend <-> backend layer

    + Любые специализированные монады (стримы джавы, коллекции котлина, etc...)
    Ответ написан
  • PHP Как получить веб-страницу, если не работает file_get_contents?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    На всякий случай напоминаю, что полноценная VPS\VDS (на которой что угодно делай) стоит от 100 рублей в месяц. Так что тонко намекаю, что в 2017ом году хостинги, в которых даже ini поменять - не вариант, вроде как должны уже вымереть, ибо смысла в них, при таких ценах, более чем никакого. Тем более с такими говнонастройками =)
    Ответ написан
    3 комментария
  • Лучше ли книги онлайн - курсов?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Вопрос двоякий, и книги могут попастся - шлак, так и курсы. Зачастую, лучше всего индивидуальное обучение у какого-нибудь крутого и известного чувака (из гугла, мыла, рамблера, яндекса и проч.)
    Ответ написан
    7 комментариев
  • Что такое библиотека кода?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Ну фигачишь ты функцию, которая превращает строки в массив слов в этой строке. И нафигачил ты её настолько круто, что дали тебе премию на работе, а в отдельном тёмном уголке офиса поставили "Уголок Поклонению Делителю Строк". Даже включили в дайджест на хабре.

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

    И решил ты её перетащить в другой проект. Но решил не с помощью Ctrl+C -> Ctrl+V, а по-хитрому, создал целый файл с исходным кодом. Так вот этот файл и есть библиотека.

    P.S. В ходе рассказа ни один котик не пострадал.

    P.P.S. Но потом конечно же ты опубликовал её в npm и назвал фреймворком, но это уже другая история...
    Ответ написан
    Комментировать
  • Как правильно реализовать инверсию зависимостей в PHP?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Указывать не объект, а его интерфейс. В данном случае там три метода - getId, toString и __construct. Этого будет достаточно для начала.

    P.S.
    По-хорошему ещё надо избавляться от id, т.к. это поле относится к реализации, а не к логике. Все полученные посты из какого-либо стораджа будут его иметь, а новосозданным постам знать о его существовании не обязательно. Т.е. примерно так должно получиться:
    interface Post
    {
        public function __construct(string $content, User $user);
        public function getContent() : string;
        public function getUser() : User;
        public function changeAuthor(User $user);
    }
    
    class WallPost implements Post
    {
        ... implement methods
    }


    В таком случае у любых постов будет лишь автор и содержание, а остальное уже тонкости реализации, т.к. id нужен лишь для БД, что бы связать юзера с постом.

    Но это всё уже немного другая история (см. предметно-ориентированное программирование).

    P.P.S. На счёт сеттеров я бы поспорил. Предлагаю посмотреть вот эту https://habrahabr.ru/post/279919/#comment_8816651 ветку комментариев, где Сергей мне доступно объяснил по поводу их нужности и я вынужден с этим согласиться, ибо иммутабельность данных - это хорошо.
    Ответ написан
    3 комментария
  • Как правильно прочитать такой синтаксис?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    По-моему это общепринятый синтаксис, где посмотреть - не подскажу, но в квадратных скобках всегда указываются необязательные аргументы функций.

    Ещё есть подобные варианты:
    arr.map(Function callback[, Object context = null])
    //
    функция(Тип имя[, Тип имя = значение_по_умолчанию])
    Ответ написан
    1 комментарий
  • Где можно получить втыка за свой код и где подскажут как лучше сделать? И заодно поучится на ошибках других?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Можно закинуть на любой форум со словами: "Смотрите какой крутой код". Сразу можно узнать много нового. Конечно это шутка, но в каждой шутки, как известно, есть доля правды ;)

    stackoverflow.com, forum.sources.ru, тот же toster.ru и много ещё чего.
    Ответ написан
    4 комментария