C#razy
144 subscribers
253 photos
51 videos
2 files
389 links
Путь в IT, рост, менторство, поддержка, прокачка, мотивация

👨‍💻 Senior .NET dev с 12+ лет опыта
📚 Учусь в MIT по Computer Science
🖥 100+ дней подряд LeetCode
⚒️ Работаю на зарубеж
💻 Веду блог про рост в IT с нуля
🧭 Помогаю понять, куда двигаться
Download Telegram
#humor

Friday 😎

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2😎1
ctrl + a
shift + del
🦆

#humor

💡 Channel | ✏️ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
я надёжный пароль 😮

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2❤1🤓1
AI : I need your job 🙉

#humor

💡 Channel | ✏️ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Тебе не придется просыпаться если ты не будешь спать 😴

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
📝Интересно, а может мне deepfake сделать, чтобы я на работе выглядел суперпродуктивным? 😎

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

🔸 Мошенники, создающие дипфейки, могут легко с имитировать голос вашего босса или даже любимого актера, и кто знает, что они потребуют в следующий раз? Ладно бы просто позабавится или позвонить кому нибудь от моего имени, но дело-то идет о крупных суммах и личных данных!

🔸 Ущерб от мошенничества с использованием дипфейков в мире уже исчисляется миллионами долларов. В прошлом году одна компания потеряла $35 млн из-за фальшивого видео-звонка, где подделали внешность директора.

Итог: будьте бдительны, ведь видеть это не значит верить!

#story

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
🧙🏻‍♂️ Быстрая оценка в System Design

📝Быстрая оценка — это метод, который сочетает математику и интуицию для приблизительного расчета. Он помогает быстро понять масштаб задачи, опуская сложные детали, округляя цифры и фокусируясь на главном. С помощью этой техники можно определить, например, количество запросов на сервер или объем данных, которые нужно обработать.

📝Пример
Представим, что мы запускаем платформу для потокового воспроизведения видео. Средний пользователь смотрит 1 час видео в день — это примерно 1 ГБ данных. При 1 миллионе активных пользователей это уже 1 миллион гигабайт ежедневно. Это количество данных нужно передавать и обрабатывать в режиме реального времени.

📝Расчет инфраструктуры
Если платформа поддерживает 10 Гбит/с на сервер, а каждый пользователь потребляет 5 Мбит/с, один сервер сможет обслуживать около 2000 одновременных пользователей. Для 1 миллиона пользователей потребуется примерно 500 серверов.

📝Хранение данных
Предположим, что каждое видео занимает 2 ГБ, и загружается 1000 новых видео ежедневно — это 2 ТБ в день, или 730 ТБ в год. Для этого нужно планировать резервное копирование и достаточное хранилище.

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

📎 Быстрая оценка — важный навык для любого инженера и продукт-менеджера. Она помогает фокусироваться на главных аспектах и быть готовым к неожиданностям.

#systemdesign

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🚀 SpaceX + JavaScript + Эра частного космоса

Знали ли вы, что SpaceX использует JavaScript и Chromium в своих системах? 🤯 Да-да, технологии, которые работают в вашем браузере, помогают управлять ракетами Falcon 9! Но на этом новости не заканчиваются. SpaceX только что совершила новый прорыв: они впервые запустили полностью частный космический полёт с гражданским экипажем, и это не просто прогулка!

🧑🏼‍🚀 Впервые частный экипаж выполнит выход в открытый космос! Полёт состоялся в рамках программы Polaris Dawn, возглавляемой миллиардером и пилотом Джаредом Айзекманом, который уже летал на орбиту в миссии Inspiration4. Falcon 9 стартовала с мыса Канаверал, и на борту — целая команда, готовая переписать космическую историю.

Четверо членов экипажа, возглавляемых предпринимателем-миллиардером Джаредом Айзекманом, стремятся достичь высоты 1400 километров (870 миль), что значительно превышает орбиту МКС на высоте 400 километров. Их цель — провести до пяти дней 🫣 на орбите Земли, проводя различные научные эксперименты, и в итоге выполнить первый в истории частный выход в открытый космос 👏

