todayilearned's People
Forkers
martmartiustodayilearned's Issues
DDD architecture
- Что такое DDD?
CQRS
- Что такое CQRS?
Exam 70-483 (Programming in C#)
Payment Request API (Html 5)
The Payment Request API is a W3C standard candidate that is meant to eliminate checkout forms. It vastly improves user workflow during the purchase process, providing a more consistent user experience and enabling web merchants to easily leverage different payment methods.
Links:
Introducing Web Payments: Easier Online Purchases With The Payment Request API
Http protocols
- Научиться различать GET и POST
- Зачем нужны все остальные http методы (PUT, DELETE, OPTIONS etc)
- http кеширование и как его настраивать
- коды ответов( 200, 300, 400, 500)
12 factor app
Приложение двенадцати факторов — это методология для создания SaaS-приложений, которые:
- Используют декларативный формат для описания процесса установки и настройки, что сводит к минимуму затраты времени и ресурсов для новых разработчиков, подключённых к проекту;
- Имеют соглашение с операционной системой, предполагающее максимальную переносимость между средами выполнения;
- Подходят для развёртывания на современных облачных платформах, устраняя необходимость в серверах и системном администрировании;
- Сводят к минимуму расхождения между средой разработки и средой выполнения, что позволяет использовать непрерывное развёртывание (continuous deployment) для максимальной гибкости;
- И могут масштабироваться без существенных изменений в инструментах, архитектуре и практике разработки.
PagerDuty Security Training
The public material for PagerDuty's employee security training courses.
Website: https://sudo.pagerduty.com/
Github: https://github.com/PagerDuty/security-training
Open Web Application Security Project (OWASP)
- Безопасность в WEB/.NET
- Тестирование безопасности
- Top 10 Application Security Risks - 2017
Проверка входных параметров
Есть мнение, что входные параметры методов/функций не нужно проверять в собственном коде, в отличии от public API.
public int GetLength(string text)
{
if (text == null)
throw new WtfException("text is null!!!");
return text.Length;
}
Это, что называется плохой, пример плохого использования. Эта проверка не добавляет никакой новой информации по сравнению с системным NullReferenceException
, с чем сложно поспорить, да и код ведь все равно упадет. Но мне хотелось бы, чтобы код в случае невалидных данных не просто упал, а упал максимально быстро. Иначе жизнь разработчика превращается в тот еще цирк с понями с очень вдумчивым вкуриванием логов и раскручиванием callstack`а с феерическими попытками понять как все было.
На ум приходят несколько ситуаций, когда исключение может бахнуть не в том месте и не в то время, где и когда его не ждешь:
-
Передача параметров в конструктор. Как по мне, так самый очевидный случай.
Для этого создаем новый экземпляр класса с помощью конструктора, в который передаем параметры, некоторое даже валидные. Далее спустя некоторые операции и n-ное количество строк кода вызываем метод, который использует несколько невалидных аргументов. Важно то, что метод вполне может себе быть вызван не что чтобы не в том же методе, в котором экземпляр и создавался, а и в другой части приложения. Ага, эти ваши IoC контейнеры и не такое позволяют. -
Отложенные вычисления/выполнения.
Разлученный при создании брат-близнец предыдущего товарища.
Linq в целом, а также IEnumerable интерфейс в частности, это не только благо, но и возможность бахнуть в ногу не только себе, но и поломать головы своим товарищам, который сей код читать будут. К примеру, в какой момент пойдет все не так таком методе?
public IEnumerable<char> GetChars(string input)
{
foreach (var c in input)
{
yield return c;
}
}
Как минимум при попытке вкинуть null
. А вот о том, когда ловить исключение, нужно поговорить чуть подробнее.
Если мы попытаемся ответить на вопрос, в какой момент вызов GetChars(null)
даст исключение, то ответом, скорее всего, будет it depends. То бишь, в зависимости от способа вызова у нас есть следующие варианты:
Кандидат 1
var chars = GetChars(null);
foreach (var item in chars)
{
Console.Write(item);
}
исключение бросится в foreach
, а
Кандидат 2
var chars = GetChars(null).ToArray();
foreach (var item in chars)
{
Console.Write(item);
}
бахнет в первой же строке.
Причина в том, что IEnumerable реализует отложенное вычисление, то есть реальная работа будет выполнена только в момент перебора перечисления.
Ладно, тогда нужно переписать метод так, чтобы проверка входных аргументов выполнялась в момент вызова метода. Ведь что может быть проще:
public IEnumerable<char> GetChars(string input)
{
if (input == null)
throw new ArgumentNullException(nameof(input));
foreach (var c in input)
{
yield return c;
}
}
Хм, если пытаться запустить новый вариант метода, то становиться ясно, что он работает без изменений, бросая исключение снова только в момент перебора IEnumerable. На самом деле, чтобы он работал так как мы хотим, метод нужно усложнить:
public IEnumerable<char> GetChars(string input)
{
if (input == null)
throw new ArgumentNullException(nameof(input));
return GetCharsCore(input);
}
private IEnumerable<char> GetCharsCore(string input)
{
foreach (var c in input)
{
yield return c;
}
}
И вся эта жесть нужна для того, чтобы проверка на null
выполнялась в момент вызова метода, при этом оставляя возможность для отложенного выполнения функции.
Ладно, с очевидными ошибками разобрались. Очевидные они потому, как если мы попытаемся передать в метод какую-то дрянь, получим исключение. В некоторых случаях раньше, в некоторых немного позже. Но исключение-то будет, как и запись в логах о нем, что можно с некоторой степенью легкости отследить и найти концы.
Осталось упомянуть о другом категории, когда ошибок вроде бы и нет, а пользователи жалуются.
Queue (RabbitMQ)
- Что такое очереди и зачем оны нужны
- Разобратся с очередями на примере RabbitMQ
Функциональное програмирование - F#
- Что такое Функциональное програмирование
- Плюсы и минусы по сравнению с ООП
Property-Based Testing
- What is Property-Based Testing?
.net core 2.0
Цели:
- Разобраться со структурой проекта
- Components, Razor pages, tag helpers, web api.
big endian vs little endian
Big-Endian (BE) / Little-Endian (LE) - это два способа представления многобайтных слов. К примеру, при использовании 2-х байт для представления символа в UTF-16 существует два способа представления символа 0x1234 в виде набора байтов:
Byte Index: 0 1
---------------------
Big-Endian: 12 34
Little-Endian: 34 12
Actor Model design pattern
- Что такое Actor Model
- Actor Model на примере Orleans
Git and Github
Цели:
- Что такое Git
- Как им пользоваться
Micro services architecture
- Что такое микросервисная архитектура?
AMP
Investigate possibility of implementation accelerated mobile pages (a.k.a AMP) for the current web app.
The start point is docs.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.