• 0

    Я знаю, что vi и vim близкие родственники, но я писал исключительно о vim. А запускать после "update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi" смысла точно нет, да и не думаю, что в "Need to get 6.371 kB of archives" только новые алиасы для vi из коробки.

    Почему я до сих пор использую Vim?
  • 0

    Перемудрено сильно, по-моему. Три ветки (у нас было мастер, препрод и дев) защищенные по полной, для каждой фичи или разработчика отдельная ветка, которая средствами CI/CD гитлаба и докера разворачивается на отдельный домен типа cool-feature-branch.dev.example.com, ветка препрод идёт на preprod.example.com, а мастер на example.com. Локально смотреть можно на cool-feature-branch.example.com.localhost (по дефолту, а в принципе через env переменные передаётся).

    Непрерывная интеграция/внедрение приложения Symfony с помощью docker-compose и GitLab CI
  • 0

    Не факт. Я вот тоже чуть его не выбрал, просто начитавшись постов на Хабре :)


    P.S. Если бы выбрал, то возможно, тоже сейчас бы фанател :)

    JavaScript как явление
  • 0

    which vim ?

    Почему я до сих пор использую Vim?
  • 0

    Только что установил свежую Ubuntu 17.04 на новый ноут. Обычный десктопный исошник, не серверный, не сетевой, не минимальный, ни ещё какой:


    Заголовок спойлера
    ~$ sudo vim /etc/default/grub 
    sudo: vim: command not found
    ~$ sudo apt install vim
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
      vim-runtime
    Suggested packages:
      ctags vim-doc vim-scripts
    The following NEW packages will be installed:
      vim vim-runtime
    0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
    Need to get 6.371 kB of archives.
    After this operation, 30,8 MB of additional disk space will be used.
    Do you want to continue? [Y/n] 
    Get:1 http://ubuntu.volia.net/ubuntu-archive zesty/main amd64 vim-runtime all 2:8.0.0095-1ubuntu3 [5.299 kB]
    Get:2 http://ubuntu.volia.net/ubuntu-archive zesty/main amd64 vim amd64 2:8.0.0095-1ubuntu3 [1.072 kB]
    Fetched 6.371 kB in 0s (38,9 MB/s)
    Selecting previously unselected package vim-runtime.
    (Reading database ... 210651 files and directories currently installed.)
    Preparing to unpack .../vim-runtime_2%3a8.0.0095-1ubuntu3_all.deb ...
    Adding 'diversion of /usr/share/vim/vim80/doc/help.txt to /usr/share/vim/vim80/doc/help.txt.vim-tiny by vim-runtime'
    Adding 'diversion of /usr/share/vim/vim80/doc/tags to /usr/share/vim/vim80/doc/tags.vim-tiny by vim-runtime'
    Unpacking vim-runtime (2:8.0.0095-1ubuntu3) ...
    Selecting previously unselected package vim.
    Preparing to unpack .../vim_2%3a8.0.0095-1ubuntu3_amd64.deb ...
    Unpacking vim (2:8.0.0095-1ubuntu3) ...
    Processing triggers for man-db (2.7.6.1-2) ...
    Setting up vim-runtime (2:8.0.0095-1ubuntu3) ...
    Setting up vim (2:8.0.0095-1ubuntu3) ...
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in auto mode
    update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto mode
    ~$ 
    Почему я до сих пор использую Vim?
  • 0

    Ну не знаю можно ли назвать специфичными Windows и Linux :) А у них с высокими дпи проблемы не решены толком. То есть вроде оси поддерживают, но даже у популярного и современного софта проблемы с сотношением физических и логических единиц измерения.

    Почему я до сих пор использую Vim?
  • 0

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

    Сравнение REST и GraphQL
  • 0

    Удобнее, да. Но хранение — важная часть реализации. И хранение в виде целых тоже может быть сопряжено с проблемами.

    Точность через неточность: Улучшаем Time-объекты
  • +1

    Их очень часто приходится округлять в реальном мире. И проблемы в целом даже не в точности, а в том, что иногда деньги надо делить, а у них есть минимальная неделимая единица — копейка, цент и т. п… Как не крути, но если надо обсчитать реальные денежные движения, то разделить 1 копейку/цент попалам никак не получится.

    Точность через неточность: Улучшаем Time-объекты
  • +1

    Разница может очень криво себя показывать. Например, разница между 2017-08-17T20:59:59 и 2017-07-17T21:00:00 покажет секунду, а для бизнеса это сутки, а то и неделя/месяц/год/… Суть поста в целом — сравнение дат, вычисление разниц и т. п. инкапсулируем в VO, там реализуется бизнес-логика работы с датовременем. Можно вообще абстрагироваться от DateTimeInterface, а можно его реализовывать с учётом бизнес-правил.

    Точность через неточность: Улучшаем Time-объекты
  • 0

    Нет единого "правильно" в разработке. У int/long свои плюсы и минусы, у decimal свои, у string свои, и даже у float/double есть плюсы.

    Точность через неточность: Улучшаем Time-объекты
  • 0

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

    Точность через неточность: Улучшаем Time-объекты
  • 0

    Чаще удобнее как decimal или просто строки — точностью можно управлять динамически, а если нет деления, только сложение, вычитание и умножение, то точность может быть неограниченной (в разумных пределах, конечно).

    Точность через неточность: Улучшаем Time-объекты
  • 0

    Вот когда из коробки будет homebrew, тогда будет ближе, а то, что загружается из https://raw.githubusercontent.com/Homebrew/install/master/install вполне может и исходники скачивать, и компилять их, мало чем отличается от строки копипасты типа curl… | tar… && make && make install

    Почему я до сих пор использую Vim?
  • +1

    Что значит "убьют всеь проект"? Государство платит за проект. От чего ему умирать? Если есть отдельная платформа, на базе которой делается проект для государства, а хочется ещё платформу развивать за счёт государства и писать коммерческие проекты на её базе, то три основных варианта:


    • прибыль от проекта пускать на платформу, не закладывая в себестоимость доработки платформы
    • доработки платформы, необходимые для реализации проекта, оценивать с рейтом значительно более низким чем рейт реализации собственно проекта
    • участие государства в финансировании развитии платформы с получением государством части прибыли от её коммерческого использования
    Часть 2. Сначала они воруют, а когда ты побеждаешь, то тебя убивают
  • 0

    Да, за последние дни пару раз был на грани от того, чтобы просто поехать в магазин и взять прошку. Именно из-за проблемы выбора, ну и специфики киевского рынка ноутов — пощупать с десяток моделей ценой 1500+ просто так никто не даст, а макбуки можно.


    В итоге выбрал один из Асусов долларов на 200 дешевле приглянувшейся прошки с явным ощущением что перплатил за ненужные мне двд, хдд и игровое видео, но с прошкой были бы риски плохой работы софта с ретиной.

    Почему я до сих пор использую Vim?
  • 0

    Прикольно — плюсик к эпплу. Лет через 3-5 может перевесит при выборе очередного ноута :)

    Почему я до сих пор использую Vim?
  • +1

    Судя по контексту homebrew — пакетный менеджер под MacOS не от Apple, про который надо откуда узнать и как-то установить. По смыслу гораздо ближе к "из исходников собирать", чем к "из коробки".

    Почему я до сих пор использую Vim?
  • 0

    Вероятно, да, живут меньше. Но для меня АКБ в ноуте скорее аналог UPS для всяких форс-мажоров, чем средство длительной автономной работы.


    Наверное подобные статьи надо начинать с определения роли ноутбука в жизни читатлеля. Для меня основная роль — это почти стационарное рабочее место, которое несложно два раза в день переносить/перевозить из одного здания с другого и пару раз в год из одного города в другой. Возможность зайти на полчаса на какой-то сайт/сервер вдали от розеток или полноценно работать когда в розетке 5 минут нет тока — для меня бонус, за который я готов немного переплатить. Возможность целый день работать в парке на скамейке, на океанском пляже или где-то в лесу, когда застал звонок шефа "всё лежит" — не то, за что я готов платить деньгами и весом (есть похожие модели с бОльшим аккумулятором, но на 1,5 кг тяжелее, и кажется, только с 15"). Если будет такая необходимость, то критерии выбора будут совсем другими — на первое место встанет мобильность (размеры, вес) и время автономной работы.

    Как выбрать правильный лэптоп для программирования
  • +1
    Мне сложно представить зачем вам может быть нужен одновременно и ApiClient и EntityManager в одном таком репозитории.

    Чисто в теории, репозиторий может хранить корень агрегата в СУБД, а его листья где-то удаленно. На практике вполне может быть вариант, когда репозиторий отдаёт статьи из базы, а в $article->Author подставляет значения из http-сервиса пользователей

    Doctrine Specification Pattern или ваш реюзабельный QueryBuilder
  • 0

    Продавцы обычно пишут минимальную или нормльную частоту, а не максимальную, на которую выходит проц при наличии большой нагрузки. А ноутов, штатно (набор кода, серфинг, офис) работающих на 2,5-2,8 ГГц, а при нагрузке (анализ, билды, игры) выходящих на 3,2-3,8 ГГц, достаточно. Как минимум я не встретил при поисках i7 с максимальной частотой меньшей 3,2 ГГц. В целом при фильтрах типа FullHD+, 15"+, 16Гб+, 256Гб+ процессор с максимальной частотой 3+ ГГц по умолчанию получается, а выбор достаточно большой, чтобы много времени провести в раздумьях готов ли платить за игровую видеокарту или лучше винт побольше. Наверное 3 рабочих дня сейчас потратил, чтобы заказать вчера в итоге http://hotline.ua/computer-noutbuki-netbuki/asus-rog-gl753ve-gl753ve-gc082t-black/ и то согласился бы повытаскивать из него три девайса и добавить оперативы или винт. Да даже ради меньшего веса согласился бы.

    Как выбрать правильный лэптоп для программирования
  • 0

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

    Заблуждения Clean Architecture
  • 0

    Есть языки, в которых всё объект, ну или всё выглядит как объект. Правда, мне для таких языков больше нравится "объектные", а не "объектно-ориентированные".


    И тогда это не классИ тогда это не класс

    Класс, поскольку является спецификацией объектов определенного типа. Спецификация гласит "Объекты данного типа в истеме запрещены" :)

    Заблуждения Clean Architecture
  • +2
    Просто скидка что-то очень общее. То что вряд ли будет меняться часто.

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

    Заблуждения Clean Architecture
  • +2

    Тут надо четко разграничать в каком контексте мы говорим об Entity. Entity дяди Боба — это Domain Эванса, состоящий из его Entity, ValueObject, Repository, Event, Service и т. д.

    Заблуждения Clean Architecture
  • 0
    Java/C# в этом плане здорово подосрали, испортив восприятие многими людьми парадигмы ООП.

    Как по мне, то началось это с C++, но дело не в неймспейсах, а в отходе от парадигмы "всё есть объект и даже класс". С этой точки зрения статические методы вполне допустимы, если воспринимать класс как объект, знающий как создавать экземпляры определенного типа, как фабрику. Ну а ответом на вопрос "как создавать" вполне может быть "Никак, запрещено".

    Заблуждения Clean Architecture
  • 0
    Действительно, такой подход часто применяется и преимущества перевешивают недостатки?

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


    Т.к. нередко операция затрагивает несколько сущностей, есть несколько вариантов по размещению реализации.

    Если сущности являются частями одного агрегата, то хорошее место — ближайший общий "подкорень". Если слабо связаны между собой и сложно определить к какой из сущностей относится, то часто лучшее место отдельный доменный сервис. Ваш пример выглядит таким. Вариант — создание ордера на основе корзины ответственность фабричного метода класса ордера или фабрики ордеров. Дабы сильно не связывать корзину и ордер, собственно проверку можно делать используя паттерн спецификация как-то типа (псевдокод)


    class Order {
      public static makeFromCart(ShoppingCart cart) {
        var order = new self();
        var spec = new ItemsCountCartSpecification(2);
        if (spec.satisfiedBy(cart)) {
          order.discount = 0.2;
        }
        return order;
      }
    }
    Заблуждения Clean Architecture
  • 0

    Интерфейс репозитория объявляется на, как правило, уровне бизнес-логики (слой entities), а реализуется на уровне инфраструтктуры (слой interface adapters). На уровень логики приложения (use cases) передаются конкретные интерфейсы как экземпляры абстрактного интерфейса, интеракторы оперируют только абстрактными методами, объявленными в слое бизнес-логики, хотя у конкретного репозитория могут быть и другие.

    Заблуждения Clean Architecture
  • 0

    По сути это будет Domain Service — вырожденный случай Entity без собственных данных (хотя внутри может быть какая-нибудь мемоизация, например). В слоях и поста он будет относиться к слою entity, а вызываться из слоя interactor\usecase. Почему? Скорее всего потому, что правило вычисления скидки независит от сценариев использования. Сценарии могут определять вычислять скидку или нет, по какому из доступных способов вычислять скидку ("десять процентов", "три по цене двух", "накопительная скидка по бонус-карте"), но сам алгоритм вряд ли зависит от сценария использования и может использоваться во многих.

    Заблуждения Clean Architecture
  • 0

    Из коробки или надо из исходников собирать? :)

    Почему я до сих пор использую Vim?
  • 0

    "самый популярный десктопный Unix" — Макось. Linux не является Unix.

    Почему я до сих пор использую Vim?
  • 0
    Это не совсем бесплатный бонус, вы теряете возможность кэширования

    Нашим процессам кэширование скорее противопоказано. Может, конечно, пользователь жать F5, но при нормальном флоу как раз постоянно происходят изменения состояния — суть пользовательских сценарие в изменении.


    Про циклические данные я не понял, могли бы вы ткнуть меня носом как эта проблема (которой у меня не было) решается в GraphQL?

    Классический пример — пользователь и его друзья, тоже пользователи. При разработке классического API мы для конкретного ендпоинта вынуждены искусственно ограничивать глубину просмотра клиентом друзей на бэкенде по, грубо говоря, определению ендпоинта. В GraphQL или JSON API (тоже далеко не чистый REST) клиент сам указывает необходимую ему глубину просмотра.


    Почему вы предполагаете, что если GraphQL, то модели api у нас вседа идеальны и не требуют расширения или изменения, а если REST, то у нас все плохо?

    Я предполагаю, что модели одинаковы, но в случае REST всё наружу не выведено через API в целях оптимизации трафика.


    Я думаю это хорошо сработает для приложений у которых вся логика на клиенте (например игры), и бэкэнд нужен скорее для сохранения состояния и его синхронизации.

    Как по мне, то ровно наоборот. REST хорош как раз для сохранения/синхронизаций состояний. Получил "снэпшот" ресурса по GET, что-то намодифицировал и отправил новый "снэпшот" по PUT или "дифф" по PATCH. GraphQL же как раз заточен (в плане модификации) под точечные бизнес-операции, позволяя избегать костылей типа POST /posts/123/approve c пустым телом.


    Ну и опять же, один ресурс может отдавать разные модели, например:
    /posts
    может вернуть PostReference, Post, PostWithComments,
    используя разные типы, такие как
    application/vnd.post-ref+json, application/vnd.post+json и т.д.

    Можно считать GraphQL более гибким и простым (как минимум на фронте) способом делать это.

    Сравнение REST и GraphQL
  • 0

    Если за одну и ту же работу есть возможность получать больше денег, то почему бы не получать?

    Где лучше всего жить и работать разработчику
  • 0
    А вы alt+tab пробовали? :)

    А вы мой коммент читали? :) "Постоянно приходится переключаться между окнами/столами."


    Человек не может одновременно за многими окошками следить

    Но может переводить взгляд с одного окошка на другое. Перевод взгляда обычно более быстрая операция, чем движения пальцами.

    Как выбрать правильный лэптоп для программирования
  • 0

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

    Почему я до сих пор использую Vim?
  • 0

    Выжить можно среднему программисту, а жить нельзя :)

    Где лучше всего жить и работать разработчику
  • +2

    Медиана для сеньора 3400, миддл — 1900, джун — 600. Подробнее тут https://jobs.dou.ua/salaries/ — вроде в России заблокирован… В целом для сеньоров мало заисит от языка, но среди мйнстримовы проседает PHP и выдаётся Ruby.

    Где лучше всего жить и работать разработчику
  • 0

    А я вот не представляю как можно постоянно 40+ в неделю работать на 15" дюймов, не говоря про 13"-. Хоть 600 DPI, банально физический размер текста (в миллиметрах) не позволяет нужное количество информации держать на экране. Постоянно приходится переключаться между окнами/столами.

    Как выбрать правильный лэптоп для программирования
  • 0
    Большинство vim'еров держат рядом открытый терминал и выполняют в нем все, что нужно, а в vim только правят.

    Грубо, я так же работаю и в IDE. git, docker, файловые команды, иногда grep, tail — это всё в консоли, а в IDE — просмотр и правка кода, иногда отладка. Иногда в консоли открытой в IDE запускаю vim даже для правки конфигов :)

    Почему я до сих пор использую Vim?