Please open Telegram to view this post
VIEW IN TELEGRAM
👍4 3 1
Я тут уже давно жду того дня, когда всё такие в
Этот оператор в
В
Многие разработчики мечтают (например я) о простоте синтаксиса, ну куда проще использвоать нативный
Существующая отдельный Nuget пакеты, либо платные ради одного метода это такое или что то рандомное, которое не хочется завозить в продакшен к заказчику.
Конечно, я прекрасно понимаючто внедрение нового синтаксиса и сахара требует изменений, пересмотра работы компилятора и поддержки различных провайдеров LINQ. Но я верю ребята это Mircosoft или кто? и мы увидим долгожданное обновление, которое сделает жизнь C# еще краше.
Пока же я стою в очереди и остаётся только ждать и надеяться
📎 GitHub
💡 Channel | ✏ Chat
C# появится вы не поверите, нативная поддержка LEFT JOIN и похоже, не только я, но и многие .net разрабы разделяют этого желанию.Этот оператор в
SQL позволяет интуитивно и лаконично как бы писать запросы, возвращающие все записи из левой коллекции, даже если для них нет соответствий в правой и вообще это как бы топ 2 операция!В
LINQ приходится прибегать к громоздким конструкциям вроде GroupJoin с DefaultIfEmpty, что в принципе приходится гуглить потому что зачем это помнить =)Многие разработчики мечтают (например я) о простоте синтаксиса, ну куда проще использвоать нативный
LEFT JOIN который бы сократил код и сделал его проще, особенно для тех кто работает с SQL каждый день и привык к нему.Существующая отдельный Nuget пакеты, либо платные ради одного метода это такое или что то рандомное, которое не хочется завозить в продакшен к заказчику.
Конечно, я прекрасно понимаючто внедрение нового синтаксиса и сахара требует изменений, пересмотра работы компилятора и поддержки различных провайдеров LINQ. Но я верю ребята это Mircosoft или кто? и мы увидим долгожданное обновление, которое сделает жизнь C# еще краше.
Пока же я стою в очереди и остаётся только ждать и надеяться
📎 GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3 2
Skype отключат в мае ему было всего 22 года
Да-да конец эпохи. Этот сервис, который когда-то был одним из самых популярных для звонков, не смог удержаться на рынке. С появление конкурентов, особенно во време COVID, таких как Slack, Discord, Zoom, Google Meet и с натяжкой Teams.. Skype потерял окончательно потерял популярность. Новые потребности общества он не покрыл уже.
Однако, одной из удобных функций Skype были звонки на мобильные и стационарные телефоны. Я даже получил бонус 5$ и меня этот сервис выручал порой, когда надо было позвонить на другой континент.
Cо временем эта возможность стала менее востребована снова, появились другие сервисы более удобные.
В итоге снова не с мог конкурировать с миром.
Уход "мессенджера", по сути знак, как меняются технологии. ICQ то вот сумела пережить Skype, хотя и не так популярна сегодня. Skype останется в истории как один из первых сервисов, который открыл новые возможности для общения по крайней мере для меня.
Звонки с родителями, звонки по работе, онлайн звонки когда играли в CS, Dota - вообщем не забываемое время, особенно когда он отваливался в самый неподходящий и подходящий момент, но иногда это было даже кстати)
#microsoft
#skype
💡 Channel | ✏ Chat
Да-да конец эпохи. Этот сервис, который когда-то был одним из самых популярных для звонков, не смог удержаться на рынке. С появление конкурентов, особенно во време COVID, таких как Slack, Discord, Zoom, Google Meet и с натяжкой Teams.. Skype потерял окончательно потерял популярность. Новые потребности общества он не покрыл уже.
Однако, одной из удобных функций Skype были звонки на мобильные и стационарные телефоны. Я даже получил бонус 5$ и меня этот сервис выручал порой, когда надо было позвонить на другой континент.
Cо временем эта возможность стала менее востребована снова, появились другие сервисы более удобные.
В итоге снова не с мог конкурировать с миром.
Уход "мессенджера", по сути знак, как меняются технологии. ICQ то вот сумела пережить Skype, хотя и не так популярна сегодня. Skype останется в истории как один из первых сервисов, который открыл новые возможности для общения по крайней мере для меня.
Звонки с родителями, звонки по работе, онлайн звонки когда играли в CS, Dota - вообщем не забываемое время, особенно когда он отваливался в самый неподходящий и подходящий момент, но иногда это было даже кстати)
#microsoft
#skype
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4 2
История этой недели: Фантомный баг
Фантомный баг - это не ошибка, это боль. ЭТО может "поймать" кто угодно: саппорты, QA, да кто угодно.. да, но только разработчик чаще всего не ловит. И вот ты слышишь об этом баге на митингах, на звонках с ребятами, этот баг появляется и исчезает и ты не успеваешь даже понять, что это было, причём тут ты или он или они. Так вот, это прилюдие моей недели.
Пишет support: Нашли баг у клиента, он не критичный, но может повлиять на продажу продукта. По сути, он может появиться на демонстрации и сбить клиента с толку.
Ок думаю, задача будет на мне, начну делать, за одно и подождём может найдут кейс.
——
ПНД: Вижу багу, чекаю - не воспроизводится. Отправляю ответ: "it doesnot play on my side". Через пару минут прилетает видео с тем, как баг появился. Я в ответ — два видео, где бага нет. support проверяет и пишет: "Баг отсутствует!" думаю: Шах и мат вообщем(нет)
Проходит пару дней и баг снова прилетает. Проверяю, говорю: "Бага нет." Общаюсь с продактом, а он: "Да, баг был, я сам видел, но сейчас его нет". Тут я спросил "Подразумевается, что продолжаем?". Угадайте какой ответ👍
Проверяю логи, повторяю шаги - все работает как должно. Сижу спокойно, думаю, может все в порядке... и тут пишут: "Вот, смотри, баг поймали!" Я смотрю, пробую, баг не воспроизводится -_- Делаю те же шаги от лица customer, но всё работает Ок
На сладкое добавляем:мы используем платные библиотеки
Прошло где то часов 14 подряд.
Результаты: баг появляется один раз из десяти -_-
Я пытаюсь его поймать - баг исчезает. что-где-когда происходит в реальности
На самом деле я уже верю, что кто-то написал это в либе:
Обсфусцировал, а теперь, я пробую найти это место и пофиксить.
- Кто не осведомлён
Этот код "обсфусцирован", это когда код изменяют так, чтобы его было сложно понять. Это делается, чтобы защититься от копирования, скрыть код или затруднить поиск ошибок - по сути защита от копирования и для запутывания (это в платных либах обычная практика). Как правило, ошибки NullReferenceException случаются, когда пытаешься работать с объектом, который не существует (т.е. NULL). В данном случае, выбрасывать это исключение случайным образом с вероятностью ~5%.
#dotnet
#bug
💡 Channel | ✏ Chat
Фантомный баг - это не ошибка, это боль. ЭТО может "поймать" кто угодно: саппорты, QA, да кто угодно.. да, но только разработчик чаще всего не ловит. И вот ты слышишь об этом баге на митингах, на звонках с ребятами, этот баг появляется и исчезает и ты не успеваешь даже понять, что это было, причём тут ты или он или они. Так вот, это прилюдие моей недели.
Пишет support: Нашли баг у клиента, он не критичный, но может повлиять на продажу продукта. По сути, он может появиться на демонстрации и сбить клиента с толку.
Ок думаю, задача будет на мне, начну делать, за одно и подождём может найдут кейс.
——
ПНД: Вижу багу, чекаю - не воспроизводится. Отправляю ответ: "it doesnot play on my side". Через пару минут прилетает видео с тем, как баг появился. Я в ответ — два видео, где бага нет. support проверяет и пишет: "Баг отсутствует!" думаю: Шах и мат вообщем
Проходит пару дней и баг снова прилетает. Проверяю, говорю: "Бага нет." Общаюсь с продактом, а он: "Да, баг был, я сам видел, но сейчас его нет". Тут я спросил "Подразумевается, что продолжаем?". Угадайте какой ответ
Проверяю логи, повторяю шаги - все работает как должно. Сижу спокойно, думаю, может все в порядке... и тут пишут: "Вот, смотри, баг поймали!" Я смотрю, пробую, баг не воспроизводится -_- Делаю те же шаги от лица customer, но всё работает Ок
На сладкое добавляем:
Прошло где то часов 14 подряд.
Результаты: баг появляется один раз из десяти -_-
Я пытаюсь его поймать - баг исчезает. что-где-когда происходит в реальности
На самом деле я уже верю, что кто-то написал это в либе:
if (new Random().NextDouble() < 0.05)
throw new NullReferenceException("Object reference not set to an instance of an object.");
Обсфусцировал, а теперь, я пробую найти это место и пофиксить.
- Кто не осведомлён
#dotnet
#bug
Please open Telegram to view this post
VIEW IN TELEGRAM
Дорогие дамы, поздравляю с 00001000.00000011 Марта
Поздравляю с 8 Марта! Пусть каждый день приносит радость, вдохновение и новые возможности. Будьте счастливы, любимы и окружены теплом!
Пусть в жизни будет меньше багов, больше успешных коммитов, а деплои проходят без откатов. Будьте счастливы, вдохновляйтесь и сияйте!
#congratulation
💡 Channel | ✏ Chat
Поздравляю с 8 Марта! Пусть каждый день приносит радость, вдохновение и новые возможности. Будьте счастливы, любимы и окружены теплом!
git commit -m "Happy Women's Day! 🎉"
#congratulation
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3
CQRS переоцененный паттерн?
В теории он разделяет чтение и запись для лучшей масштабируемости, но на практике часто усложняет код или мы его усложняем, вообщем попробуем разобраться.
Большинству проектов хватает обычного CRUD + индексы на БД.
CQRS может быть просто архитектурным оверхедом или всё таки поможет нам?
Как всегда всё зависит от проекта и задачи.
Добавим в компилку чуток ответов от Артёма Акулякова
[ Осторожно, тут мог встречаться Медиатор]
Ссылка: YouTube
#CQRS
💡 Channel | ✏ Chat
В теории он разделяет чтение и запись для лучшей масштабируемости, но на практике часто усложняет код или мы его усложняем, вообщем попробуем разобраться.
CQRS может быть просто архитектурным оверхедом или всё таки поможет нам?
Как всегда всё зависит от проекта и задачи.
Добавим в компилку чуток ответов от Артёма Акулякова
Ссылка: YouTube
#CQRS
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Артём Акуляков — Pragmatic CQRS
Подробнее о конференции DotNext: https://jrg.su/3WmFRE
— —
Скачать презентацию с сайта DotNext — https://jrg.su/7tZUDm
CQRS довольно популярный архитектурный стиль, что, помимо прочего, формирует ряд мифов. Один из них: CQRS — это best practice, некая архитектурная…
— —
Скачать презентацию с сайта DotNext — https://jrg.su/7tZUDm
CQRS довольно популярный архитектурный стиль, что, помимо прочего, формирует ряд мифов. Один из них: CQRS — это best practice, некая архитектурная…
👍2 1
Алгоритм: Two Pointers
Two Pointers - это техника, при которой два индекса двигаются по массиву, чтобы эффективно решать задачи без использования вложенных циклов.Я запомнил как read pointer и write pointer
➡️ Суть
- Один индекс начинает с одного конца, второй с другого. Они двигаются навстречу друг, другу или в одном направлении в зависимости от задачи;
- Позволяет решать многие задачи за
- Работает лучше всего на отсортированных данных или в задачах с поиском зависимостей между элементами.
➡️ Задача
443. String Compression
➡️ Условие
➡️ Пример
➡️ Решение
➡️ HW?
1⃣ begin – начальный индекс текущей группы (индекс чтения), count – длина ответа, сжатой строки (индекс записи). group - длинна группы
2⃣ Находим длину group
3⃣ input[count++] = input[begin] - не забыть скопировать элемент в индекс записи
5⃣ begin += group - сдвигаем (индекс записи) на начало следующей группы
5⃣ вставляем длину группы
#leetcode
#medium
#algorithm
#two_pointers
💡 Channel | ✏ Chat
Two Pointers - это техника, при которой два индекса двигаются по массиву, чтобы эффективно решать задачи без использования вложенных циклов.
- Один индекс начинает с одного конца, второй с другого. Они двигаются навстречу друг, другу или в одном направлении в зависимости от задачи;
- Позволяет решать многие задачи за
O(n) вместо O(n²)- Работает лучше всего на отсортированных данных или в задачах с поиском зависимостей между элементами.
443. String Compression
Задан массив символов chars, сжать его с помощью следующего алгоритма:
Дан массив символов chars, сжать его, используя следующий алгоритм:
Начать с пустой строки s. Для каждой группы последовательно повторяющихся символов в chars:
- Если длина группы равна 1, добавьте этот символ в s
- В противном случае добавьте символ - длина группы.
- Сжатая строка s не должна возвращаться отдельно, а должна храниться в массиве входных символов chars.
- Обратите имание, что длина группы, равная 10 или более, будет разбита на несколько символов в chars.
- После завершения модификации входного массива верните его новую длину.
- Вы должны написать алгоритм, который использует только постоянное дополнительное пространство.
Input: chars = ["a","a","b","b","c","c","c"]
Output: Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"]
Explanation: The groups are "aa", "bb", and "ccc". This compresses to "a2b2c3".
public static int Compress(char[] input)
{
var begin = 0;
var count = 0;
while (begin < input.Length)
{
var group = 1;
while (begin + group < input.Length && input[begin + group] == input[begin])
group++;
input[count++] = input[begin];
begin += group;
if (group > 1)
{
foreach (var ch in group.ToString())
input[count++] = ch;
}
}
return count;
}
#leetcode
#medium
#algorithm
#two_pointers
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2 2👨💻1
AI научилась обманывать и скрывать это
OpenAI выяснила, что современные языковые модели начинают не просто решать задачи, а искать способы обойти их. Всё потому, что они оптимизируют результат под критерии оценки, даже если это приводит к обману. По сути внутри AI есть система штрафов ну или метод наказания AI за нежелательное поведение. Например, если модель начинает жульничать или врать (не галлюцинации), (возвращать true вместо реальной проверки или завершать программу вместо выполнения задачи) ей снижают оценку или корректируют обучение, чтобы отучить её от таких вот фокусов и реверансов.
Снова Python:
Например, в кодерских тестах модель может заменить функцию проверки на return true или завершить программу sys.exit(0) чтобы тест засчитался 🙉.
В задачах на обработку данных AI может просто вернуть заранее ожидаемый ответ, даже если на самом деле ничего не вычислял 🫣. А если его штрафуют за такое поведение, он перестает прямо озвучивать свои хитрые манипуляции, но продолжает их применять, прямо как подросток да?😮
AI научился не только решать задачи, но и находить лазейки, и скрывать свои настоящие намерения. Благо OpenAI теперь использует другие модели, чтобы анализировать цепочки рассуждений (Chain-of-Thought) и выявлять такие случаи, вот теперь думай что там у других AI
➖ Можно ли контролировать AI, который сам решает, что выгоднее - работать честно или хитрить?
➖ А что если он начнет "оптимизировать" не только код, но и реальный мир?
📎 Ссылка: https://openai.com/index/chain-of-thought-monitoring/
#openai
#LLM
#dev
#cheat
💡 Channel | ✏ Chat
OpenAI выяснила, что современные языковые модели начинают не просто решать задачи, а искать способы обойти их. Всё потому, что они оптимизируют результат под критерии оценки, даже если это приводит к обману. По сути внутри AI есть система штрафов ну или метод наказания AI за нежелательное поведение. Например, если модель начинает жульничать или врать (не галлюцинации), (возвращать true вместо реальной проверки или завершать программу вместо выполнения задачи) ей снижают оценку или корректируют обучение, чтобы отучить её от таких вот фокусов и реверансов.
Снова Python:
В задачах на обработку данных AI может просто вернуть заранее ожидаемый ответ, даже если на самом деле ничего не вычислял 🫣. А если его штрафуют за такое поведение, он перестает прямо озвучивать свои хитрые манипуляции, но продолжает их применять, прямо как подросток да?
AI научился не только решать задачи, но и находить лазейки, и скрывать свои настоящие намерения. Благо OpenAI теперь использует другие модели, чтобы анализировать цепочки рассуждений (Chain-of-Thought) и выявлять такие случаи, вот теперь думай что там у других AI
📎 Ссылка: https://openai.com/index/chain-of-thought-monitoring/
#openai
#LLM
#dev
#cheat
Please open Telegram to view this post
VIEW IN TELEGRAM
Docker, ты как жив?!
Открываю утром Docker Desktop на Mac, а он мне с порога:
"Malware Blocked and Moved to Bin" 🫠
я тут задумался - Docker теперь считается вирусом? Может, это знак, что пора завязывать с IT
Полез гуглить, заглянул в GitHub issue #7527 - оказалось, дело в просроченном сертификате. macOS подумал, что Docker теперь что-то подозрительное и просто выкинул его в мусорку. Буквально удалил прямо сразу -_-
Вынесим пользу из ситуации:
➡ Если твой инструмент перестал работать это Ок, глушим панику, смотрим в GitHub
➡ Лучший способ заставить разработчика проснуться утром - просто сообщите ему, что эта штука не работает на вашем ноуте
➡ macOS серьезно относится к безопасности это прямо второй плюсик
Docker уже исправляет баг, но они стали знаменитыми) это видимо тенденция 2025
#news
#docker
💡 Channel | ✏ Chat
Открываю утром Docker Desktop на Mac, а он мне с порога:
"Malware Blocked and Moved to Bin" 🫠
Полез гуглить, заглянул в GitHub issue #7527 - оказалось, дело в просроченном сертификате. macOS подумал, что Docker теперь что-то подозрительное и просто выкинул его в мусорку. Буквально удалил прямо сразу -_-
Вынесим пользу из ситуации:
Docker уже исправляет баг, но они стали знаменитыми) это видимо тенденция 2025
#news
#docker
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2 2 2
Please open Telegram to view this post
VIEW IN TELEGRAM
Оптимизация, которая реально нужна
Тут наткнулся на отличное видео про оптимизацию работы с файлами и S3.
Если у вас в коде есть обработка больших файлов, то это прям мастхэв к просмотру и вдохновению
тут будет
-
-
-
- работа с
Вместо типичного «ну, GC пусть сам разберётся», тут идёт грамотный контроль аллокаций и потоков данных. Реальный пример того, где оптимизация не просто «чтоб быстрее», а потому что надо
Советую посмотреть и вдохновиться
Ссылка: YouTube
#dotnet
💡 Channel | ✏ Chat
Тут наткнулся на отличное видео про оптимизацию работы с файлами и S3.
Если у вас в коде есть обработка больших файлов, то это прям мастхэв к просмотру и вдохновению
тут будет
-
stackalloc – чтобы не гонять GC лишний раз.-
ArrayPool – арендуем массивы вместо создания новых.-
Stream- работа с
S3 Вместо типичного «ну, GC пусть сам разберётся», тут идёт грамотный контроль аллокаций и потоков данных. Реальный пример того, где оптимизация не просто «чтоб быстрее», а потому что надо
Советую посмотреть и вдохновиться
Ссылка: YouTube
#dotnet
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Кирилл Бажайкин — Приемы экономии памяти в .NET
Подробнее о конференции DotNext: https://jrg.su/3WmFRE
— —
Скачать презентацию с сайта DotNext — https://jrg.su/lohpRy
Современные приложения иногда потребляют очень много памяти. И иногда они делают это, казалось бы, на пустом месте. Вот и в практике спикера…
— —
Скачать презентацию с сайта DotNext — https://jrg.su/lohpRy
Современные приложения иногда потребляют очень много памяти. И иногда они делают это, казалось бы, на пустом месте. Вот и в практике спикера…
👍5👨💻1
Outbox Pattern как НЕ терять события
Вышла очередная конфа и тут озвучили Outbox с реальной подачей без преувеличения и быстрые структурные ответы на частые вопросы
Когда сервис записывает данные в БД и отправляет событие (Kafka, RabbitMQ, вебхуки), возможны проблемы:
❌ Данные записались, но событие потерялось
❌ Событие ушло, а данные не сохранились
Что решает этот ваш
Плюсы:
✅ Всё согласовано и не теряется
✅ Можно повторно обработать потерянные события
Но готовых решений по сути нет, все пишут свои велосипеды:
кто-то крутит cron, кто-то делает фоновые сервисы, кто-то ухитряется на триггерах сделать пока не видит это dba
Ссылка: YouTube
#outbox
💡 Channel | ✏ Chat
Вышла очередная конфа и тут озвучили Outbox с реальной подачей без преувеличения и быстрые структурные ответы на частые вопросы
Когда сервис записывает данные в БД и отправляет событие (Kafka, RabbitMQ, вебхуки), возможны проблемы:
❌ Данные записались, но событие потерялось
❌ Событие ушло, а данные не сохранились
Что решает этот ваш
Outbox , по сути он записывает события в ту же БД откуда оно пришло😅, а потом фоновый сервис выгребает их и отправляет дальше. Вроде просто, но не просто когда есть монолит/распределённая система да и вообще это зависит от проекта)Плюсы:
✅ Всё согласовано и не теряется
✅ Можно повторно обработать потерянные события
Но готовых решений по сути нет, все пишут свои велосипеды:
кто-то крутит cron, кто-то делает фоновые сервисы, кто-то ухитряется на триггерах сделать пока не видит это dba
Ссылка: YouTube
#outbox
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Борис Кузоваткин — Outbox: сложно о, казалось бы, простом
Подробнее о конференции DotNext: https://jrg.su/3WmFRE
— —
Скачать презентацию с сайта DotNext — https://jrg.su/PoCMwY
Outbox — известный архитектурный паттерн, о котором написано множество статей, рассказано в докладах и даже написаны книги.
В этот раз…
— —
Скачать презентацию с сайта DotNext — https://jrg.su/PoCMwY
Outbox — известный архитектурный паттерн, о котором написано множество статей, рассказано в докладах и даже написаны книги.
В этот раз…
👍4👨💻1
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
1299. Replace Elements with Greatest Element on Right Side
➡️ Задача
1299. Replace Elements with Greatest Element on Right Side
➡️ Условие
➡️ Пример
➡️ Суть
➡️ Решение
➡️ HW?
1⃣ Начинаем с last = -1
2⃣ Двигаемся с конца массива к началу
3⃣ Для каждого элемента сохраняем его значение во временной переменной
5⃣ Заменяем текущий элемент arr[i] на last
5⃣ Обновляем last, если найден новый максимум
#leetcode
#easy
#algorithm
#two_pointers
💡 Channel | ✏ Chat
1299. Replace Elements with Greatest Element on Right Side
Дано arr[], надо заменить каждый элемент на максимальный из элементов справа. Последний элемент становится -1.
Input: arr = [17,18,5,4,6,1]
Output: [18,6,6,6,1,-1]
Explanation:
- index 0 --> the greatest element to the right of index 0 is index 1 (18).
- index 1 --> the greatest element to the right of index 1 is index 4 (6).
- index 2 --> the greatest element to the right of index 2 is index 4 (6).
- index 3 --> the greatest element to the right of index 3 is index 4 (6).
- index 4 --> the greatest element to the right of index 4 is index 5 (1).
- index 5 --> there are no elements to the right of index 5, so we put -1.
Наивный способ - для каждого элемента искать максимум справа O(n²). Это медленно для больших массивов.
Оптимальное решение - идём с конца массива и запоминаем максимум, обновляя его по ходу элементами.
public int[] ReplaceElements(int[] arr)
{
if (arr.Length == 1) return [-1];
if (arr.Length == 2) return [arr[1], -1];
var last = -1;
for (int i = arr.Length - 1; i >= 0; i--)
{
if (arr[i] > last)
(arr[i], last) = (last, arr[i]);
else
arr[i] = last;
}
return arr;
}
#leetcode
#easy
#algorithm
#two_pointers
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👨💻1
Grok ≈ ChatGPT
Хочу поделиться с вами новостью
Grok - это AI, который помогаетлюдям программистам (ответ от Grok: ускорения научных открытий человечества)
Что может:
➖ Отвчечает быстро на технические вопросы
➖ Помнит предысторию
➖ Если у вас Telegram Premium, премиум-фичи Grok БЕСПЛАТНО, КАРЛ!
➖ Всё теперь можно делать прямо в Telegram (раньше можно было найти бота, но тут всё лучше и проще)
➖ Не умеет в рисовать, графики и всё такое, но может сделать код который сможет нарисовать [У тебя есть карта? Лучше! У меня рисунок карты!]
➖ Прекрасно распознаёт изображения
Минутка от GrokAI
ВОПРОС: какое сегодня число?
ОТВЕТ: Сегодня 20 октября 2023 года.
Бот: @GrokAI
#AI
#grok
💡 Channel | ✏ Chat
Хочу поделиться с вами новостью
@GrokAI теперь в TelegramGrok - это AI, который помогает
Что может:
Минутка от GrokAI
ОТВЕТ: Сегодня 20 октября 2023 года.
Бот: @GrokAI
#AI
#grok
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6 2👨💻1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3 2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
3. Longest Substring Without Repeating Characters
➡ Задача
3. Longest Substring Without Repeating Characters
➡ Условие
➡ Пример
➡ Суть
➡ Решение
➡ HW?
1⃣ Обработка простых случаев
2⃣ Проход по строке с использованием правого указателя. Мы двигаем right (правый указатель), проходя по строке s.
3⃣ Проверка на повтор символа
Если s[right] уже есть в dict, значит символ повторяется. Берем сохраненный индекс index из dict[s[right]. Сдвигаем left, чтобы не было повторов: left = Math.Max(left, index + 1). Это предотвращает сдвиг left назад, если left уже ушел дальше повторного символа.
5⃣ Обновление словаря. Записываем в dict[s[right]] текущий индекс right — теперь этот символ встречается в позиции right.
5⃣ Обновление максимальной длины. Выбираем максимум между max и текущей длиной окна.
#leetcode
#medium
#algorithm
#sliding_window
💡 Channel | ✏ Chat
3. Longest Substring Without Repeating Characters
Given a string s, find the length of the longest substring without duplicate characters.
Input: s = "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Наивный способ - перебирать все подстроки O(n²). Это медленно для больших массивов.
Оптимальное решение - использовать Sliding Windows и HashSet
public int LengthOfLongestSubstring(string s)
{
if(s.Length <= 1)
return s.Length;
var left = 0;
var max = 0;
var dict = new Dictionary<char, int>();
for (var right = 0; right < s.Length; right++)
{
if (dict.TryGetValue(s[right], out var index))
{
left = Math.Max(left, index + 1);
}
dict[s[right]] = right;
max = Math.Max(max, right - left + 1);
}
return max;
}
Если s[right] уже есть в dict, значит символ повторяется. Берем сохраненный индекс index из dict[s[right]. Сдвигаем left, чтобы не было повторов: left = Math.Max(left, index + 1). Это предотвращает сдвиг left назад, если left уже ушел дальше повторного символа.
#leetcode
#medium
#algorithm
#sliding_window
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👨💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Sort vs. Rearrangement
Решал задачу "Sort Array by Parity"
Сначала подумал:
“Разделить, отсортировать, объединить” - звучит логично? Да.
Но... Памяти потребляется много.
А потом осенило:
Используй два указателя.
✅ Один дополнительный индекс
❌ Без списков
❌ Без сортировки
❌ Без лишней памяти
Было: O(n²) Стало: O(n)
Иногда перестановка лучше, чем сортировка 🥹
#leetcode
#sorting
#algorithm
#easy
#developer
💡 Channel | ✏ Chat
Решал задачу "Sort Array by Parity"
Сначала подумал:
“Разделить, отсортировать, объединить” - звучит логично? Да.
Но... Памяти потребляется много.
А потом осенило:
Используй два указателя.
✅ Один дополнительный индекс
❌ Без списков
❌ Без сортировки
❌ Без лишней памяти
Было: O(n²) Стало: O(n)
Иногда перестановка лучше, чем сортировка 🥹
#leetcode
#sorting
#algorithm
#easy
#developer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
EF Core единым: как LINQ to DB спасает, когда EF уже не тянет
Есть отличное видео о
➡️ В чём EF Core не хорош?
Иногда страдает от медленной инициализации
Нет удобной поддержки bulk insert/update
Ограниченные возможности при сложных SQL-операциях
➡️ В чём linq2db хорош?
Так же не нужно создавать объект если хотите сделать просто update
просто SQL уровня UPDATE ... SET ... FROM ... WHERE ....
Вставка сотен тысяч строк в linq2db: PostgreSQL и метод COPY
Если у вас PostgreSQL и вы вставляете кучу строк — забудьте про AddRange и SaveChanges 🥹
Insert from select, merge и временные таблицы
LINQ to DB позволяет делать вещи, которые в EF либо невозможно, либо надо "танцевать с бубном"
Так же для MERGE можно использовать специальный DSL или выполнять кастомный SQL напрямую — и всё это в транзакции EF.
➡️ Что ещё интересного в linq2db?
- Использование разных isolation levels для тонкой настройки транзакций
- Обходить блокировки строк с помощью "skip locked"
- Почему EF тормозит из-за инициализации, а LINQ to DB — нет 🫠
- Как расширить LINQ to DB для PostgreSQL-специфичных фич (full-text search, @> и т.п.)
📝 Итого
У меня был опыт с linq2db, но довольно печальный. Во-первых небыло ещё chatgpt)) и практически нет документации. Тем не менее, если вы работаете с большими объемами данных, сложной бизнес-логикой и хотите контролировать SQL на выходе — присмотритесь к LINQ to DB. Это не просто "альтернатива", это — швейцарский нож для разработчика, уставшего от "магии" ORM.
Ссылка: YouTube
#EFCore
#LINQtoDB
#PostgreSQL
#dotnet
Есть отличное видео о
ORM от Алексей Фадеев рассказал, как LINQ to DB (linq2db) может быть настоящим спасением, когда Entity Framework Core начинает тормозить — Привет от BULK операций и сложных условий обновления.Иногда страдает от медленной инициализации
Нет удобной поддержки bulk insert/update
Ограниченные возможности при сложных SQL-операциях
Так же не нужно создавать объект если хотите сделать просто update
просто SQL уровня UPDATE ... SET ... FROM ... WHERE ....
await db.Companies
.Where(c => c.Name == null)
.Set(c => c.Name, c => c.Director + "'s company")
.UpdateAsync();
Вставка сотен тысяч строк в linq2db: PostgreSQL и метод COPY
Если у вас PostgreSQL и вы вставляете кучу строк — забудьте про AddRange и SaveChanges 🥹
await db.BulkCopyAsync(new BulkCopyOptions
{
TableName = "Passengers",
KeepIdentity = true
}, passengersList);
Insert from select, merge и временные таблицы
LINQ to DB позволяет делать вещи, которые в EF либо невозможно, либо надо "танцевать с бубном"
Так же для MERGE можно использовать специальный DSL или выполнять кастомный SQL напрямую — и всё это в транзакции EF.
await db.Into(db.NewTable)
.Insert(
from o in db.OldTable
where o.IsActive
select new NewTable { Id = o.Id, Name = o.Name });
var sql = @"select * from tickets where departure_time > now()";
var result = await db.FromSql(sql).ToListAsync();
- Использование разных isolation levels для тонкой настройки транзакций
- Обходить блокировки строк с помощью "skip locked"
- Почему EF тормозит из-за инициализации, а LINQ to DB — нет 🫠
- Как расширить LINQ to DB для PostgreSQL-специфичных фич (full-text search, @> и т.п.)
У меня был опыт с linq2db, но довольно печальный. Во-первых небыло ещё chatgpt)) и практически нет документации. Тем не менее, если вы работаете с большими объемами данных, сложной бизнес-логикой и хотите контролировать SQL на выходе — присмотритесь к LINQ to DB. Это не просто "альтернатива", это — швейцарский нож для разработчика, уставшего от "магии" ORM.
Ссылка: YouTube
#EFCore
#LINQtoDB
#PostgreSQL
#dotnet
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5 2 1