Polaris Dawn — это первая из трёх миссий, финансируемых Айзекманом, которая направлена на расширение границ коммерческих космических исследований, повышение сотрудничества с SpaceX и развитие новых технологий, включая системы связи в космосе и диагностику здоровья космических аппаратов.

👨🏻‍💻 Факт для IT: многие системы управления и дисплеи SpaceX работают на основе Chromium и JavaScript. Вообщем мы дожили до того что технологии, которыми мы пользуемся каждый день, будут отправлять людей в космос.

📎 Ссылки: SpaceX, Watch live as Falcon 9 launches

#news

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Branch Prediction: Как ваш процессор уже как 35 лет предсказывает будущее.

🧙🏻‍♂️ Современные процессоры уже давно получили свои экстрасенсорные способности. С помощью Branch Prediction они способны заглядывать в будущее и предугадывать, какой путь выполнится в вашем коде. Это как если бы ваш компьютер знал, что вам нужно сделать следующее, еще до того, как вы это сами осознаете!

Branch Prediction — это технология в процессорах, которая помогает предсказать, какой путь выберет программа, когда встречается условный переход (например, if или switch) и в условиях неопределённости. При выполнении условных инструкций (ветвлений) процессор должен решить, какой из возможных путей будет выбран, чтобы минимизировать задержки и улучшить производительность.

🙉 Почему это важно?
Когда процессор сталкивается с условным переходом, он должен решить, какой путь выполнить. Если процессор не знает, какой путь выбрать, он может просто сидеть и ждать, что замедляет работу. Branch Prediction помогает процессору заранее выбрать путь и продолжить выполнение инструкций, что значительно ускоряет работу.

🧐 Как это работает?
Процессор использует предыдущие результаты и алгоритмы, чтобы предсказать, какой путь будет выбран. На основе предсказания процессор начинает выполнять инструкции, даже прежде чем точно узнать, правильный ли путь выбран. Если предсказание оказывается неверным, процессор отменяет неверные инструкции и переходит к правильному пути. Это вызывает небольшую задержку, но обычно минимизирует ее.

👨🏻‍💻 Факт для IT
90% точность прогнозирования ветвлений выдают современные процессоры.
3 ns нужно процессору для обработки неверного предсказания ветвления и да это аппаратная и программная функция.

🔎 Проверим это всё кодом
Один и тот же метод, который обрабатывает каждый элемент массива одинаково. Возьмём: массив с рандомными числами, тот же но отсортированный массив, массив с только чётными числами и массив с чередующимися числами чёт/нечёт

👨‍💻 Код
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Running;

BenchmarkRunner.Run<BranchPrediction>();

[HideColumns(Column.Error, Column.StdDev), MemoryDiagnoser]
public class BranchPrediction
{
private const int N = 12_09_2024;

private int[] _unorderedArray = new int[N];
private int[] _ordered = new int[N];
private int[] _allAreOdd = new int[N];
private int[] _alternating = new int[N];

[GlobalSetup]
public void Setup()
{
_unorderedArray = Enumerable.Range(0, N).Select(_ => Random.Shared.Next()).ToArray();
_ordered = _unorderedArray.OrderBy(x => x % 2).ToArray();
_allAreOdd = Enumerable.Repeat(42, N).ToArray();
_alternating = Enumerable.Range(0, N).Select(i => i % 2 == 0 ? 42 : 777).ToArray();
}

[Benchmark]
public int Ordered() => GetEvensCount(_ordered);

[Benchmark]
public int Unordered() => GetEvensCount(_unorderedArray);

[Benchmark]
public int AllAreOdd() => GetEvensCount(_allAreOdd);

[Benchmark]
public int Alternating() => GetEvensCount(_alternating);

private static int GetEvensCount(int[] arr)
{
var evens = 0;
for (var i = 0; i < arr.Length; i++)
if (arr[i] % 2 == 0)
evens++;

return evens;
}
}


