Кроме того, если например в Вашей компании используется свой NuGet-репозиторий, например Nexus или MyGet, можно опубликовать эти шаблоны как NuGet-пакеты, и тогда их можно будет установить и использовать через CLI-команды dotnet new (наряду со встроенными стандартными шаблонами).
Отсутствие подключения к интернету, конечно, сильно снижает риск, но гарантии всё-таки не даёт, особенно если Вас атакуют целенаправленно. Забыли закрыть usb-порт всего на одном компьютере внутри сети - и уже можно загрузить вирус с флэши.
Как-то слышал историю про то, как данные слили на флэшку, которую встроили внутрь usb-мышки (внутри поместили usb-хаб, к которому была подключена и мышь, и флэшка).
Ну и вспомним stuxnet, насколько я помню, так тоже был airgap, который не помешал загрузить вирус, поломавший центрифуги.
У нас на работе делали пару шаблонов для веб-апи asp net core проектов, публикуются как нугет-пакеты, и при локальной установке становятся доступными в списке шаблонов dotnet new. Поддерживают кастомные переменные-опции. Основная настройка шаблона, переменные и их типы (и возможные значения) описываются в файле .template.config/template.json
Вот аналогично, всегда отключаю у себя группировку окон. Если это невозможно сделать в новой версии ОС, это, наверно, самый сильный для меня аргумент подождать с переходом.
Я вот даже поспорил бы с тем, что 100% - это хорошо. На любом крупном проекте (от 100 тыс. строк кода, если взять порог, указанный в одной из книг "дяди Боба") будет такой код, который покрывать тестами нерационально. Например, инфраструктурный/конфигурационный код, или код, который отвечает за интеграцию со сторонней системой (адаптер). Конечно, такие места должны содержать минимум логики, но стремление к 100% покрытию может привести к тестам ради тестов, ценность которых == 0, которые были написаны только для галочки. Отмечу, что эти тесты разработчик пишет в рабочее время, и за это время заплатил бизнес.
Также часто встречается ситуация, когда требования до конца не ясны, но функциональность нужно реализовать уже сейчас. Писать тесты на то, что почти гарантированно будет меняться в ближайшем будущем - тоже нерационально.
Поэтому считаю целевой уровень 70-80% оптимальным, это задаёт высокую планку: почти весь код с бизнес-логикой, скорее всего, будет покрыт тестами, но будет запас для того, чтобы не упарываться с "тестами ради тестов".
За популярные веб-ресурсы не буду говорить, но среди корпоративных решений такие встречаются нередко. И когда на фронтенде большое количество различных сложных компонентов: виджетов, графиков, табличек, админок и прочее, фреймворк, который ограничивает творческую свободу разработчиков, - это несомненное благо. И хотя я бэкендер, но будучи немного знаком со структурой нашего проекта на фронте, не могу себе представить, насколько сложнее стала бы разработка без ангуляра, и тем более без фреймворка вообще. Сейчас же новый человек может достаточно быстро погрузиться в проект и начать фигачить таски.
Позвольте полюбопытствовать, какие новостные сайты для себя избрали? Сам иногда захожу на медузу, но подача материала там иногда огорчает, да и иногда замечаю некоторый непрофессионализм (имхо) в статьях.
Правильно, вершина эволюции - это кошки, которые сумели распространиться по всей планете, подчинив себе людей =)
А если серьёзно, то да, процессы изменения фенотипа и генотипа людей еще идут, и куда это выведет в будущем, неизвестно. С одной стороны, достижения медицины дают возможность передавать свои гены потомкам тем людям, которые в недавнем прошлом не дожили бы до репродуктивного возраста - поэтому доля людей с врожденными заболеваниями, возможно, увеличится. С другой стороны, скоро мы наверняка увидим примеры редактирования генома, в том числе для избавления от генетических заболеваний.
Справедливости ради, по ссылке статистика по численности людей, у которых это родной язык. Если же говорить об изучении языков, нашел такую инфографику, где говорится о полутора миллиардах изучающих английский.
Тоже обратил на это внимание. По-хорошему там должна быть транзакция, в рамках которой происходит поиск по idempotencyKey и в случае отсутствия, вставка записи с этим идентификатором (естественно, также должен быть unique constraint в БД). В этом случае гонка уже не страшна, поскольку проверка и добавления записи с idempotencyKey атомарно.
Я вот обратил внимание на некоторую нестыковку - если инвестор не дурак, он понимает что MVP может содержать ошибки, костыли и отсутствие валидации. Поэтому, возможно, это была попытка со стороны CEO продать не MVP, а "уже почти готовый продукт". В этом случае можно порадоваться за программистов - если бы продать удалось, им бы пришлось в еще более жестоком темпе вкалывать еще полгода, допиливая все косяки и недоработки - в то время как заказчик оплатил деньги за продукт и ожидает, что он уже готов к эксплуатации.
Fluent-паттерн действительно очень красивый. Его удобно использовать для конфигурации: как в ASP.NET Core или паттерн test builder. Также очень удобно составлять запросы в LINQ, например используя IQueryable.
Но нужно обратить внимание, что в том же LINQ запрос не выполнится, пока не будет вызван например ToListAsync - который и отдаст Task. В приведенном примере, если переделать метод BuilderFtpService.Download на асинхронную модель, нужно будет реализовывать дополнительно интерфейс вроде IDownloadableBuilderFtpService, который позволит сконфигурировать скачивание и дельнейшее сохранение - но позволит запустить эту задачу только при вызове последнего метода, который уже отдаст Task в запущенном состоянии.
Почему же, если не вакцинироваться, шансы на самоустранение из соревнований несколько возрастают.
Не совсем так, если использовать шаблоны для dotnet core, можно использовать не только условия, но и например генераторы guid или случайных значений, опционально включать/исключать файл целиком, определять опции командной строки из ограниченного перечня, или например приводить строки к верхнему/нижнему регистру
В прошлой статье оставил несколько ссылок, может быть полезно:
https://habr.com/en/post/573930/#comment_23396710
Кроме того, если например в Вашей компании используется свой NuGet-репозиторий, например Nexus или MyGet, можно опубликовать эти шаблоны как NuGet-пакеты, и тогда их можно будет установить и использовать через CLI-команды
dotnet new
(наряду со встроенными стандартными шаблонами).Отсутствие подключения к интернету, конечно, сильно снижает риск, но гарантии всё-таки не даёт, особенно если Вас атакуют целенаправленно. Забыли закрыть usb-порт всего на одном компьютере внутри сети - и уже можно загрузить вирус с флэши.
Как-то слышал историю про то, как данные слили на флэшку, которую встроили внутрь usb-мышки (внутри поместили usb-хаб, к которому была подключена и мышь, и флэшка).
Ну и вспомним stuxnet, насколько я помню, так тоже был airgap, который не помешал загрузить вирус, поломавший центрифуги.
У нас на работе делали пару шаблонов для веб-апи asp net core проектов, публикуются как нугет-пакеты, и при локальной установке становятся доступными в списке шаблонов dotnet new. Поддерживают кастомные переменные-опции. Основная настройка шаблона, переменные и их типы (и возможные значения) описываются в файле .template.config/template.json
Документация,
статья в devblogs,
полезные примеры на гитхабе,
исходники .NET Core Template Engine
некоторые тонкости про шаблоны
Вот аналогично, всегда отключаю у себя группировку окон. Если это невозможно сделать в новой версии ОС, это, наверно, самый сильный для меня аргумент подождать с переходом.
Нет, на что-то очень нужное (например, реальные деньги) его готовы менять простые пользователи, в надежде продать его по более высокой цене.
Согласен, протупил когда читал Ваш коммент)
Я вот даже поспорил бы с тем, что 100% - это хорошо. На любом крупном проекте (от 100 тыс. строк кода, если взять порог, указанный в одной из книг "дяди Боба") будет такой код, который покрывать тестами нерационально. Например, инфраструктурный/конфигурационный код, или код, который отвечает за интеграцию со сторонней системой (адаптер). Конечно, такие места должны содержать минимум логики, но стремление к 100% покрытию может привести к тестам ради тестов, ценность которых == 0, которые были написаны только для галочки. Отмечу, что эти тесты разработчик пишет в рабочее время, и за это время заплатил бизнес.
Также часто встречается ситуация, когда требования до конца не ясны, но функциональность нужно реализовать уже сейчас. Писать тесты на то, что почти гарантированно будет меняться в ближайшем будущем - тоже нерационально.
Поэтому считаю целевой уровень 70-80% оптимальным, это задаёт высокую планку: почти весь код с бизнес-логикой, скорее всего, будет покрыт тестами, но будет запас для того, чтобы не упарываться с "тестами ради тестов".
В общем случае задача не имеет решения, вспоминается Задача двух генералов
Инициализация полей - это синтаксический сахар над присвоением этих значений в конструкторе. Убедитесь в этом сами, для C# кода:
Будет IL код:
IL код
Как видно из IL-кода, создание массива происходит именно в конструкторе.
Вы можете убедиться сами на https://sharplab.io
За популярные веб-ресурсы не буду говорить, но среди корпоративных решений такие встречаются нередко. И когда на фронтенде большое количество различных сложных компонентов: виджетов, графиков, табличек, админок и прочее, фреймворк, который ограничивает творческую свободу разработчиков, - это несомненное благо. И хотя я бэкендер, но будучи немного знаком со структурой нашего проекта на фронте, не могу себе представить, насколько сложнее стала бы разработка без ангуляра, и тем более без фреймворка вообще. Сейчас же новый человек может достаточно быстро погрузиться в проект и начать фигачить таски.
Позвольте полюбопытствовать, какие новостные сайты для себя избрали? Сам иногда захожу на медузу, но подача материала там иногда огорчает, да и иногда замечаю некоторый непрофессионализм (имхо) в статьях.
Ничего себе! Был в этом городе несколько раз, но не знал об этом.
А что там было?
Правильно, вершина эволюции - это кошки, которые сумели распространиться по всей планете, подчинив себе людей =)
А если серьёзно, то да, процессы изменения фенотипа и генотипа людей еще идут, и куда это выведет в будущем, неизвестно. С одной стороны, достижения медицины дают возможность передавать свои гены потомкам тем людям, которые в недавнем прошлом не дожили бы до репродуктивного возраста - поэтому доля людей с врожденными заболеваниями, возможно, увеличится. С другой стороны, скоро мы наверняка увидим примеры редактирования генома, в том числе для избавления от генетических заболеваний.
Если уж быть точным, то в Вашем примере идёт не сорок третья, а сорок четвёртая секунда.
Справедливости ради, по ссылке статистика по численности людей, у которых это родной язык. Если же говорить об изучении языков, нашел такую инфографику, где говорится о полутора миллиардах изучающих английский.
Тоже обратил на это внимание. По-хорошему там должна быть транзакция, в рамках которой происходит поиск по
idempotencyKey
и в случае отсутствия, вставка записи с этим идентификатором (естественно, также должен быть unique constraint в БД). В этом случае гонка уже не страшна, поскольку проверка и добавления записи сidempotencyKey
атомарно.Я вот обратил внимание на некоторую нестыковку - если инвестор не дурак, он понимает что MVP может содержать ошибки, костыли и отсутствие валидации. Поэтому, возможно, это была попытка со стороны CEO продать не MVP, а "уже почти готовый продукт". В этом случае можно порадоваться за программистов - если бы продать удалось, им бы пришлось в еще более жестоком темпе вкалывать еще полгода, допиливая все косяки и недоработки - в то время как заказчик оплатил деньги за продукт и ожидает, что он уже готов к эксплуатации.
Fluent-паттерн действительно очень красивый. Его удобно использовать для конфигурации: как в ASP.NET Core или паттерн test builder. Также очень удобно составлять запросы в LINQ, например используя IQueryable.
Но нужно обратить внимание, что в том же LINQ запрос не выполнится, пока не будет вызван например ToListAsync - который и отдаст Task. В приведенном примере, если переделать метод
BuilderFtpService.Download
на асинхронную модель, нужно будет реализовывать дополнительно интерфейс вродеIDownloadableBuilderFtpService
, который позволит сконфигурировать скачивание и дельнейшее сохранение - но позволит запустить эту задачу только при вызове последнего метода, который уже отдаст Task в запущенном состоянии.