День 1851. #Шпаргалка
Примеры Кода для Повседневных Задач
В этой серии представлю вам коллекцию фрагментов кода C#, охватывающих широкий спектр сценариев, с которыми вы можете столкнуться при разработке ПО.
III. Операции с файлами
Операции с файлами являются общим требованием во многих задачах. В этом разделе мы рассмотрим, как работать с файлами и каталогами в C#, используя пространство имён
1. Чтение текстового файла
Чтобы прочитать текстовый файл в C#, вы можете использовать класс File и его метод ReadAllText():
2. Запись текстового файла
Чтобы записать текстовый файл, можно использовать метод WriteAllText() класса File:
3. Дозапись текста в файл
Чтобы добавить текст в текущий файл, можно использовать метод AppendAllText():
4. Чтение файла построчно
Для чтения файла построчно подойдёт метод ReadLines():
5. Создание/удаление папки
Для создания/удаления папки используйте соответственно методы CreateDirectory() и Delete() класса Directory:
Второй параметр метода Delete указывает, надо ли удалять всё содержимое папки.
6. Проверка существования
Чтобы проверить существование файла или папки, используйте метод Exists() класса File или Directory соответственно:
7. Список файлов в папке
Используйте метод GetFiles() класса Directory:
8. Копия/перемещение файла
Используйте соответственно методы Copy() или Move() класса File:
Источник: https://medium.com/bytehide/100-csharp-code-snippets-for-everyday-problems-e913c786dec9
Примеры Кода для Повседневных Задач
В этой серии представлю вам коллекцию фрагментов кода C#, охватывающих широкий спектр сценариев, с которыми вы можете столкнуться при разработке ПО.
III. Операции с файлами
Операции с файлами являются общим требованием во многих задачах. В этом разделе мы рассмотрим, как работать с файлами и каталогами в C#, используя пространство имён
System.IO.1. Чтение текстового файла
Чтобы прочитать текстовый файл в C#, вы можете использовать класс File и его метод ReadAllText():
var path = "example.txt";
var content = File.ReadAllText(path);
Console.WriteLine(content);
2. Запись текстового файла
Чтобы записать текстовый файл, можно использовать метод WriteAllText() класса File:
var path = "output.txt";
var content = "Hello, World!";
File.WriteAllText(path, content);
3. Дозапись текста в файл
Чтобы добавить текст в текущий файл, можно использовать метод AppendAllText():
var path = "log.txt";
var logEntry = "New log entry";
File.AppendAllText(path, logEntry);
4. Чтение файла построчно
Для чтения файла построчно подойдёт метод ReadLines():
var path = "example.txt";
foreach (var line in File.ReadLines(path))
Console.WriteLine(line);
5. Создание/удаление папки
Для создания/удаления папки используйте соответственно методы CreateDirectory() и Delete() класса Directory:
var path = "new_directory";
Directory.CreateDirectory(path);
Directory.Delete(path, true);
Второй параметр метода Delete указывает, надо ли удалять всё содержимое папки.
6. Проверка существования
Чтобы проверить существование файла или папки, используйте метод Exists() класса File или Directory соответственно:
var fPath = "example.txt";
var dPath = "directory";
var fileExists = File.Exists(fPath);
var dirExists = Directory.Exists(dPath);
7. Список файлов в папке
Используйте метод GetFiles() класса Directory:
var path = " directory";
var files = Directory.GetFiles(path);
foreach (var f in files)
Console.WriteLine(f);
8. Копия/перемещение файла
Используйте соответственно методы Copy() или Move() класса File:
var source = "example.txt";
var copy = "copy_example.txt";
var moved = "moved_example.txt";
File.Copy(source, copy);
File.Move(source, moved);
Источник: https://medium.com/bytehide/100-csharp-code-snippets-for-everyday-problems-e913c786dec9
👍17👎1
День 1855. #Шпаргалка
Шпаргалка по LINQ
См. подробнее
- Книга «LINQ Explained with sketches»
- Новые методы LINQ в .NET 9
См. также
- LINQ на Стероидах с SIMD
- Parallel LINQ
- Использование LINQ с асинхронными потоками
Источник: https://steven-giesel.com/blogPost/62049533-001a-46fb-a1da-88effc0183f1/linq-mindmap-net-9-edition
Шпаргалка по LINQ
См. подробнее
- Книга «LINQ Explained with sketches»
- Новые методы LINQ в .NET 9
См. также
- LINQ на Стероидах с SIMD
- Parallel LINQ
- Использование LINQ с асинхронными потоками
Источник: https://steven-giesel.com/blogPost/62049533-001a-46fb-a1da-88effc0183f1/linq-mindmap-net-9-edition
👍28👎1
День 1858. #Шпаргалка
Примеры Кода для Повседневных Задач
В этой серии представлю вам коллекцию фрагментов кода C#, охватывающих широкий спектр сценариев, с которыми вы можете столкнуться при разработке ПО.
IV. Потоки
Многопоточная обработка — важный аспект параллельного программирования на C#. Рассмотрим, как работать с потоками, используя пространство имен System.Threading.
1. Создание нового потока
Чтобы создать новый поток в C#, вы можете использовать класс Thread:
2. Операции над потоком
- Запуск
- Слияние (ожидание завершения потока)
- Приостановка (текущий поток)
См. подробнее о потоках
3. Использование пула потоков
Для работы с пулом потоков используется класс ThreadPool:
См. подробнее о пуле потоков
V. Задачи
1. Создание новой задачи
Для создания и запуска задачи используется класс Task:
См. подробнее о задачах
2. Ожидание задачи
3. Отмена задачи
Для отмены задачи в C# используется класс CancellationTokenSource, создающий токен отмены. А для собственно отмены – метод токена Cancel():
См. подробнее «Скоординированная отмена»
Источник: https://medium.com/bytehide/100-csharp-code-snippets-for-everyday-problems-e913c786dec9
Примеры Кода для Повседневных Задач
В этой серии представлю вам коллекцию фрагментов кода C#, охватывающих широкий спектр сценариев, с которыми вы можете столкнуться при разработке ПО.
IV. Потоки
Многопоточная обработка — важный аспект параллельного программирования на C#. Рассмотрим, как работать с потоками, используя пространство имен System.Threading.
1. Создание нового потока
Чтобы создать новый поток в C#, вы можете использовать класс Thread:
using System.Threading;
void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
Console.WriteLine(i);
}
var thread = new Thread(PrintNumbers);
2. Операции над потоком
- Запуск
thread.Start();
- Слияние (ожидание завершения потока)
thread.Join();
- Приостановка (текущий поток)
Thread.Sleep(1000); // пауза на 1 секунду
См. подробнее о потоках
3. Использование пула потоков
Для работы с пулом потоков используется класс ThreadPool:
using System.Threading;
ThreadPool.QueueUserWorkItem(PrintNumbers);
См. подробнее о пуле потоков
V. Задачи
1. Создание новой задачи
Для создания и запуска задачи используется класс Task:
using System.Threading.Tasks;
Task.Run(PrintNumbers);
См. подробнее о задачах
2. Ожидание задачи
var task = Task.Run(PrintNumbers);
task.Wait();
3. Отмена задачи
Для отмены задачи в C# используется класс CancellationTokenSource, создающий токен отмены. А для собственно отмены – метод токена Cancel():
using System.Threading;
using System.Threading.Tasks;
var cts = new CancellationTokenSource();
Task.Run(() => PrintNumbers(), cts.Token);
cts.Cancel();
См. подробнее «Скоординированная отмена»
Источник: https://medium.com/bytehide/100-csharp-code-snippets-for-everyday-problems-e913c786dec9
👍14
День 1868. #Шпаргалка #Git
Популярные Настройки Git Config. Начало
Джулия Эванс спросила у коллег-программистов мнения о самых популярных и полезных настройках Git, которые они используют. Вот такой список получился.
Описание всех настроек можно найти в документации Git.
1. pull.ff only или pull.rebase true
Эти две были самыми популярными. Обе они преследуют схожие цели: избежать случайного создания коммита слияния при запуске
- pull.rebase true эквивалентен запуску
- pull.ff only эквивалентен запуску
Скорее всего, нет смысла устанавливать обе одновременно, поскольку
2. merge.conflictstyle zdiff3
Делаем конфликты слияний более читабельными!
По умолчанию в git конфликты слияния выглядят так:
Вам предлагается решить, что лучше:
Вот как выглядит тот же конфликт слияния с merge.conflictstyle diff3:
Здесь содержится дополнительная информация: теперь исходная версия кода находится посередине! Итак, мы видим:
- одна сторона изменила
- другая сторона переименовала
Поэтому, по-видимому, правильным решением конфликта слияния является
zdiff3 — это тот же diff3, но он лучше выносит любые общие строки в начале или конце за пределы зоны конфликта. То есть, если обе стороны сделали изменения, которые имеют общие строки в начале или в конце, то они будут корректно слиты и не будут входить в зону конфликта.
3. rebase.autosquash true
Цель autosquash — упростить модификацию старых коммитов. Допустим, у вас есть коммит с исправлением другого коммита (3 коммита назад), который вы хотели бы объединить с ним. Вы фиксируете новый коммит с помощью
Теперь, когда вы запускаете
rebase.autosquash true означает, что
4. rebase.autostash true
Это автоматически запускает
Продолжение следует…
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
Популярные Настройки Git Config. Начало
Джулия Эванс спросила у коллег-программистов мнения о самых популярных и полезных настройках Git, которые они используют. Вот такой список получился.
Описание всех настроек можно найти в документации Git.
1. pull.ff only или pull.rebase true
Эти две были самыми популярными. Обе они преследуют схожие цели: избежать случайного создания коммита слияния при запуске
git pull на ветке, где восходящая ветвь расходится.- pull.rebase true эквивалентен запуску
git pull --rebase каждый раз,- pull.ff only эквивалентен запуску
git pull --ff-only каждый раз.Скорее всего, нет смысла устанавливать обе одновременно, поскольку
--ff-only переопределяет --rebase.2. merge.conflictstyle zdiff3
Делаем конфликты слияний более читабельными!
По умолчанию в git конфликты слияния выглядят так:
<<<<<<< HEAD
def parse(input):
return input.split("\n")
=======
def parse(text):
return text.split("\n\n")
>>>>>>> somebranch
Вам предлагается решить, что лучше:
input.split("\n") или text.split("\n\n"). Но как? Что делать, если вы не помните, нужно \n или \n\n?Вот как выглядит тот же конфликт слияния с merge.conflictstyle diff3:
<<<<<<< HEAD
def parse(input):
return input.split("\n")
||||||| base
def parse(input):
return input.split("\n\n")
=======
def parse(text):
return text.split("\n\n")
>>>>>>> somebranch
Здесь содержится дополнительная информация: теперь исходная версия кода находится посередине! Итак, мы видим:
- одна сторона изменила
\n\n на \n,- другая сторона переименовала
input в text.Поэтому, по-видимому, правильным решением конфликта слияния является
return text.split("\n"), поскольку он объединяет изменения с обеих сторон.zdiff3 — это тот же diff3, но он лучше выносит любые общие строки в начале или конце за пределы зоны конфликта. То есть, если обе стороны сделали изменения, которые имеют общие строки в начале или в конце, то они будут корректно слиты и не будут входить в зону конфликта.
3. rebase.autosquash true
Цель autosquash — упростить модификацию старых коммитов. Допустим, у вас есть коммит с исправлением другого коммита (3 коммита назад), который вы хотели бы объединить с ним. Вы фиксируете новый коммит с помощью
git commit --fixup OLD_COMMIT_ID, что даёт новому коммиту сообщение «fixup! …».Теперь, когда вы запускаете
git rebase --autosquash main, он автоматически объединяет все коммиты-исправления (fixup!) со своими целями.rebase.autosquash true означает, что
--autosquash всегда автоматически передаётся в git rebase.4. rebase.autostash true
Это автоматически запускает
git stash перед git rebase и git stash pop после. По сути, он передаёт --autostash в git rebase. Это означает, что вы можете запустить rebase на «грязном» рабочем дереве. Однако будьте осторожны: применение изменений из stash после успешного перебазирования может привести к нетривиальным конфликтам. Хотя, похоже, это не очень часто встречается у людей, поскольку этот вариант конфигурации кажется действительно популярным.Продолжение следует…
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
👍13
День 1869. #Шпаргалка #Git
Популярные Настройки Git Config. Продолжение
Начало
5. push.default simple и push.default current
Параметры push.default сообщают git push автоматически отправлять текущую ветку в удалённую ветку с тем же именем.
-
-
current кажется хорошей настройкой, если вы уверены, что никогда случайно не создадите локальную ветку с тем же именем, что и несвязанная удалённая ветка. У многих людей есть соглашения об именах веток (например,
6. init.defaultBranch main
Создавать ветку main вместо ветки master при создании нового репозитория.
7. commit.verbose true
Добавит все различия коммита в текстовый редактор, где вы пишете сообщение о коммите, чтобы помочь вам запомнить, что вы делали.
8. rerere.enabled true
Позволяет использовать функцию rerere (reuse recovered resolution - повторно использовать восстановленное разрешение), которая запоминает, как вы разрешали конфликты слияния во время git rebase, и автоматически разрешает конфликты за вас, когда это возможно.
9. help.autocorrect 10
Если git обнаружит опечатки и сможет определить ровно одну действительную команду, аналогичную ошибке, он попытается предложить правильную команду или даже автоматически запустить предложение. Возможные значения:
-
-
-
-
-
10. core.pager delta
«Пейджер» — это то, что git использует для отображения результатов git diff, git log, git show и т. д.
delta – это модный инструмент для просмотра различий с подсветкой синтаксиса.
11. diff.algorithm histogram
Алгоритм сравнения Git по умолчанию часто плохо справляется с переупорядочением функций. Например:
Это сильно путает. Но с diff.algorithm histogram всё становится гораздо понятнее:
Ещё один популярный вариант - patience.
12. core.excludesFile – глобальный .gitignore
Окончание следует…
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
Популярные Настройки Git Config. Продолжение
Начало
5. push.default simple и push.default current
Параметры push.default сообщают git push автоматически отправлять текущую ветку в удалённую ветку с тем же именем.
-
push.default simple — значение по умолчанию в Git. Это работает только в том случае, если ваша ветка уже отслеживает удалённую ветку.-
push.default current - аналогична, но она всегда передаёт локальную ветку в удалённую ветку с тем же именем.current кажется хорошей настройкой, если вы уверены, что никогда случайно не создадите локальную ветку с тем же именем, что и несвязанная удалённая ветка. У многих людей есть соглашения об именах веток (например,
julia/my-change), которые делают конфликты такого рода маловероятными, либо у них просто мало сотрудников, поэтому конфликтов имён ветвей, вероятно, не происходит.6. init.defaultBranch main
Создавать ветку main вместо ветки master при создании нового репозитория.
7. commit.verbose true
Добавит все различия коммита в текстовый редактор, где вы пишете сообщение о коммите, чтобы помочь вам запомнить, что вы делали.
8. rerere.enabled true
Позволяет использовать функцию rerere (reuse recovered resolution - повторно использовать восстановленное разрешение), которая запоминает, как вы разрешали конфликты слияния во время git rebase, и автоматически разрешает конфликты за вас, когда это возможно.
9. help.autocorrect 10
Если git обнаружит опечатки и сможет определить ровно одну действительную команду, аналогичную ошибке, он попытается предложить правильную команду или даже автоматически запустить предложение. Возможные значения:
-
0 (по умолчанию) - показать предложенную команду.-
положительное число - запустить предложенную команду через указанные децисекунды (0,1 секунды).-
"immediate" - немедленно запустить предложенную команду.-
"prompt" - показать предложение и запросить подтверждение для запуска команды.-
"never" - не запускать и не показывать предлагаемые команды.10. core.pager delta
«Пейджер» — это то, что git использует для отображения результатов git diff, git log, git show и т. д.
delta – это модный инструмент для просмотра различий с подсветкой синтаксиса.
11. diff.algorithm histogram
Алгоритм сравнения Git по умолчанию часто плохо справляется с переупорядочением функций. Например:
-.header {
+.footer {
margin: 0;
}
-.footer {
+.header {
margin: 0;
+ color: green;
}Это сильно путает. Но с diff.algorithm histogram всё становится гораздо понятнее:
-.header {
- margin: 0;
-}
-
.footer {
margin: 0;
}
+.header {
+ margin: 0;
+ color: green;
+}Ещё один популярный вариант - patience.
12. core.excludesFile – глобальный .gitignore
core.excludesFile = ~/.gitignore позволяет установить глобальный файл gitignore, который применяется ко всем репозиториям, для таких вещей, как .idea или .vs, которые вы никогда не хотите коммитить в какой-либо репозиторий. По умолчанию это ~/.config/git/ignore.Окончание следует…
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
👍12
День 1870. #Шпаргалка #Git
Популярные Настройки Git Config. Окончание
Начало
Продолжение
13. includeIf: отдельные конфигурации git для личного и рабочего
Многие используют это для настройки разных email для личных и рабочих репозиториев. Вы можете настроить это примерно так:
14. url."git@github.com:".insteadOf 'https://github.com/'
Если вы часто случайно клонируете HTTP-версию репозитория вместо SSH-версии, а затем приходится вручную заходить в ~/.git/config и редактировать удалённый URL, это заменит https://github.com в удалённых репозиториях на git@github.com:
Кто-то вместо этого использует pushInsteadOf для замены только в git push, потому что не хочет разблокировать свой SSH-ключ при извлечении из общедоступного репозитория.
15. fsckobjects
Проверяет получаемые/отправляемые объекты. Если будет обнаружено повреждение или ссылка на несуществующий объект, операция прервётся:
16. Остальное
-
Позволяет указать файл с коммитами, который следует игнорировать во время git blame, чтобы гигантские переименования не мешал.
-
Заставит git branch сортировать ветки по последнему использованию, а не по алфавиту, чтобы упростить поиск ветвей. tag.sort taggerdate аналогично для тегов.
-
Отключает подстветку.
-
В Windows для работы совместно с коллегами на Unix.
-
Использовать emacs (или другой редактор) для сообщений коммита.
-
Использовать difftastic (или другой редактор) для отображения различий.
-
Использовать meld (или другой редактор) для разрешения конфликтов слияния.
-
Автоматически удалит локальные ветки и теги, которых больше нет в удалённом репозитории.
-
Позволит подписывать коммиты ключами SSH.
-
Отобразит даты как 2024-03-14 15:54:51 вместо Thu Mar 14 15:54:51 2024
-
Чтобы избавиться от файлов .orig, которые git создаёт при слиянии конфликтов.
-
Добавит новые теги вместе с добавляемыми коммитами.
-
Не позволит удалять коммиты во время rebase.
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
Популярные Настройки Git Config. Окончание
Начало
Продолжение
13. includeIf: отдельные конфигурации git для личного и рабочего
Многие используют это для настройки разных email для личных и рабочих репозиториев. Вы можете настроить это примерно так:
[includeIf "gitdir:~/code/<work>/"]
path = "~/code/<work>/.gitconfig"
14. url."git@github.com:".insteadOf 'https://github.com/'
Если вы часто случайно клонируете HTTP-версию репозитория вместо SSH-версии, а затем приходится вручную заходить в ~/.git/config и редактировать удалённый URL, это заменит https://github.com в удалённых репозиториях на git@github.com:
[url "git@github.com:"]
insteadOf = https://github.com/
Кто-то вместо этого использует pushInsteadOf для замены только в git push, потому что не хочет разблокировать свой SSH-ключ при извлечении из общедоступного репозитория.
15. fsckobjects
Проверяет получаемые/отправляемые объекты. Если будет обнаружено повреждение или ссылка на несуществующий объект, операция прервётся:
transfer.fsckobjects = true
fetch.fsckobjects = true
receive.fsckObjects = true
16. Остальное
-
blame.ignoreRevsFile .git-blame-ignore-revsПозволяет указать файл с коммитами, который следует игнорировать во время git blame, чтобы гигантские переименования не мешал.
-
branch.sort -committerdateЗаставит git branch сортировать ветки по последнему использованию, а не по алфавиту, чтобы упростить поиск ветвей. tag.sort taggerdate аналогично для тегов.
-
color.ui falseОтключает подстветку.
-
core.autocrlf falseВ Windows для работы совместно с коллегами на Unix.
-
core.editor emacsИспользовать emacs (или другой редактор) для сообщений коммита.
-
diff.tool difftasticИспользовать difftastic (или другой редактор) для отображения различий.
-
merge.tool meldИспользовать meld (или другой редактор) для разрешения конфликтов слияния.
-
fetch.prune true и fetch.prunetagsАвтоматически удалит локальные ветки и теги, которых больше нет в удалённом репозитории.
-
gpg.format sshПозволит подписывать коммиты ключами SSH.
-
log.date isoОтобразит даты как 2024-03-14 15:54:51 вместо Thu Mar 14 15:54:51 2024
-
merge.keepbackup falseЧтобы избавиться от файлов .orig, которые git создаёт при слиянии конфликтов.
-
push.followtags trueДобавит новые теги вместе с добавляемыми коммитами.
-
rebase.missingCommitsCheck errorНе позволит удалять коммиты во время rebase.
Источник: https://jvns.ca/blog/2024/02/16/popular-git-config-options/
👍7
День 1918. #Шпаргалка
Шпаргалка по Форматированию Дат
Структура System.DateTime, доступная только для чтения, определённая в библиотеке базовых классов .NET (BCL), является ключом к обработке дат и времени в C#. Отформатировать дату и время для вывода можно, указав формат в методе ToString("…"). Например:
Выведет:
Ниже приведены краткие пояснения некоторых часто используемых спецификаторов формата:
Символы
Также есть несколько стандартных спецификаторов формата, каждый из которых представлен одной буквой
* - зависит от культуры, ниже примеры для культуры "en-US":
Любой другой символ приведёт к исключению FormatException во время выполнения.
Источник: https://blog.ndepend.com/csharp-datetime-format/
Шпаргалка по Форматированию Дат
Структура System.DateTime, доступная только для чтения, определённая в библиотеке базовых классов .NET (BCL), является ключом к обработке дат и времени в C#. Отформатировать дату и время для вывода можно, указав формат в методе ToString("…"). Например:
csharp
Console.WriteLine(
DateTime.Now.ToString("ddd, dd MMM yyyy h:mm"));
Выведет:
Wed 01 May 2024 8:01Ниже приведены краткие пояснения некоторых часто используемых спецификаторов формата:
d – день месяца от 1 до 31.dd – день месяца от 01 до 31.ddd - аббревиатура дня недели (Mon, Tue, …).dddd - полный день недели (Monday, Tuesday, …).h - 12-часовой формат часов.hh - 12-часовой формат часов с ведущим 0.H - 24-часовой формат часов.HH - 24-часовой формат часов с ведущим 0.m - минуты.mm - минуты с ведущим 0.M - номер месяца.MM - номер месяца с ведущим 0.MMM - краткое имя месяца (Dec).MMMM - полное имя месяца (December).s - секунды.ss - секунды с ведущим 0.f - десятые доли секунды.ff - сотые доли секунды.t - краткое AM/PM (A или P).tt - AM/PM (AM или PM).yyyy - год.z - часов от UTC (+3).zz - часов от UTC с ведущим 0 (+03).zzz - часов и минут от UTC (+03:00).K - аналогично zzz, но адаптирует вывод в зависимости от типа времени (местное, UTC или не указано), поэтому может не вывести ничего.Символы
FHKMdfghmstyz%:/\"' зарезервированы в строке формата даты и времени. Они интерпретируются как символы форматирования, за исключением случаев, когда используются внутри одинарных или двойных кавычек, либо экранированы \. Все остальные символы последовательно интерпретируются как символьные литералы и остаются неизменными при выводе во время операции форматирования.Также есть несколько стандартных спецификаторов формата, каждый из которых представлен одной буквой
* - зависит от культуры, ниже примеры для культуры "en-US":
"d" - короткая дата* (05/01/2024)"D" - полная дата* (Wednesday, May 01, 2024)"f" - полная дата, короткое время* (Wednesday, May 01, 2024 8:01 AM)"F" - полная дата, полное время* (Wednesday, May 01, 2024 8:01:03 AM)"g" - короткая дата, короткое время* (05/01/2024 8:01 AM)"G" - короткая дата, полное время* (05/01/2024 8:01:03 AM)"m" или "M" - день/месяц* (May 1)"o" или "O" - полные дата/время по ISO 8601 (2024-05-01T08:01:03.7300000+04:00)"s" - сортируемые дата/время по ISO 8601 (2024-05-01T08:03:01)"r" или "R" - дата/время по RFC1123 (Wed, 01 May 2024 08:01:03 GMT)"t" - короткое время* (8:01 AM)"T" - длинное время* (8:01:03 AM)"u" - универсальный сортируемый формат даты/времени (2024-05-01 05:01:03Z)"U" - универсальный полный формат даты/времени (Wednesday, May 01, 2024 5:01:03 AM)"y" или "Y" - месяц/год* (May 2024)Любой другой символ приведёт к исключению FormatException во время выполнения.
Источник: https://blog.ndepend.com/csharp-datetime-format/
👍34
День 1963. #Шпаргалка #CSS
Единицы Размеров в CSS. Начало
Поговорим немного о фронтенде. Тем более, что разобраться с UI бывает очень непросто. Многие свойства CSS принимают числа в качестве значений. Кроме того, за ними часто следуют единицы измерения. Что такое px? Чем отличаются em и rem? И как определяются итоговые размеры?
В CSS есть два типа единиц: абсолютные и относительные.
Абсолютные единицы
Каким бы ни было число, оно именно так и рассчитывается в браузере, независимо от размера других элементов. Наиболее распространённое – пиксель (px) — наименьший строительный блок для отображения графики, основанный на разрешении. На экране с высоким разрешением пиксель будет меньше, чем на экране с низким.
Абсолютные значения предсказуемы. Но, если пользователь увеличивает масштаб страницы, то всё, что определено с абсолютным значением, соответственно увеличит свой абсолютный размер.
1. Длина
-
-
-
-
-
-
-
2. Углы
Хороши, например, для направления линейного градиента (linear-gradient) или поворота (rotate) элемента.
-
-
-
-
Например,
3. Время
Тут всё просто
-
-
Например,
4. Разрешение
Количество точек на единицу измерения. Чем меньше точек, тем более «пикселизированным» и размытым будет изображение. Отлично подходит для таргетинга стилей на определенные экраны в медиа-запросах.
-
-
-
Например,
Спецификация определяет значение infinite для медиа-запросов под экраны без ограничений разрешения.
Окончание следует…
Источник: https://css-tricks.com/css-length-units/
Единицы Размеров в CSS. Начало
Поговорим немного о фронтенде. Тем более, что разобраться с UI бывает очень непросто. Многие свойства CSS принимают числа в качестве значений. Кроме того, за ними часто следуют единицы измерения. Что такое px? Чем отличаются em и rem? И как определяются итоговые размеры?
В CSS есть два типа единиц: абсолютные и относительные.
Абсолютные единицы
Каким бы ни было число, оно именно так и рассчитывается в браузере, независимо от размера других элементов. Наиболее распространённое – пиксель (px) — наименьший строительный блок для отображения графики, основанный на разрешении. На экране с высоким разрешением пиксель будет меньше, чем на экране с низким.
Абсолютные значения предсказуемы. Но, если пользователь увеличивает масштаб страницы, то всё, что определено с абсолютным значением, соответственно увеличит свой абсолютный размер.
1. Длина
-
cm – сантиметры (96px/2.54)-
mm – миллиметры (1/10cm)-
Q – четверть-миллиметры (1/40cm)-
in – дюймы (2.54cm = 96px)-
pc – пики (1/6in)-
pt – точки (1/72in)-
px – пиксели (1/96in)2. Углы
Хороши, например, для направления линейного градиента (linear-gradient) или поворота (rotate) элемента.
-
deg – градусы (полный круг – 360deg)-
grad – грады (круг – 400grad)-
rad – радианы (круг - 2π ~ 6.2832rad)-
turn – повороты (круг - 1turn)Например,
rotate(180deg)3. Время
Тут всё просто
-
s – секунды,-
ms - миллисекундыНапример,
animation-duration: 2s4. Разрешение
Количество точек на единицу измерения. Чем меньше точек, тем более «пикселизированным» и размытым будет изображение. Отлично подходит для таргетинга стилей на определенные экраны в медиа-запросах.
-
dpi – точек на дюйм-
dpcm – точек на сантиметр-
dppx (или x) – точек на пиксельНапример,
@media (min-resolution: 96dpi) { … }Спецификация определяет значение infinite для медиа-запросов под экраны без ограничений разрешения.
Окончание следует…
Источник: https://css-tricks.com/css-length-units/
👍9
День 1964. #Шпаргалка #CSS
Единицы Размеров в CSS. Окончание
Начало. Абсолютные единицы
Относительные единицы
Значение относительной единицы зависит от размера чего-то ещё. Допустим, у нас есть элемент <div> с абсолютным значением высоты 200 пикселей. Эта высота никогда не изменится. Но если задать элементу относительную ширину в 50%, он займёт половину ширины страницы (либо половину ширины своего родителя). Относительное число действует как множитель для вычисления значения, в зависимости от того, относительно какого размера мы считаем.
1. Проценты
Используются, когда нет другого контекста для задания размера.
2. Относительно шрифта
-
-
Аналогично:
-
-
-
-
-
Большинство из этого требуется только для типографии. Однако, хорошей практикой является задавать размер шрифта в пикселях для элемента <html>, а для всех остальных элементов использовать относительные em и rem:
3. Относительно области просмотра (viewport – видимая часть страницы)
Эти величины всегда считаются относительно размеров страницы.
-
-
-
-
-
-
-
-
-
4. Относительно контейнера
Эти величины считаются в контейнер-запросах относительно размеров соответствующего контейнера.
-
-
-
-
-
Например,
Когда родительский элемент блока child превысит ширину в 30 символов, он станет занимать вместо полной ширины контейнера только половину его ширины.
Источник: https://css-tricks.com/css-length-units/
Единицы Размеров в CSS. Окончание
Начало. Абсолютные единицы
Относительные единицы
Значение относительной единицы зависит от размера чего-то ещё. Допустим, у нас есть элемент <div> с абсолютным значением высоты 200 пикселей. Эта высота никогда не изменится. Но если задать элементу относительную ширину в 50%, он займёт половину ширины страницы (либо половину ширины своего родителя). Относительное число действует как множитель для вычисления значения, в зависимости от того, относительно какого размера мы считаем.
1. Проценты
% - относительно размера родительского элемента.Используются, когда нет другого контекста для задания размера.
2. Относительно шрифта
-
em – элемент (относительно размера шрифта родительского элемента)-
rem – корневой элемент (относительно размера шрифта элемента <html>)Аналогично:
-
ch и rch – ширина символа (отличается для каждого шрифта и у разных символов, кроме моноширинных шрифтов)-
lh и rlh – высота строки-
cap и rcap – высота заглавной буквы-
ic и ric – ширина иероглифа-
ex и rex – ширина буквы X.Большинство из этого требуется только для типографии. Однако, хорошей практикой является задавать размер шрифта в пикселях для элемента <html>, а для всех остальных элементов использовать относительные em и rem:
html {
/* Наследуется всеми элементами */
font-size: 18px;
}
.parent {
/* Изменяется при смене размера в `html` */
font-size: 1.1rem;
}
.child {
/* Изменяется при смене размера в `.parent` */
font-size: 0.9em;
}3. Относительно области просмотра (viewport – видимая часть страницы)
Эти величины всегда считаются относительно размеров страницы.
-
vh и vw – высота и ширина (100vh – высота экрана)-
vmin и vmax – минимум и максимум между vh и vw соответственно-
lvh и lvw – «большие» высота и ширина (в полноэкранном режиме)-
lvb и lvi – эквиваленты lvh и lvw для блока и строки-
svh и svw – «маленькие» высота и ширина (когда отображаются UI браузера и экранная клавиатура)-
svb и svi – эквиваленты svh и svw для блока и строки-
dvh и dvw – «динамические» высота и ширина (изменяются, например, при отображении/скрытии экранной клавиатуры)-
dvb и dvi – эквиваленты dvh и dvw для блока и строки-
dvmin и dvmax – минимум и максимум между dvh/dvb и dvw/dvi соответственно. 4. Относительно контейнера
Эти величины считаются в контейнер-запросах относительно размеров соответствующего контейнера.
-
cqw – ширина контейнера (100cqw – полная ширина)-
cqh – высота контейнера-
cqi – ширина строкового контейнера-
cqb – ширина блокового контейнера-
cqmin и cqmax – минимум или максимум между cqi и cqbНапример,
.parent {
container-type: inline-size;
}
.child {
width: 100%;
@container (width > 30ch) {
.child {
width: 50cqi;
}
}
}Когда родительский элемент блока child превысит ширину в 30 символов, он станет занимать вместо полной ширины контейнера только половину его ширины.
Источник: https://css-tricks.com/css-length-units/
👍13
2257.svg
303.7 KB
День 2257. #Шпаргалка
Шпаргалка по Языку C#
Эта ментальная карта языка C# от Steven Giesel включает в себя большинство функций вплоть до версии C# 14 (которая выйдет в ноябре 2025 года).
SVG содержит ссылки на соответствующие разделы документации. Для вашего удобства я её русифицировал.
Источник: https://steven-giesel.com/blogPost/91563474-ffe6-4c47-b7ee-fb04b5731a74/c-language-mind-map-v14
Шпаргалка по Языку C#
Эта ментальная карта языка C# от Steven Giesel включает в себя большинство функций вплоть до версии C# 14 (которая выйдет в ноябре 2025 года).
SVG содержит ссылки на соответствующие разделы документации. Для вашего удобства я её русифицировал.
Источник: https://steven-giesel.com/blogPost/91563474-ffe6-4c47-b7ee-fb04b5731a74/c-language-mind-map-v14
5👍32👎1
День 2349. #SystemDesign101 #Шпаргалка
Коды Состояний HTTP
1xx: Информационные
100 Continue (продолжайте);
101 Switching Protocols (переключение протоколов);
102 Processing (идёт обработка);
103 Early Hints (предварительный ответ).
2xx: Успех
200 OK (хорошо);
201 Created (создано);
202 Accepted (принято);
204 No Content (нет содержимого);
205 Reset Content (сбросить содержимое);
206 Partial Content (частичное содержимое);
207 Multi-Status (многостатусный);
208 Already Reported (уже сообщалось).
3xx: Перенаправление
300 Multiple Choices (несколько вариантов);
301 Moved Permanently (перемещено навсегда);
302 Found (найдено);
303 See Other (смотреть другое);
304 Not Modified (не изменялось);
305 Use Proxy (использовать прокси);
307 Temporary Redirect (временное перенаправление);
308 Permanent Redirect (постоянное перенаправление).
4xx: Ошибка клиента
400 Bad Request (некорректный запрос);
401 Unauthorized (не авторизован);
402 Payment Required (необходима оплата);
403 Forbidden (запрещено);
404 Not Found (не найдено);
405 Method Not Allowed (метод не поддерживается);
406 Not Acceptable (неприемлемо);
407 Proxy Authentication Required (необходима аутентификация прокси);
408 Request Timeout (истекло время ожидания);
409 Conflict (конфликт);
410 Gone (удалён);
411 Length Required (необходима длина);
412 Precondition Failed (условие ложно);
413 Payload Too Large (полезная нагрузка слишком велика);
414 URI Too Long (URI слишком длинный);
415 Unsupported Media Type (неподдерживаемый тип данных);
416 Range Not Satisfiable (диапазон не достижим);
417 Expectation Failed (ожидание не оправдалось);
422 Unprocessable Entity (необрабатываемый экземпляр);
423 Locked (заблокировано);
424 Failed Dependency (невыполненная зависимость);
425 Too Early (слишком рано);
426 Upgrade Required (необходимо обновление);
428 Precondition Required (необходимо предусловие);
429 Too Many Requests (слишком много запросов);
431 Request Header Fields Too Large (поля заголовка запроса слишком большие);
449 Retry With (повторить с);
499 Client Closed Request (клиент закрыл соединение).
5xx: Ошибка сервера
500 Internal Server Error (внутренняя ошибка сервера);
501 Not Implemented (не реализовано);
502 Bad Gateway (ошибочный шлюз);
503 Service Unavailable (сервис недоступен);
504 Gateway Timeout (шлюз не отвечает);
505 HTTP Version Not Supported (версия HTTP не поддерживается);
506 Variant Also Negotiates (вариант тоже проводит согласование);
507 Insufficient Storage (переполнение хранилища);
508 Loop Detected (обнаружено бесконечное перенаправление);
509 Bandwidth Limit Exceeded (исчерпана пропускная ширина канала);
510 Not Extended (отсутствует расширение);
511 Network Authentication Required (требуется сетевая аутентификация);
520 Unknown Error (неизвестная ошибка);
521 Web Server Is Down (веб-сервер не работает);
522 Connection Timed Out (соединение не отвечает);
523 Origin Is Unreachable (источник недоступен);
524 A Timeout Occurred (время ожидания истекло);
525 SSL Handshake Failed (SSL-рукопожатие не удалось);
526 Invalid SSL Certificate (недействительный сертификат SSL).
Коды состояний, которые не должны были существовать
Источники:
- https://github.com/ByteByteGoHq/system-design-101
- https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP
Коды Состояний HTTP
1xx: Информационные
100 Continue (продолжайте);
101 Switching Protocols (переключение протоколов);
102 Processing (идёт обработка);
103 Early Hints (предварительный ответ).
2xx: Успех
200 OK (хорошо);
201 Created (создано);
202 Accepted (принято);
204 No Content (нет содержимого);
205 Reset Content (сбросить содержимое);
206 Partial Content (частичное содержимое);
207 Multi-Status (многостатусный);
208 Already Reported (уже сообщалось).
3xx: Перенаправление
300 Multiple Choices (несколько вариантов);
301 Moved Permanently (перемещено навсегда);
302 Found (найдено);
303 See Other (смотреть другое);
304 Not Modified (не изменялось);
305 Use Proxy (использовать прокси);
307 Temporary Redirect (временное перенаправление);
308 Permanent Redirect (постоянное перенаправление).
4xx: Ошибка клиента
400 Bad Request (некорректный запрос);
401 Unauthorized (не авторизован);
402 Payment Required (необходима оплата);
403 Forbidden (запрещено);
404 Not Found (не найдено);
405 Method Not Allowed (метод не поддерживается);
406 Not Acceptable (неприемлемо);
407 Proxy Authentication Required (необходима аутентификация прокси);
408 Request Timeout (истекло время ожидания);
409 Conflict (конфликт);
410 Gone (удалён);
411 Length Required (необходима длина);
412 Precondition Failed (условие ложно);
413 Payload Too Large (полезная нагрузка слишком велика);
414 URI Too Long (URI слишком длинный);
415 Unsupported Media Type (неподдерживаемый тип данных);
416 Range Not Satisfiable (диапазон не достижим);
417 Expectation Failed (ожидание не оправдалось);
422 Unprocessable Entity (необрабатываемый экземпляр);
423 Locked (заблокировано);
424 Failed Dependency (невыполненная зависимость);
425 Too Early (слишком рано);
426 Upgrade Required (необходимо обновление);
428 Precondition Required (необходимо предусловие);
429 Too Many Requests (слишком много запросов);
431 Request Header Fields Too Large (поля заголовка запроса слишком большие);
449 Retry With (повторить с);
499 Client Closed Request (клиент закрыл соединение).
5xx: Ошибка сервера
500 Internal Server Error (внутренняя ошибка сервера);
501 Not Implemented (не реализовано);
502 Bad Gateway (ошибочный шлюз);
503 Service Unavailable (сервис недоступен);
504 Gateway Timeout (шлюз не отвечает);
505 HTTP Version Not Supported (версия HTTP не поддерживается);
506 Variant Also Negotiates (вариант тоже проводит согласование);
507 Insufficient Storage (переполнение хранилища);
508 Loop Detected (обнаружено бесконечное перенаправление);
509 Bandwidth Limit Exceeded (исчерпана пропускная ширина канала);
510 Not Extended (отсутствует расширение);
511 Network Authentication Required (требуется сетевая аутентификация);
520 Unknown Error (неизвестная ошибка);
521 Web Server Is Down (веб-сервер не работает);
522 Connection Timed Out (соединение не отвечает);
523 Origin Is Unreachable (источник недоступен);
524 A Timeout Occurred (время ожидания истекло);
525 SSL Handshake Failed (SSL-рукопожатие не удалось);
526 Invalid SSL Certificate (недействительный сертификат SSL).
Коды состояний, которые не должны были существовать
218 This Is Fine - Отсылка к мему, означает, что ошибка не должна перехватываться сервером и отправляться клиенту.418 I’m A Teapot – Введен в 1998 году как первоапрельская шутка (4/1/8). Означает, что чайник не может сварить кофе.420 Enhance Your Calm – Нестандартный ответ, предлагающий клиенту «остыть». Сейчас заменён кодом 429.451 Unavailable For Legal Reasons – Доступ к ресурсу закрыт по юридическим причинам, например, по требованию органов государственной власти или по требованию правообладателя в случае нарушения авторских прав. Является отсылкой к роману Рэя Брэдбери «451 градус по Фаренгейту».530 Site Frozen – Сайт работает, но заморожен провайдером (например, за неоплату).Источники:
- https://github.com/ByteByteGoHq/system-design-101
- https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP
👍22