😮 Benchmark
Остортированный массив становится в 6 раз быстрее чем массив с неотсортированными числами 👨‍💻
| Method      | Mean      |
|------------ |----------:|
| Ordered | 7.897 ms |
| Unordered | 47.648 ms |
| AllAreOdd | 7.985 ms |
| Alternating | 9.585 ms |


🗿 Так что в следующий раз, когда ваш ноут/пк начнёт тупить, не переживайте — он просто пытается угадать, когда вы наконец закончите свою работу и перестанете его нагружать.

#computerscience #dotnet

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
C#razy pinned a photo
Friday 13th 😬

This is the address 💻

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1🤣1
404 😱

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
Instructions for fire and for end of working day 🐴

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣1
This media is not supported in your browser
VIEW IN TELEGRAM
Inventions of my mother's friend's son.
TAKE MY MONEY 💵 📞

#humor

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣1
What? 🌚

#crazy

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1😁1
🌳 B-Tree индексы в PostgreSQL

🔎 Индексы в PostgreSql нужны, чтобы ускорять поиск данных. Представь, что без индекса — это как искать нужную страницу в книге, перелистывая каждую. А с индексом — как использовать оглавление или указатель. Индексы позволяют быстро находить строки по значениям, улучшая скорость запросов, особенно в больших таблицах. Однако они занимают место и могут замедлять операции записи, потому что индекс нужно обновлять при изменении данных.

B-Tree (Balanced Tree) — это основной тип индексов в PostgreSQL.

Вот почему они так круты нужны
🚀 Быстрее поиск
B-Tree индексы ускоряют запросы на поиск, сортировку и диапазонные запросы, уменьшая количество данных, которые нужно просмотреть.

🔄 Сбалансированность
Дерево всегда сбалансировано, поэтому глубина дерева минимальная, и доступ к данным происходит быстро независимо от размера таблицы.

💡 Идеально для сравнения
Если ваши запросы часто используют операторы сравнения (>, <, =, и их комбинации), то B-Tree индекс ваш лучший друг.

🛠 Автообновление
Индексы автоматически обновляются при добавлении или изменении данных — не нужно беспокоиться о поддержке актуальности (autovacuum привет)

Отличное свежее видео по B-Tree в PostgreSql: YouTube
Сложность видео: 7 из 10

#sql #postgresql

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
C#razy pinned «🌳 B-Tree индексы в PostgreSQL 🔎 Индексы в PostgreSql нужны, чтобы ускорять поиск данных. Представь, что без индекса — это как искать нужную страницу в книге, перелистывая каждую. А с индексом — как использовать оглавление или указатель. Индексы позволяют…»
Open source: Какие бывают лицензии на ПО и как они работают

📌Однажды я делал ревизую проекта и нужно было просмотреть какие библиотеки используются у нас. Вопрос стал о лицензиях на программный продукт. Давайте разберём самые популярные Open Source лицензий на ПО.

📌Лицензии на программное обеспечение — это как правила пользования продуктом. Они определяют, что можно делать с кодом, а что нельзя.

Свободные лицензии грубо делятся на два вида:
Copyleft и Permissive License

➡️Permissive License
Permissive лицензии, такие как MIT, BSD и Apache дают максимальную свободу разработчикам. Любой может использовать код в любом виде, изменять его, интегрировать в свои проекты и не делиться изменениями. Главное требование — указать оригинального автора. Так же они могут распространяться под любой лицензией, но есть нюансы.

🟦MIT License
Самая простая и популярная лицензия. Вы можете делать с кодом почти всё, что угодно — копировать, модифицировать, даже продавать, но с одним условием: указать оригинального автора. Пример: React.js

🟦Apache License 2.0
Очень похожа на MIT, но с дополнительной защитой от патентных претензий. Если вы используете код под этой лицензией, никто не может вас засудить за использование их патентов. Пример: Apache HTTP Server.

