• За счет чего TDD “драйвит” разработку
    +3
    В Гугле, в Андроиде есть баги не пофикшеные с 2016 и до сих пор актуальные. Я на своих 15 годах опыта тоже таких адекватных не встречал. Так что где таких взять — я не знаю.

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

  • За счет чего TDD “драйвит” разработку
    +2
    Все эти подходы просто придумываются людьми совершенно далекими от разработки. Они просто не понимают, что в реальной жизни никто не даст переписывать ни код ни тесты по десять раз. Бизнес заказчику невозможно объяснить, зачем нужен рефакторинг и почему важно обновлять кодовую базу на новые версии фреймворков. Люди не пишут тесты не потому, что им лень, а потому, что на таску требующую пары дней работы выделяют пару часов. А потом приходят университетские работники и начинают разглагольствовать, что хорошо бы писать код правильно. Да, неплохо бы. Только, к сожалению, за это денег не платят.

  • За счет чего TDD “драйвит” разработку
    +5
    Минусы TDD


    TDD и есть тот минус.
  • Как создать простое Rest API на .NET Core
    0
    Как надо делать описать гораздо сложнее. Потому что жизнь — не лабораторная работа, и там нет универсального правильного ответа. Опыт как раз таки и говорит, что в разных случаях надо бывает разным. За этот опыт как раз деньги и платить должны, а не за парсинг json.

    Если будет время, я попробую написать пару статей, как можно было бы это писать в тех или иных случаях.
  • Как создать простое Rest API на .NET Core
    +2
    Уважаемые авторы!

    Большая просьба, не писать статьи если вы действительно не обладаете опытом в данной теме. И тем более, не нужно писать статьи «для новичков» ведь именно они-то и не могут отделять зерен от плевел и в результате начинают тупо копировать странные и вредные практики.

    Если по существу, запомните золотое правило архитектуры ПО — не усложняйте архитектуру без надобности. Например, зачем необходим

    public abstract class BaseModel
    {
        public Guid Id { get; set; }
    }

    Какие задачи он упрощает потом? Что будет, если мне нужна будет сущность с интовым Id? Я понимаю, если бы было сделано что-то типа этого:

    
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        foreach (var entityType in modelBuilder.Model.GetEntityTypes())
        {
            if (typeof(ISoftDelete).IsAssignableFrom(entityType.ClrType))
            {
                entityType.AddSoftDeleteQueryFilter();      
            }    
        }
    }
    public static void AddSoftDeleteQueryFilter(
            this IMutableEntityType entityData)
        {
            var methodToCall = typeof(SoftDeleteQueryExtension)
                .GetMethod(nameof(GetSoftDeleteFilter),
                    BindingFlags.NonPublic | BindingFlags.Static)
                .MakeGenericMethod(entityData.ClrType);
            var filter = methodToCall.Invoke(null, new object[] { });
            entityData.SetQueryFilter((LambdaExpression)filter);
        }
     
        private static LambdaExpression GetSoftDeleteFilter<TEntity>()
            where TEntity : class, ISoftDelete
        {
            Expression<Func<TEntity, bool>> filter = x => !x.SoftDeleted;
            return filter;
        }
    

    В чем тут профит — понятно. Наследуя один раз интерфейс, мы под капотом оставляем кучу работы связанной со скрытием «удаленных» сущностей. Аналогично можно сделать тинанты или аудит. Здесь же мы просто не пишем один раз проперти, зато пишем наследование! Фантастика!

    Аналогична ситуация и с

    public interface IBaseRepository<TDbModel> where TDbModel : BaseModel
    {
            public List<TDbModel> GetAll();
            public TDbModel Get(Guid id);
            public TDbModel Create(TDbModel model);
            public TDbModel Update(TDbModel model);
            public void Delete(Guid id);
    }

    В чем смысл данной сущности? Что она дает такого нового, что отлично от DbSet? В ней нет никакого смысла, просто еще один слой абстракции который еще потом требует вот такого чуда:

    services.AddTransient<IBaseRepository<Car>, BaseRepository<Car>>();

    А теперь представьте проект с сотнями моделей? Мы просто создали себе дополнительную работу и не решили ни одной проблемы. Например, нам нужно использовать какой-нибудь хитрый фильтр по автомобилям в трех различных местах. Логично вынести этот фильтр в отдельный сервис для доступа к данным тем самым не повторяя код. Но в данных примерах этого нет, там простое повторение DbSet<>.

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

    image

  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    А что не так с XPS?
  • Kotlin FP: моноиды и сортировки
    –2
    Как тяжело жить без Linq
  • Тестируем веб-API ASP.NET Core
    0
    1) Вот и я об том же говорю. Благодаря таким «экспертам» которые пишут книжки по «чистой архитектуре» не имея релевантного опыта в текущем стэке и рождаются франкенштейны. Раньше была необходимость писать репозитории, которые абстагировали логику доступа к данным для того, чтобы можно было менять провайдера БД. Но EF Core это уже такая абстракция, к нему уже есть провайдеры к БД и нет никакой необходимости городить свой огород сверху.

    Что касается бизнес-логики и ее зависимости. Я не говорю, что она должна зависеть. Однако репозиторий, особенно такой как в статье, не решает никаких проблем. Я предпочитаю выносить логику работы в Data Access Layer, в который инжектится DbContext, и уж он-то и реализует специфичные операции с данными. Понятно, что под репозиторием мы можем понимать и DAL, но по факту, это разные вещи. Репозиторий скорее относится к домену и по идее, не должен иметь методы для авторов и альбомов вместе. В то де время DAL делается с упором на инкапсуляции бизнес-логики и нет никаких проблем возвращать разные модели в рамках одного сервиса, если это продиктовано требованиями.

    2) Я понимаю, для чего в принципе существуют интерфейсы. Однако, опять же, нужно понимать зачем их использовать. Я видел сотни проектов, где была куча интерфейсов, которые практически никак не использовались. Просто раздувается кодовая база без какого-либо смысла. И да, кстати, вопрос мока контекста с нужными данными — это вообще боль в случае, когда это чуть больше, чем круд. Проще инжектить реальную тестовую базу.

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

    А люди почитав таких авторов, начинают обмазывать круд юнит тестами, где проверяют статус 200, вместо того, чтобы проверять действительно важные вещи.
  • Тестируем веб-API ASP.NET Core
    –2
    Прежде всего, сам репозиторий это грубая ошибка.
    DbSet это уже репозиторий. И он уже предоставляет все те методы, которые тут используются. Нет никакой необходимости оборачивать его еще в один уровень.

    Более того, нет никакой необходимости писать интерфейс для конкретного типа, который явно не предполагает несколько реализаций. Это еще одно усложнение логики. Если уж делать, то это должен быть интерфейс типа
     IRepository<T>
    .

    Более того, контекст используется как Disposable, при этом контекст в стартапе используется в рамках пула. И даже я не знаю, хорошо ли диспозить контекст, если он получен в рамках пула.
  • Тестируем веб-API ASP.NET Core
    +1
    Да причем тут перевод вообще?

    Я против тупого копипаста с нулевым пониманием темы. Если посмотреть пользователя, то он в день по десяток статей заливает. Абсолютно бесполезных.

    Я не знаю, о чем думают пиарщики, как по мне, такие действия не только не рекламирует компанию, а скорее лишь подчеркивают полный непрофессионализм. Чему там могут научить такие кадры — я лично ХЗ.

    Сама статья от 2018 года. С тех пор вышли 2.2, 3.0, 3.1 и 5. И если в оригинале допустимо говорить о «новинке» которой к слову тоже уже пару лет было, то еще через 2 года и 4 новых версии — странно.

    Более того, в чем вообще польза данной статьи — непонятно. Проверять, получаем мы статус ОК от HTTP запроса? Да он может отваливаться просто потому, что порт занят другим процессом. Как это свидетельствует о качестве кода? Зачем вообще нужны такие тесты?

    В другой статье этого автора www.infoq.com/articles/advanced-architecture-aspnet-core чувак на полных щах пишет
    public interface IAlbumRepository : IDisposable
    {
    	Task<List<Album>> GetAllAsync(CancellationToken ct = default(CancellationToken));
    Task<Album> GetByIdAsync(int id, CancellationToken ct = default(CancellationToken));
           Task<List<Album>> GetByArtistIdAsync(int id, CancellationToken ct = default(CancellationToken));
           Task<Album> AddAsync(Album newAlbum, CancellationToken ct = default(CancellationToken));
           Task<bool> UpdateAsync(Album album, CancellationToken ct = default(CancellationToken));
           Task<bool> DeleteAsync(int id, CancellationToken ct = default(CancellationToken));
    }


    демонстрируя «уровень». И это университетский преподаватель. Вот таких статей явно не надо, и пользы в них нет, только вред.

    Так что все просто — не понимаешь о чем статья — не переводи и не рекомендуй.
  • Тестируем веб-API ASP.NET Core
    0
    ASP.NET Core — это новый веб-фреймворк, созданный корпорацией Майкрософт в качестве замещающей альтернативы устаревшей технологии, существующей со времен ASP.NET 1.0. Отказавшийся от устаревших зависимостей и разработанный с нуля, фреймворк ASP.NET Core 2.1 спроектирован для кросс-платформенного выполнения и дает разработчику гораздо большую производительность.

    Как там в 2018, с новым .Net Core 2.1?
  • Как продать электронный билет на электричку
    +1
    Позвольте спросить, а что, процедура покупки билетов настолько уникальна, что ни в какой стране мира ее нет? А то я просто ездил в Голландии, пока там жил, покупал в приложении билеты, сканировал QR коды и проблем не видел?

    Может нужно было отправить кого-нибудь перенимать опыт и не городить огород самостоятельно?
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Так-то да, но вот в отличии от приставки или ноута, в комп можно добить еще 2 плашки памяти. Или поменять видеокарту. Грубо говоря, проц-мать-память легко переживает 2-3 поколения видеокарт.
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Именно поэтому я покупаю на следующей неделе 5950x и 3090.

    А мак мини может и куплю родителям, но только потому, что им и планшета бы хватило так-то.
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Нет уверенности в том, что DDR5 будет сразу лучше чем DDR4. Я помню, первые года 3 можно было с трешки на четверку не переходить, ибо прирост был 1-2%.
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    А вы уверены, что эти технологии переносятся от 4 ядер к 16 так, что цена на чип не будет 5к?
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Меня не интересует мобильный рынок практически совсем. Чтобы подорвать АМД или Интел нужно конкурировать на рынке десктопов и серверов.

    И вот вполне вероятно, что тут могут возникнуть проблемы при увеличении числа ядер. Например физические размеры кристаллов при 8-16 ядрах в М1 могут феноменально увеличить процент брака и следовательно стоимость. Или память припаять в 32-64Гб станет проблемой. А разделив М1 на 2 чипа и вынеся память, появятся задержки и производительность упадет.

    Более того, я абсолютно уверен, что текущая цена компов на М1 — это в убыток. После того, как они пересадят людей мы узнаем реальную цену всем этим однокристальным компоновкам на 5нм
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    +1
    Так есть же цайнбенч же, и там в РАЗЫ хуже.
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Интел не сильно парится, пока у него низкая стоимость изготовления. Даже если у АМД доля будет 50%, но себестоимость чипа будет 80% от цены, а у Интела на 14нм будет 20%, итоговая прибыль будет явно не за красными.

    Я уверен, что основная причина не перехода на 7нм и 10 нм были финансовые, нафига делать с огромной себестоимостью, если можно клепать за бесценок на 14нм?
  • Новый Apple M1, AMD Epyc, AMD Ryzen… Если Intel ничего не предпримет, то мы можем увидеть его закат
    0
    Просто хочу заметить, что веры в один тест гикбенч нет. Вполне возможно, что тест как-то подпилен под М1, дабы раскрутить хайпа побольше. Потому что в цайнбенче результаты как-то совсем не такие оптимистичные.

    www.cpu-monkey.com/en/cpu_benchmark-cinebench_r23_multi_core-16

    Например,
    5950x — 28,641 попугаев
    M1 — 7,508 попугаев.
    Intel Core i7-8700 — 7,969 попугаев.

    Т.е. процессор 2017 года на 14нм процессе с 6 ядрами быстрее. Если его выпустить на 5нм, во сколько раз он будет быстрее?
  • МТС выбрала OpenStack и Canonical для своей облачной инфраструктуры нового поколения
    0
    У вас странное представление о телекоме. В МТС в виртуальной инфраструктуре 25 тысяч с плюсом виртуальных серверов. И это без VDI, которых также под 15 тысяч наберется. Я очень сомневаюсь, что много компаний в России обладают сравнимыми опытом разворачивания и управления инфраструктурой такого объема.

    Что касается контейнеров, то они используются в новых проектах, когда плюсы использования перекрывают излишнюю архитектурную сложность решений. Старые проекты (те которые на 25 тыс. серверов) явно переписывать для того чтобы отписать на хабре, какая компания стильная модная и молодежная никто не будет.
  • МТС выбрала OpenStack и Canonical для своей облачной инфраструктуры нового поколения
    +1
    Забыли только написать, что VMware никуда пока не денется.

  • Я пришел на собеседование с лайвкодингом — и меня с позором размазали
    0
    По моему, для этого нужна обратная польская запись. И там вроде бы стэк и все несложно.
    Алгоритм
    Пока есть ещё символы для чтения:
    Читаем очередной символ.
    Если символ является числом или постфиксной функцией (например, ! — факториал), добавляем его к выходной строке.
    Если символ является префиксной функцией (например, sin — синус), помещаем его в стек.
    Если символ является открывающей скобкой, помещаем его в стек.
    Если символ является закрывающей скобкой:
    До тех пор, пока верхним элементом стека не станет открывающая скобка, выталкиваем элементы из стека в выходную строку. При этом открывающая скобка удаляется из стека, но в выходную строку не добавляется. Если стек закончился раньше, чем мы встретили открывающую скобку, это означает, что в выражении либо неверно поставлен разделитель, либо не согласованы скобки.
    Если существуют разные виды скобок, появление непарной скобки также свидетельствует об ошибке. Если какие-то скобки одновременно являются функциями (например, [x] — целая часть), добавляем к выходной строке символ этой функции.
    Если символ является бинарной операцией о1, тогда:
    1) пока на вершине стека префиксная функция…
    … ИЛИ операция на вершине стека приоритетнее o1
    … ИЛИ операция на вершине стека левоассоциативная с приоритетом как у o1
    … выталкиваем верхний элемент стека в выходную строку;
    2) помещаем операцию o1 в стек.
    Когда входная строка закончилась, выталкиваем все символы из стека в выходную строку. В стеке должны были остаться только символы операций; если это не так, значит в выражении не согласованы скобки.


    ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

    П.С. Кстати, вот для этого и нужно университетское образование. Я не помню как именно это делается, но я помню, как это называется и где смотреть.
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    0
    Ну это вам и не 2012 год. Тогда ставки другие были)
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    +1
    Как будто каршеринг не принадлежит Ликсутову?
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    0
    Как я понимаю каску как таковую, вы заплатите за ремонт машины повышением тарифа в следующем году.

    На мой пассат CC новый в 2012 году за 1.6 млн каска стоила под 90, причем со временем ее цена росла. Естественно, я ее не оформлял.
  • Популярная музыка на самом деле деградирует
    0
    Она была никем, и киношка была провинциальным самоделом, очевидно же.


    Провинция Лос-Анджелес называлась.
    Не сказать, что карьера впечатляет, однако знакомых в отрасли хватало.
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    +1
    А им как бы норм. Это же им деньги платят.
  • Популярная музыка на самом деле деградирует
    0
    В 1991 году Бэйд переехала в Лос-Анджелес, штат Калифорния, где она снималась в таких теле- и кинопроектах, как «Закон Лос-Анджелеса», «Мёрфи Браун», «Крутой Уокер: Правосудие по-техасски» и «Застава фехтовальщиков»[5]. С 1994 по 2000 год Бэйд была участником и педагогом в The Groundlings, импровизационной и комедийной труппе и школе в Лос-Анджелесе[11]. Будучи в The Groundlings, Бэрд преподавала и выступала с такими актёрами, как Уилл Феррелл, Кристен Уиг и Мелисса МакКарти, став первым педагогом по импровизации МакКарти[12].

    Бэрд была актрисой озвучивания таких видеоигр, как Mass Effect, Saints Row, EverQuest II, Lightning Returns: Final Fantasy XIII, Rogue Galaxy и Vampire: The Masquerade – Redemption. Некоторые из её известных телевизионных актёрских работ в 2000-х годах: Сандра Хикс в «Костях» в 2009 году, Шэрон Перл в «Секретных материалах» в 2000 году и Андреа Кун в «Клиент всегда мёртв» в 2005 году[13].

    В марте 2009 года Бэрд выпустила свой дебютный студийный альбом «We Sail», кантри-запись из одиннадцати треков[7][14]. Бэрд написала сценарий, участвовала в продюсировании, играла и предоставила саундтрек к фильму «Жизнь наизнанку», который был выпущен в октябре 2013 года. В фильме, который исследует отношения между матерью и сыном через музыку, рассказывается о реальном сыне Бэрд — Финнеасе О’Коннелле.

    Ну прямо НИКОГО не знали в шоу-бизнесе.
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    +1
    Зато время экономит, не нужно фотографировать со всех сторон 2 раза за поездку, и нервы, чтобы не думать а если что забыл/авария.

  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    0
    Все зависит от того, как используется машина. Так-то большинству жителей крупных городов ни каршэринг, ни своя машина не нужна.
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    0
    Думаю он с КАСКО перепутал. Никогда каской не пользовался, к слову.
  • Популярная музыка на самом деле деградирует
    0
    отличается только удачей


    Это удача называется семья из шоу-биза.
  • Популярная музыка на самом деле деградирует
    0
    Мне нравится Адель, Сиа и даже Анастейша именно за голос. Тейлор Свифт нравится в совокупности, за то что она сама пишет и играет. Но это скорее не попса, это уже выше уровень.

    Так-то и Deep Purple раньше попсой называли.
    en.wikipedia.org/wiki/Concerto_for_Group_and_Orchestra
  • Популярная музыка на самом деле деградирует
    0
    Ну есть разные формы. На стадионе, когда вокалист орет, а толпа беснуется — это норм. Дома на нормальной акустике одна палка два струна — это уже не то.

    Я лично считаю, что в записях (не в живую) что-то должно быть. Либо музыка, либо тексты, либо исполнения. Когда ничего этого нет — это просто филлер. Любая попса это филлер между действительно интересными периодами музыки.
  • Популярная музыка на самом деле деградирует
    0
    Да средние века это вообще тонкая вещь. Люди эпоху ренессанса или барокко тоже за средние века считают.

    Я не знаю, что особо использовалось в средние века, но в ренессансе и барокко я думаю это лютня и клавесин.
  • Популярная музыка на самом деле деградирует
    0
    В этой песни голоса вообще 0. О какой подаче материала можно говорить? Это как я, на гитаре месиво из звуков издаю. Так это не авторский стиль, это я играть не умею. А нормальные люди бэнды мутят на ниспадающей фазе.
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    0
    Вы от темы отдалились, вы сколько раз в суде были и когда?
  • «Однорукий интерфейс»: баг или фича, позволяющая Делимобилю отнимать деньги у пользователей?
    +2
    Вы точно в России живете?

    Владельцу вообще чихать на все, пока деньги капают. Суды работают по указке свыше, каршеринги аффилированны с правительством Москвы. Возможно, на второй апелляции вас суд начнёт слушать. А возможно и нет. Но вы потеряете на этом дней 5-6 рабочих, что при наших зарпалатах уже в 50 тыс выльется. Плюс затраты на юриста.

    Наша система без оплаты ущерба и смешными выплатами на адвокатов проигравшей стороной в принципе делает суд убыточной процедурой. Только если на принцип пойти.
  • Популярная музыка на самом деле деградирует
    0
    Хмм, это даже до музыки из третьих героев не дотягивает.

    www.youtube.com/watch?v=pHaLZBxJMdc