🟦BSD License
Похожа на MIT, но позволяет вам изменять и распространять код, не требуя открывать исходники. Вы можете делать с ним что угодно, даже внедрять в проприетарные продукты. Пример: Git

➡️Copyleft
Концепция, такие как GPL, которая обязывает сохранять свободу программного обеспечения. Любые изменения или дополнения к коду должны быть также доступны всем. Это обеспечивает развитие программного обеспечения в рамках open-source сообщества, сохраняя его открытым и доступным для всех

🟥GPL (General Public License)
Под этой лицензией код полностью открытый, но есть условия. Любые модификации или улучшения, которые вы сделаете, тоже должны быть открыты и распространяться под той же лицензией. Пример: Linux.

©️Заключение
Выбор лицензии зависит от того, насколько вы хотите открытым сделать свой код и какие правила использования других людей вам важны. Разработчики часто выбирают MIT или Apache для свободы использования и распространения, но GPL тоже остаётся популярной среди сторонников Open Source.

#opensource

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Garbage Collector: Что это такое и помогает ли он разработчикам?

📌 По простому Garbage Collector (GC) — это уборщик, который автоматически наводит порядок в вашем доме (программе), чтобы вам не приходилось самому думать о том, когда и как выбросить ненужные вещи (объекты).

📌 Garbage Collector — это механизм автоматического управления памятью в некоторых языках программирования, таких как C#, Python, Go и другие. Его основная задача — освобождать память, которая больше не используется программой, чтобы предотвратить утечки памяти и улучшить производительность.

🙉 Зачем нужен этот ваш GC?
Это всё для упрощения управлением памяти и сделать ПО более безопасными и избежать ошибки. Он освобождает разработчиков от необходимости думать о том, когда и как освобождать объекты, что особенно важно в сложных и многопоточных приложениях. C# и другие современные языки выбирают GC для повышения продуктивности разработчиков и улучшения общей стабильности программ.

Почему GC внедряют в современных языках программирования
▶️ Автоматизация управления памятью
В C# и подобных языках программисты не занимаются ручным управлением памятью, как это нужно в C или C++. Вручную выделять и освобождать память можно, но это сложно и чревато ошибками. GC делает этот процесс автоматическим. GC отслеживает объекты, которые больше не нужны и освобождает память, предотвращая утечки памяти. Помним только новое, а не давно забытое старое 🤓

▶️Предотвращение утечек памяти
Когда объекты больше не используются, но остаются в памяти, это называется утечкой памяти. В ручном управлении памятью разработчику нужно помнить, когда освобождать объекты. GC в C# берет это на себя, минимизируя вероятность утечек.

▶️Циклические ссылки
Если два объекта ссылаются друг на друга, но больше не нужны программе, в ручном управлении памятью их нельзя просто так удалить. GC может найти такие циклические ссылки и освободить их. Это делает код более безопасным и предотвращает зависание ненужных объектов в памяти.

▶️Упрощение разработки и быстрое прототипирование
GC сильно упрощает жизнь программистам, потому что они могут сосредоточиться на логике программы, а не на низкоуровневом управлении памятью.

▶️Повышение безопасности
Языки с GC более "безопасны", не будет таких ошибок как с CrowdStrike. Т.е. не будет объектов, которые больше не существуют, но к ним продолжают обращаться или когда программа пытается дважды освободить одну и ту же область памяти, что может вызвать ошибки или сбои.

▶️Оптимизация использования памяти
GC использует разные алгоритмы для оптимизации управления памятью. Разбитие на поколения, Перемещение или дефрагментация памяти для эффективного использования памяти

Как работает Garbage Collector
➡️ Сбор мусора. Когда программа больше не использует объект, GC идентифицирует его как "мусор". Это происходит, когда на объект больше нет ссылок, то есть он больше не доступен программе или не нужен.
➡️ Освобождение памяти: GC освобождает память, занимаемую этими объектами, возвращая её системе для дальнейшего использования.
➡️ Механизмы отслеживания. Разные реализации GC используют разные алгоритмы для отслеживания неиспользуемых объектов.

Какие плюсы
➡️ Автоматизация управления памятью. Сборка мусора делается сама.
➡️ Упрощение разработки. Меньше необходимости беспокоиться о низкоуровневых деталях управления памятью (С++ привет)
➡️ "Безопасность". Сборка мусора снижает вероятность доступа к уже освобождённой памяти.

А вот и минусы
➡️ Паузы во время выполнения программы. GC должен приостановить выполнение програмы.
➡️ Потеря контроля. Сборка мусора может начаться внезапно.
➡️ Издержки производительности. В языках с GC некоторые ресурсы тратятся на работу самого сборщика мусора.

📝 В Итоге
Помогает GC - безусловно да, GC позволяет сосредоточиться на задачах, не отвлекаясь на ручное управление памятью. Однако в высокопроизводительных или системах реальном времени может потребоваться ручная оптимизация работы с памятью, и тогда GC может быть как и минусом.

#NoAI #GC #s01e01

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Garbage Collector: Marking Phase

В .NET есть управляемая куча, которая используется для динамического управления памятью. В отличие от стека, который "убирает" за собой автоматически после завершения функций, куча нуждается в "уборщике" — Garbage Collector.

📌 GC состоит из нескольких фаз и Marking Phase – по сути первая и одна из самых важных. Именно здесь начинается магия очистки памяти.

*Самая первая часть это приостановка потоков Stop-the-world - приложение приостанавливается, чтобы обеспечить целостность данных на время сборки мусора.

🤔 Что происходит в Marking Phase?
Итак, представьте: у нас есть объекты в памяти, они могут ссылаться друг на друга, создавая такие себе цепочки зависимости. У каждого приложения есть так называемый корневой объект Root с которого начинаются все связи. В Marking Phase, GC обходит все объекты, начиная с этого корня, и помечает те, которые по-прежнему доступны и используются программой.

В Marking Phase если объект не имеет связи с корневым объектом, он становится "невидимкой" для программы и помечается для удаления. В этот момент GC уже готов освободить память, но пока еще не делает этого — это задача следующей фазы.

🙉 Почему это важно?
Marking Phase помогает определить, какие объекты больше не нужны программе и могут быть очищены, освобождая драгоценную память. Без такой "маркировки" программа могла бы накапливать "мусор" (ненужные объекты), что привело бы к утечкам памяти и снижению производительности.

📈 Как это работает на практике?
Когда вы создаёте объекты в коде, GC строит граф зависимостей — набор объектов, связанных друг с другом. Если объект не связан с корнем, он "сирота" и подлежит очистке. Marking Phase использует этот граф для маркировки ненужных объектов.

➡️Пример
Представьте, что у вас есть несколько объектов в приложении: объект A, который ссылается на объект B, а B ссылается на объект C. Все эти объекты связаны цепочкой. Теперь, объект A считается корневым Root, и пока он существует, B и C тоже будут существовать, потому что они связаны через цепочку ссылок. Это как будто вы держите верёвку, которая соединяет все объекты. Но как только объект A больше не нужен (например, вы завершили работу с ним в коде), связь между A и другими объектами теряется. Теперь B и C остаются "сиротами", потому что они больше не связаны с корнем. В этом случае, GC помечает B и C как ненужные объекты, и они подлежат удалению. То есть, как только исчезает последняя связь с корнем, все зависимые объекты становятся кандидатами на удаление. Таким образом, если объект уже не связан с "корнем", его можно безопасно удалить, освободив память.

📝В итоге
Marking Phase — это важнейший процесс, который помогает GC определить, что можно удалить, а что оставить. Это снижает потребление памяти и помогает вашему приложению работать эффективнее и стабильнее.

#NoAI #GC #s01e02

💡 Channel | ✏ Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2