8. Что нужно знать, чтобы взяли работать? — Общие навыки — TPL, Linq, DI, интеграционные тесты. Преимущество перед такими же вкатунами даст парочка интересных пет-проектов где вы делаете всё максимально правильно и точно следуя архитектуре. — Архитектура — DDD, микросервисная архитектура. Так же необходимо ознакомиться с паттернами проектирования. Обязательны к изучению: MVVM, MVC, MVP — Базы данных — PostgreSQL/MSSQL + Redis/Mongo. Из ORM: EFCore обычно достаточно, но есть более быстрый, но менее удобный Dapper. Тратить время на ADO.NET не стоит. — Алгоритмы — сортировка, поиск, оценка сложности алгоритмов, рекурсия, алгоритмы на строках. — Структуры данных — связанные списки, деревья (бинарные, красно-чёрные), хеш-таблицы, графы. — Системы контроля версий — обычно гита достаточно.
Как навывается подход когда все ебашится асинхронно. Весь код представляет из себя таски которые добавляются в таскпулл, а потом от туда вызываются и запускаются?
>>2445812 Реактиве ЮИ комманды требуют это вместо обычного bool CanExecute. Всё утро ебался, как это правильно реализовать, сдался и полез в документацию. а там лямбда на лямбде и расширениями погоняет. И потом в конце написано "ради перфоманса у вас всё равно это работать не будет, реализуйте автообновление самостоятельно".
>>2445808 Удобный хуябрик. Сейчас всё кажется сложным но в один момент ты проснёшься и всё осознаешь, буквально. После этой ночи в жизни поменяется многое
Было a : 01 - 03 b : 05 - 07 c : 08 - 10 d : 12 - 15 e : 16 - 18 добавляем : 03-08 изменяем d : 12 - 15 -> 10-16 удаляем 08-10 в конце ожидаем f : 01-08 g : 10-18
и на удивление оказалось что задачка далеко не настолько простая как может показаться на первый взгляд, так к тому еще я не нашел никаких алгоритмов в интернете что бы правильно джойнить такие оверлапы.
>>2445863 Профиты - асинхронно + быстро если не брать Thread'ы, но это это нужно когда надо супер быстро. Подводные следующие: 1. Легко обосраться при async-void; 2. async/await код порождает новый async/await код и заставляет переписывать старый на async/await 3. Неудобно использовать вместе с Thread
>>2445902 Это усложненная модификация классической задачки на поиск перекрытия дат буквы это запись, то-есть объект, а цифры это дата в этом случае, 01.01.2022 - 03.01-2022 например, суть в тому что нужно найти и объединить все перекрытья
>>2445913 Если сделать все так просто как ты хочешь ты получишь не правильный результат, простым циклом тебе прийдется начинать его сначала каждый раз когда какой-то диапазон схлопывается потому что он в этот момент может начать перекрывать предыдущие которые ты как бы уже "проверил", и это не самый умный и быстрый алгоритм
>>2445916 >в этот момент может начать перекрывать предыдущие с чего вдруг. если вливаемый диапазон перекрывает что то - то это будет видно при первом же и единственном проходе. он же поглощает, а не набивает пузо
Увидел тут код класса, реализующего интерфейс, методы этого интерфейса с его же пространством имён. Что это означает? Примерно вот так: class cl : Interface { bool Interface.Method(...) . . .
>>2446022 Сам по себе DI не особо прикольный, а вот IoC контейнеры, значимой частью которых и является DI, это крайне сильная вещь для построения очень сложных систем.
DI же без IoC тебе просто даёт разносить код по разным классам.
>>2446186 > Сам по себе DI не особо прикольный, а вот IoC контейнеры, значимой частью которых и является DI, это крайне сильная вещь для построения очень сложных систем. Ioc это инверсия управления? Можешь пояснить, зачем оно надо? Ну зависит класс не от другого класса а от интерфейса, что это дает?
>>2446303 с чего ему вдруг знать имя без дополнительных средств, которые тоже ограничены ибо специфика так что у тебя в руках только 2 инструмента nameof() [CallerArgumentExpression]
Давайте попроектируем абстрактно. Допустим, будем придумывать облачную систему менеджмента ресурсов. Под ресурсами понимаем - любую хуйню, которую можно как-то измерить.
Так вот. Допустим мы не знаем какую хуйню мы можем измерить. Но мы уже знаем, что нужно будет графики красивые строить, нужно оповещения о том что что-то привысило лимит, либо подходит к нему, нужно чтобы некоторые действия происходили при определенных условиях.
Ну, допустим кейс: мы измеряем количество топлива в самолете, и если количество топлива приближается к границе - отправляется уведомление диспетчеру, чтобы тот 1. Предупредил пилота, 2. Уже готовил команду для дозаправки. Или другой кейс - при приближении к нижнему порогу количества чернил в принтере - уже состовляется заявка на замену картриджа, и в момент исчерпания реусрса картриджа - уже бежит эникей заменять.
Так вот. Какие сущности вижу я:
1. Нам нужна некая система именно что измерений. Тип измерения - абстрактный, содержит в себе только имя, и опционально - описывает метод проверки на нуль и сравнения значений. Сами измерения представляют из себя сущность вида: Метка времени, тип измерения, значение. 2. Нам нужна некая система профилей измерений для разных сущностей. Некое описание объекта, через его измерения. 3. Нам нужен канал получения данных. Это может быть некий протокол сетевой, может быть ручной ввод, может быть рассчитанное значение. Все это должны быть каналы получения данных. Данные отсюда - не знают что они такое. 4. Именно поэтому нам нужен некий интерпритатор/форматтер, который полученные данные из канала - преобразует к измерению. 5. Дальше - нам нужна некая система триггеров и пороговых значений. Ну, тут все просто. Имеем профиль, а дальше дело техники. 6. Нужна некая система действий. Простейший вид - действия определены заранее(отправить сообщение, воспроизвести звуковой сигнал). Чуть более сложный - действия можно комбинировать. Совсем сложный - пользователь может сам создавать действия на основе некоего графического языка программирования.
Вот так я это вижу. А как бы вы такое спроектировали, шарпаны?
Имплементировать Either в свой шарповский код - хорошая идея чи нет? Просто меня немного подзаебало, что вот есть контроллеры. Вот есть сервисы. Я хуйнул Either<TResult, TError>, переопределил приведение. Сейчас контроллеры выглядят примерно так:
public IActionResult GetList() => _service.GetList(); В случае если все ок - вернется лист, если не ок - ошибка вида: { Error:Code, Message: ErrorMessage }
Но чет я думаю - и со стороны ж не очивидно. Типа да, коджа стало меньше, он чище. Но теперь кому-то еще - нужно лезть в реализацию сервиса, чтобы понять, чому ему возвращается что-то там. А потом - разбираться как оно работает. Короче. У вас такое делают?
>>2446517 Ну блин. Мне не нравилось, что в таком случае - сервису нужно какую-то хрень делать.
Вот мне нужно получить по Id что-то. Сервис полез в базу. Не нашел. Что он должен вернуть? Null? MyNotFoundResult? Что еще? Так я возвращаю Error.NotFound А в контроллере просто делаю return _service.GetItemById(id).ToActionResult();
>>2446520 >Что он должен вернуть? Null? MyNotFoundResult? Что еще? Сервис может вернуть пустой список или ссылку, а уже контроллер смотрит на результат и решает, что отправить в ответ..
>>2446142 посмотрел по диагонали. ох любит народ лисапедить. 1 бесполезно проверять через Dns.GetHostEntry. Это ни о чем не говорит. Делай запрос и в случае проблем уже разбирайся что не так. 2 Convert.ToDouble(readver) это вообще что такое блин. Есть же Version.TryParse. Как он будет в дабл перегонять 1.2.3.4? 3 taskkill /f - пох на несохраненные данные. юзер сам виноват ага )
>>2446303 Это нельзя сделать. Среда CLR внутри себя переменные может переименовывать. К примеру int a = 5; будет переименовано внутри метода как int num = 5; Помимо этого в Release если они не используются, то они даже не появятся в низкоуровневом C# коде, т.е и память на них не выделится и соответственно получить даже их значение нельзя. Однако, если эти переменные используются, то их можно получить, но имена их - нет.
К слову, подобный способ не всегда работает в Release режиме, поскольку компилятор упрощает код и внутри метода вместо объявления новых переменных он просто сразу закидывает их значения в методы Console.WriteLine():
Т.е вместо: int a = 5; Console.WriteLine(a);
Будет Console.WriteLine(5);
Тогда локальные переменные можно получить если ты их создаешь, например, в результате выполнения другого метода И при этом используешь, иначе компилятор опять съест неиспользуемые локальные переменные.
Так же хочу еще добавить, в IL коде имён переменных вообще нет (вроде), там просто происходят манипуляции со стеком, а при вызове какого-то метода значения достаются из стека.
>>2446887 А что не так? Ты можешь получить любые имена, кроме локальных переменных. Когда ты помечаешь атрибутом CallerMemberName какой-то входящих параметр в методе, то при передаче условного поля в этот метод атрибут просто получит имя входящего параметра. Входящие параметры это не локальные переменные.
>>2446142 Странный какой-то метод обновления. 1. Твой домен могут подменить без каких-то вопросов, в результате - его метод удалит его же программу. 2. На каждый запрос создается HttpClient. Нахуя? 3. Заменяет программу целиком. Что это вообще за бред-то? У тебя вышел микропатч на здоровенную программулину, допустим кнопка глючила на такой-то вкладке в такую-то фазу луны. Ебись оно все конем - 10 гигов качаем, сносим все. Бред короче. 4. Общая подача, дескать я пиздец как разбираюсь, а потом пук-сереньк, если бы мне не сказали, я бы никогда не узнал, что такое workdir. Это уже не вопрос к методу обновления, а к самому челу. 5. Версия приводится к double - что вообще за бред-то? У нас на работе, допустим, система версий вот такая: 1.0.0.0beta1buildTimebuildHash 6. Почему не делать как человек: скачали, подождали пока пользователь закроет программу, и после этого - обновились, либо при следующем старте.
Я поставил sql server в докер на линупсе. Все по майковским инструкциям, все тесты сделал, тестовую базу сделал, тестовые запросы сделал — все работает. Но вот вопрос — где взять гуй? Не будешь же с базой в командной строке общаться. Пробовал Azure Data Studio — кидает ошибку при попытке подключения (гугл перекопал до десятой страницы, ни один ответ не помог).
>>2447480 Тоже не перестаю охуевать. И ладно другие языки, но шарп! Майковский язык, созданный с прицелом на винду. Но нет, пердолек это не останавливает.
>>2447624 >>2447480 Кхм. А на чем будет ваш шарповский код крутиться? 10 лет назад - еще было непонятно, там вроде и люмия была, и десктом еще вроде как жив. Сейчас - шарп на 90% это веб-хуйня, с прицелом на облака. Ну так вот. Сейчас на шарпе не для линукса будет писать либо дурачок, либо застрявший на легаси, либо чел который кодит для себя. В остальных случаях - ты пишешь под линукс. А если пишешь под линукс - хорошо бы и окружение линуксовое иметь. Потому что я ебал проверять что все нормально работает в WSL или на виртуалке.
>>2447629 Но я веб-макака будущая, так что и по этому критерию тоже линукс. Увы, Датагрип не помог сконнектиться с блядской мелкософтовской бд. Ошибка и иди нахуй. В чем ошибка, что поправить - иди нахуй. Типичные майки. Контора пидарасов.
>>2447703 Типа да, в такой реализации - всегда 200 вернется. Но 1. Я сторонник всегда 200. 2. Можно не к строке с жсоном приводить, а к тому же ActionResult MVC'шному.
>>2447820 без явного указаний типа ref всегда что-то копируется разница лишь в то что копируется для значимых типов - значения для ссылочных типов ссылка
ListNode first = head копирует ссылку из head в переменную fisrt
потом что хочешь делай с оригиналом, копию это не затронет.
>>2448559 В первом передаётся строка hello1?=1/1, во втором hello2/1/1, но так как это надо можно распарсить как hello2 => 1 => 1, то вот делается такое приведение
>>2448590 > то вот делается такое приведение Это понятно, но почему в 1-ом случае на выходе он делает обратное преобразование, а во 2-ом нет? Интересно, что на входе он автоматически экранируется в обоих вариантах. Как получить оригинальную строку при использовании 2-го варианта?
Короче, пасаны, после долгих изысканий я выяснил, что кроме Авалонии на шарпе альтернатив нет, чтобы сделать кроссплатформенное окошко. Остальные тулкиты не дотягивают. Ну и что, что вид не нативный. Ой, да кого это ебёт в 2к22?
>>2449547 За 15 лет экспирианса десктопного линукса, его так нефига до ума и не довели, большая часть окошечек-приложений выглядят на уровень лаба1. В итоге сложилось впечатление, что на этом говне реально сидит 1,5 анона, но по требованию из инета звучит так что линукс-десктоп это 99% рынка и все возмущаются - "да как же так! Нет кросс-гуи на линупсы!" это не отменяет того факта, что MAUI выпилили технично линукс, который там был, лол
>>2449551 Можно потыкать Compose Multiplatform, дурацкое схожие название, которое вводит в заблуждение, но это именно гуишка. Я лично жду когда они начнут свои флагманские проекты на нем писать, ибо это выглядит хренова, когда автор технологии сам в своих продуктах юзает поминимому
Прикинул правила расставления { } от микрософт и чёт не уверен, что они повышают читабельность. Или всё же повышают? это код из геймдева, поэтому он такой странный
>>2449547 >что кроме Авалонии на шарпе альтернатив нет Только больно много в ней "блин а это как блин делать?" Вроде триггеров, inputbindings, вечно глючного дизайнера в студии, хз что вместо Visibility.Hidden и так далее.
>>2449556 дико обожаю compose, но это все таки котлин.
>>2449580 > это все таки котлин …который тянет за собой ЖВМ. > больно много в ней "блин а это как блин делать?" Открытая в соседнем окне документация решает проблему. Вот, например, третьего дня решил поначалу неочевидный для меня момент с IObservable<bool> в качестве параметра CanExecute команд. Я дико ругался и топал ножками, что за хуйню они выдумали и как это туда передать? А оказалось всё просто и удобно, через WhenAnyValue.
>>2449593 Потому что либо ты платишь и профи делают всё за тебя, а ты только готовые компоненты расставляешь, либо делаешь всё сам. Бесплатно. Другой реальности у нас для вас нет.
>>2449595 >…который тянет за собой ЖВМ. на это как бы плевать, шарп тоже тянет clr там другие траблы наряду с няшным синтаксисом от которого у меня постоянно в шарпе пригорает "ну почему в шарпе так нельзя" имеем торчащие уши жава рантайма и не самая понятная система корутин.
>Открытая в соседнем окне документация решает проблему нет не решает. частично решает если ты решил использовать именно реактивеуи, но даже в кратком списке что я вот вспомнил реактивуи никак не поможет.
>>2449603 > няшным синтаксисом Синтаксис всем хорош, вот только паскалевские объявления переменных с типом впозаде всё портят. Тип должен быть первым, это не обсуждается, поэтому котлин соснёт и займёт своё место на свалке истории. Можете скринить.
> в кратком списке что я вот вспомнил Пили список. Порешаем вместе. (И я попрактикуюсь).
>>2449607 >с типом впозаде всё портят на любителя. я выучил шарп за многие годы как изучил питон и котлин, и мне типы позади нравятся больше.
>Пили список. Порешаем вместе да хотя бы тот что я дал триггеров в стиле нет - вместо них нужно юзать бехавиорсы какие то инпутбиндигс нет - снова бехавиорсы дизайнер - DesignInstance нет. <Design инстанцирует вьюмодель что плохо. дизайнер с его постоянными придирками "плохой хамл" но при этом все прекрасно работает. Visibility.Hidden нет и так и не нашел чем заменяется
шрифты на винде мыло. вроде там внедряли ClearType (в упор не видел разницы) но в skia опять сломали (хотя я разницы и не увидел)
>>2449561 У меня вопрос. В геймдеве - не научились отключать уровни логгирования в самом логгере, чтобы не писать это вот if(Log.Level >= LogLevel.Information) ?
Ну, банально блин, обернуть этот вот статический класс другим таким же, чтобы не хреначить постоянно это вот if(Log.LogLevel), а дергать его.
А по хорошему - вообще сделать обертку без статики, прокидывать ее к твоему коду.
>>2449665 Хер знает какие там лишние аллокации. У нас на работе - логгировать нужно каждый шаг, потому что правила такие, чтобы потом можно было восстановить, какие пакеты приходили, есть ли там проблемы с сетью и прочее. Так вот, 40к подключенных устройств с трафиком под 100ГБ/с, без лога - 800мб, с логом - 810МБ. Да, я логгер писал свой, но там никаккой магии, простой поток, который очередь разгребает, а при остановке приложения - все что осталось в очереди - пишет. Короче. ХЗ. Экономия как по мне на спичках, при этом код - ужасно неудобен из-за того что потом придется везде менять это вот, вместо того чтобы просто конфиг поправить в одном месте.
>>2449672 >который очередь разгребает он разгребает НЕНУЖНУЮ очередь. каждый вызов метода логирования вызывает необходимость аллокацировать хотя бы LogEntry для постановки в очередь + боксинг для параметров, а то и вычисление самих параметров.
>>2450097 законом не запрещено писать и на ассемблере. хули ты на языке высокого уровня пишешь? чего экономишь то? Мне нужны только подсказки имен и для этого пытаться реализовывать весь контракт вьюмодели мне нах не всралось - это тупо бойлерплейт.
>>2450163 Как по мне, так лучше завести таки по отдельному методу расширения для каждого метода логгирования, в которых и будет происходить проверка, и навесить на каждый [MethodImpl(MethodImplOptions.AggressiveInlining)] Типа [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void TraceIfEnabled(this Logger logger, string mesage) { if (logger.Level >= LogLevel.Tracing) { logger.LogMessage(message); } }
В таком случае, с очень большой вероятностью при компиляции тело метода будет поставлено в места его вызова, а там уже компилятор проведет внутриподецурную оптимизацию (один из самых простых видов оптимизации для него) и повырезает лишние аллокации.
>>2450177 >>2450163 Чтобы архитектура пахла лучше, оберни вывод в лог в отдельную функцию Add2Log(LogLevel l, string Message); и тупо пиши его всегда, снабжая логлевелом > Add2Log(LogLevel.Informational, "Account: autentificate with ExtremistBook"); Все ифы ты напишешь один раз в обёртке.
>>2450183 Так это по сути и есть такая же обёртка. Мне просто удобней, когда есть отдельные методы для каждого из уровней логгирования. И, судя по наличию в MS.Extensions.Logging методов расширения типа LogDebug(this ILogger, ...), это удобно не только мне. Можно, конечно, вообще сделать и обёртку по твоему типу, и метод расширения.
>>2450182 >снабжая логлевелом в огороде бузина а в киеве... ты вообще не понял суть проблемы
>>2450179 >AggressiveInlining 256 Метод должен по возможности выполняться как встроенный. >по возможности как то все ненадежно. вариант с видео от Jetbrains пока самый лучший
>>2450241 Ну как бы да. Но, как по мне, это не проблема. Скорее всего, если ты пытаешься так изъебнуться с оптимизацией логгирования, то ты опасаешься, как бы оно не оказалось в горячем коде и не начало там стрелять. А горячий код у тебя, так или иначе, через какое-то время будет пересобран JIT-ом на максимальным уровнем оптимизации. А там и PGO ещё подтянуться может, который отметит, что код под условием ни разу не выполнялся, и выкинет его к херам, оставив на всякий случай fallback.
1 ты пишешь логи уровня трейс допустим. никаких проблем
2 тебе не нужны на продакшене такие подробные логи и ты отключаешь на уровне логера писать трейс в лог, но все строки logger.Log* по-прежнему продолжают вычисляться, рождать никому не нужные объекты, делать боксинг. На все это зря тратится cpu и нагружается gc
3 Это не те строчки лога, что можно вырезать через ConditionalDebug - они должны быть в сборке продакшена. И потому чтобы решить проблему ты берешь стандартное решение - У КАЖДОЙ строчки лога пишешь if(TraceEnabled)
4 потом тебя задалбывает писать этот if и ты идешь искать решение как писать поменьше бойлерплейт кода.
>>2450271 > но все строки logger.Log* по-прежнему продолжают вычисляться > ты берешь стандартное решение - У КАЖДОЙ строчки лога пишешь if(TraceEnabled) Но я предложил написать этот иф единожды в методе-обёртке. Соответственно, в продакшене метод-обёртка будет пропускать неподходящего уровня вызовы, и не пускать их дальше в логгер, и методы логгера не будут вычисляться и занимать память. Почему же я неправильно понял суть проблемы?
>>2450302 Подход с if-ом также позволяет избавиться от операций по подготовке сообщения для логгирования. К примеру, сборки строки сообщения с подстановкой в нее значений различных переменных.
Предложенный тобой способ избавляет от записи лога, но все же требует, чтобы сообщение было собрано до вызова метода.
>>2450304 Значит, вынести сборку сообщений в отдельные методы и передавать эти методы коллбэком в обёртку. В том числе лямбдой на месте писать: Add2Log( Loglevel.Level, () => { // Сборка месседжа здесь; } );
Меня решарпер подъебал недавно. Предложил переобъявление рекордов с новыми значениями заменить на var new record = oldRecord with {someProp = newValue} А эта хуйня делает теневую копию - не копирует строки и референс тайпы а копирует их ссылки. И нахуя такой авторефакторинг предлагать спрашивается?
>>2450388 В данном случае да, так как они инстанцируются один раз при загрузке класса. Объекты лямбд же у тебя будут создаваться каждый раз при вызове такого метода логгирования. Ведь чтобы сбилдить строку, зависимую от аргументов, ей придется эти аргументы замыкать. Ну если только ты туда не хочешь статическую лямбду передавать. А это тупо, так как в таком случае проще строку один раз собрать и не париться с какими-либо лямбдами.
>>2450468 > Объекты лямбд же у тебя будут создаваться каждый раз при вызове такого метода логгирования Ну значит создать делегаты под каждый случай по одному разу и передавать их, а не лямбды.
Как ни крути, получается бойлерплейт, проще не ебать мозги и юзать иф.
>>2450382 > я аутист с некропк, который предпочитает писать в блокнотике и кокомпилировать ручками Ну и не ставь студию, пиши в блокноте, компилируй через C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
>>2450501 Не, пусть ставит дотнет 6 и вс-коде. Конпелирует пусть через dotnet run / dotnet build / dotnet publish. Я так делаю на своей некропеке, базарю, всё летает, ещё захочеш!
Какой самый эффективный способ сделать string.format без аллокации?
Пока вижу только вариант использовать один экземпляр StringBuilder. И его метод: AppendFormat(String, Object, Object, Object)
Предварительно все аргументы привести к строке, чтобы избежать боксинга. А если аргументов больше 3х, ну придется аллоцировать, хотя в обычной ситуации больше 3 и не надо.
Аноны, скажите пожалуйста вот у меня есть реквест ентити в фориче, разве ентити не оптимизирован так что он сначала будет создавать команду для базы, а потом когда дойдет до SaveChangesAsync вытянет все и и сделает одной командой?
мне говорят что ентити будет делать 100 реквесто в базу, я считаю что убдет делать 2, кто прав?
>>2450715 Если уж так горит сделать с минимумом аллокаций, то можно string.Create заюзать. Правда придется сначала вручную вычислить длину финальной строки, а потом же вручную копировать span-ы строк аргументов в span финальной.
>>2450778 > Типичное зумерье, которое верить, что чем ниже язык тем производительнее. Чем более низкоуровневый язык, тем меньше накладных расходов. > Что не ассемблер? А может сразу машинный код? Ты дурак? Ассемблер это набор мнемоник для машинных кодов.
>>2450781 >Чем более низкоуровневый язык, тем меньше накладных расходов. только есть тонкость. растет сложность и в итоге компилятор рождает более эффективный код, чем человек.
>>2450783 В случае с написанием кода на ассемблере компилятор сей действительно скорее всего родит более эффективный код, однако к более высокоуровневым языкам это не относится. А про интерпретирумые вроде шарпа и речи не идёт.
>>2450784 Как бы net-ий MSIL перед выполнением каждого метода собирается JIT'ом в машинный код. Классической интерпретации уже давно нет. Плюс JIT потом может пересобрать методы с большим уровнем оптимизаций. А так как JIT имеет доступ к статистике исполнения кода, то он может сгенерировать код более эффективный, чем выдал бы AOT-компилятор. Как пример, в рантайме JIT может убедиться, что у интерфейса есть только один класс, его реализующий, и выполнить девиртуализацию вызова.
>>2450778 >Эффективно юзать буфер из массива байт, а потом его привести в строку (не просрав кодировку). Так стринг билдер этим и занимается. Нахер городули городить? Еще и медленнее получится.
>>2450784 > В случае с написанием кода на ассемблере компилятор сей действительно скорее всего родит более эффективный код Дядь Вась, ассебмлер это И ЕСТЬ МАШИННЫЙ КОД
>>2450832 > нихера не понимаешь Прочитал треть, дальще стало скучно. Понял, что майки продолжают совершенствовать шарп и оптимизировали компилятор. Молодцы, чо. Спасибо.
>>2450931 > с написанием кода на ассемблере компилятор сей действительно скорее всего родит более эффективный код > то есть прессуппозицией является то, что ассемблер это язык, который подвергается анализу, а не просто перекладываемый 1:1 в байт-код процессора И какое же слово я прочитал неправильно?
>>2450966 Да, все таки жопочтец. Я имел в виду, что код написанный на си, и скомпилированный в машинные коды скорее всего будет столь же или даже более эффективным, чем код написанный вручную на асме.
>>2450989 жопочтец как раз ты. где я спорил с ЭТИМ тезисом? Я спорил с тем, что ассемблер не перекладывается 1:1 на нативный процессорный язык, а не с тем что сишный код будет быстрее за счёт всяких Спанов и прочьего. Не надо мне приписывать того, что я не говорил.
>>2451006 Тоже сначала так считал, пока не стал замечать в кодах лямбду в лямбде, лямбдой погоняя. В итоге уже на хрен знает какой ступени теряешь понимание что вообще тут происходит.
Да, опять программисты плохие, язык хороший, но язык способствует такому синтаксису и люди это делают. А лямбда должна быть короткой и понятной, а не размазанными кишками бизнес логики
>>2451017 >в кодах лямбду в лямбде, лямбдой погоняя. ну в обычном коде - ссзб. а в DSL это просто пушка. >>2451021 ну да. делали "свою жаву" и потому много изначально не сделали нужного, а потом уже впихивали как придется - IReadOnlyList, nullable, $"", [^1]...
>>2451022 >вроде синтаксис такой же, стрелка и скобачьки. которые можно не писать если у тебя один параметр, да и сам параметр можно не писать. и вынести тело ламбды из вызова в блок, если ламбда параметр последний (такое еще в руби и руби силен именно DSL). Да и сигнатура выглядит приятнее
Func<string, int> vs (String)->Int
и поскольку там есть инлайн, ноинлайн, кроссинлайн жуть, то для них есть и возможность указать ретурн с точным указанием из чего ты делаешь ретурн.
А еще там есть скоупы - то есть допустим ты определил расширение к string типа "".Md5() Так вот ты можешь сделать скоуп - и только в нем будет доступно это расширение и больше нигде.
Результат этого - jetpack compose прямой которого эквивалент на шарпе выглядит бы коряво, да и работал бы не так
>>2450996 Чел, видимо ты ни разу в жизни OutOfMemoryException не ловил. Может быть для твоего легасного проекта с 1 rpm это и не важно и преждевременно, но когда начинается настоящий хайлоад приходится выкручиваться и писать allocation free код.
>>2451049 >А что не так? они внедрены ПОЗДНО, а значит их впихивали "как получается", а не по нормальному. как итог IList не наследуется от IReadOnlyList можно побухтеть про Interface Segregation Principle, но по факту у тебя по коду ходит Ilist и ты не можешь передать его просто туда, где ждут IReadOnlyList. А ведь именно так и правильно ожидать, то есть делать минимальный контракт. Но это неудобно и потому народ так и продолжает гонять везде IList по методам (я не из таких - у меня контракты жесткие и мне неудобна)
nullable же пришлось вводить как хинтинг. Можно конечно попробовать трактовать как ошибки, но это создаст свои проблемы - я пробовал Threat Warnings As Error и в итоге выключил нахер.
>>2451035 > там есть > есть и возможность > А еще там есть Но энивей это жаваподелие, которое тянет за собой жаварантайм. Странная придирка из треда, который аналогичный рантайм за собой таскает, но всё же. Присматривался к котлину. Вроде неплохо, но что-то смущает.
>>2451061 > который аналогичный рантайм за собой таскает я выше писал. срать на таскание рантайма - он везде большой и его можно установить и бинарник будет маленьким. беда котлина это жава рантайм - нет типов, нет структур. сильная сторона - синтаксис и фичастость. у шарпа синтаксис лучше жавы, но все многословнее и топорнее чем у котлина.
>Странная придирка из треда, Что поделать. Когда пишешь на нескольких языках, то постоянно в каждом языке "блииин ну почему тут так не сделали, удобно же"
>>2451038 Ну, допустим у меня на моем проектике - 10к+ rps. Сервер для взаимодействия с устройствами. Устройства подключаются, висят на сервере подключенные, с ними может как сервер взаимодействовать так и кто-то извне что-то делать через сервер. Юзал лямбды активно. Относительно потребляемой памяти. 100к единовременно подключенных и висящих устройств и 10к клиентов что с ними работают. Трафик под 100Гб/с 2 ГБ оперативки. Хуй знает короче. Я не то чтобы оптимизатор какой-то там. Единственное что делал оптимизатроского - свой буффер и пул для работы с памятью, ну и не юзал я этот вот хост который сейчас майки используют, а просто сделал свой, кек, в котором только то что мне нужно было. Но вот так вот. OutOfMemoryException за два года непрерывной работы хуевины - ни разу не было ни на одном из объектов где оно крутится.
>>2451429 > маршаллить её результат в C# Я чекал вариант с dll на сях. Да, сявый код работает быстрее, но эта скорость нивелируется ценой вызова функции из dll
Эй, шарпчане! Почитал ваш тред, интересно. Сам вот недавно только осознал, шо свято хочу изучить этот язык. Начал, вроде все прикольно, интересно. Изначально, ещё при выборе языка, даже не думал, о работе в этом направлении, а вот теперь встал вопрос. Есть ли здесь аноны, которые РАБотают именно с этим языком на РАБоте. Пилите стори: какой функционал выполняете? Сколько зарплата? Насколько сложно было найти работу и т.д. да и в принципе, насколько сложна сама работа? Я имею ввиду переработки, сроки, пиздюли от начальства, ну и вот это вот все. Понимаю конечно, что в этом вопросе у каждого субъективная точка зрения, но все же... Просмотрел ютуб на эту тему, но там чёт все как будто через розовые очки, а мне хотелось бы услышать более реальные истории. Я захотел обучаться этому всему не из-за историй 300к/сек. А как просто смена профессии. Сам работаю с ебучими людьми в продажах и откровенно говоря - заебало. Толпы ублюдков, которые чем-то не довольны. Ух сука, ненавижу клиентов, а недавно меня ещё и на руководящую должность сунули и теперь я ненавижу ещё и сотрудников. Ну и я решил кардинально сменить тип деятельности. В общем анонасы, рассказывайте. Если я вдруг не по адресу и у вас тут за подобные вопросы шлют нахуй, ну чё....пойду нахуй отсюдова
>>2451451 >Есть ли здесь аноны, которые РАБотают именно с этим языком на РАБоте Полтреда работают, еще половина вкатывается. Сам я вкатился уже как 1 год и 15 дней (без 15 минут 16 дней). Но первые 10 месяцев были очень хуёвыми т.к работал на заводе программистом, платили мало и обучался всему сам с помощью гугла и стековерфлоу
>какой функционал выполняете? Ну сейчас веб-апи пишу для всякого калового говна из жопы, скучно пиздец. Ищу вакансии чтобы обратно перепрыгнуть на десктоп, а то заебал веб.
>Сколько зарплата? 60к
>Насколько сложно было найти работу Буквально за 2 недели нашел после выпуска из ПТУ и психиатрической больницы чтобы не идти в армию.
>Сложна сама работа Всё подозрительно легко. Ну это потому что веб-апи писать просто там особых скиллов не надо. Переработки иногда бывают, но в основном по моей собственной инициативе если что-то интересное появляется. Кабан-кабаныч не давит, не выёбывается, всё тихо и спокойно по человечески.
>>2451451 > Насколько сложно было найти работу Главное, чтобы у тебя было что показать. Это как минимум пет-проекты. Тогда работу найти не сложно. Конечно, ещё нужно будет знать основы, чтобы пройти собеседование. Но если увидят, что ты знающий чувак, есть опыт разработки, то без проблем возьмут.
>>2451035 >ну в обычном коде - ссзб. а в DSL это просто пушка. В том то и дело, что в обычном коде этого стало полно, а DSL оказался перехайленным костылем, где как как его писать знает только автор самого DSL. Ну типа там вообще нет никакой возможности задать какие-то условия, типа обязательные поля или нет, ну и сохраняется возможность загадить все простым кодом.
Проще взять какой-то json или toml, так как доку все равно придется писать.
>>2451035 >и поскольку там есть инлайн, ноинлайн, кроссинлайн жуть, то для них есть и возможность указать ретурн с точным указанием из чего ты делаешь ретурн. Это вообще обязательный костыль, ибо ритёрн выйдет не из последней лямбды, а из всей цепочки и самого метода, лол
Котлин кажется красивым пока не начнешь нюхать все эти костыли. DSL огрызок и попытка от реального DSL, на деле проще взять json чем этой имитацией баловаться. Функции кажутся крутыми на деле приводят к импорту со звездой (один хер в одном файле группированы, можно было и статик методами сделать, да, статик нет, есть отдельный костыль какой-то).
Ну, в общем, кажется все вроде круто, но потом понимаешь что шарп кратно лучше продумал и продизайнен, а все это жабо наследие на котором придется писать, это отдельная тема для трэш треда (даже сколько радости приносит тот же грэдл)
>>2451552 >а DSL оказался перехайленным костылем, где как как его писать знает только автор самого DSL. А для использования любой сторонней библиотеки на любом языке тоже без доки никуда. Так устроен мир и без DSL. DSL лишь позволяет удобнее выражаться. Тот же LINQ - тоже DSL на уровне языка, но ты же не назовешь его хайпом )
>ну и сохраняется возможность загадить все простым кодом. ну на то он и DSL чтобы быть именно кодом. Просто с более простым выражением
>>2451553 >Это вообще обязательный костыль, ибо ритёрн выйдет не из последней лямбды, а из всей цепочки и самого метода, лол дается возможность - дается и инструментарий. У всего есть достоинства и недостатки. Получаем настоящую инлайновость и плюшки от этого - взамен получаем необходимость строже выражать свои мысли. Всего то достаточно просто указывать и проблем не будет.
>Функции кажутся крутыми на деле приводят к импорту со звездой вообще хз о чем ты. Причем тут функции до звезды? да и вообще проблема где? в шарпе ты делаешь импорт неймспейса который аналогичен звезде.
Поначалу меня бесило когда копируешь код с SO, а там импорты не указаны и он найти не может и ты не можешь понять что ему нужно. Но... в asp.net с его service.Add та же самая херня. Да и не только с ним - мелкие пошли по пути "делаем через расширения" и без гугления не разберешься какую либу подключать и неймспейс чтобы код перестал быть красным. Хорошо, когда знаешь какую. Ну так и в котлине тоже та же ситуация.
> что шарп кратно лучше продумал и продизайнен ну это уже вообще смешно. шарп родился как жава, а потом стал обрастать уже к этой основе как придется. продуман ха - нулабилити не было изначально. - $"" - [^1] - IReadOnly* - нельзя сделать расширение для статических классов - ConfigureAwait(true) - event. идея понятна, реализация понятна, но разве она удачна - инлайновость (да нет ее и вот с логированием выше разговор был) - свойства. не хочешь автосвойство - будь добр пиши полную портянку. - нет val, только var ...
У шарпа свою плюшки, но продуманность синтаксиса и базовых фич к ним не относится.
>а все это жабо наследие на котором придется писать не технически для меня, НЕ УЧИВШЕГО жаву, все наследие упирается в - да гребаные дженерики. на деле я просто не сидел и не разбирался. - нет структур, а я как то привыкши думать об экономии памяти. и нулевое вникание в "как там у жавы"
>>2451553 >шарп кратно лучше продумал и продизайнен, ... - рекорды с его with когда появились только - многострочный текст запарился ждать когда завезут - main без класса Program - крайне сомнительная хрень, постоянно забываю галку ставить в студии - if и остальные ничего не возвращают. - нет изначального разделения на мутабельные и риоднли списки, словари и т.д. Никакой строгости - все используют if - даже контрактное программирование не взлетело лол. Кроме как в фреймворке нигде и не используется. ... (да ебу... иконки мешающие набирать этот текст. Какой идиот придумал делать их поверх текстовой формы....)
>>2451592 >нулабилити не было изначально. Нефига ты мечтатель для языка которому 20 лет. Если в котлине покапаться, он там тоже местами через одно место, благо в шарпе это опционально.
>нет val, только var Тот еще звездец, который котлинисты признают. А вот нужна ли иммутабельность для мультипарадигменного языка (а не лиспа) это долгий спор.
>нельзя сделать расширение для статических классов Зачем? Расширение то еще зло, которое нужно использовать осторожно.
>статических классов В котлине вообще какая-то байда.
> свойства. не хочешь автосвойство - будь добр пиши полную портянку Видно что свойство это отдельный элемент, а в котлине до сих пор не могут в приватные сеттеры, потому что авторы думали что умнее других.
>$"" Вот как раз продуманно, ты задаешь контекст для строки, ты бы видел как раньше в котлине нужно было символ "$" писать и нельзя было по другому, потому что все строки интерпритируются (а я не хочу чтобы все!). В этом и продуманность
>>2451598 Списки и всякие мапы - это такие динамические "резиновые" структуры, если список сделать неизменяемый, это уже будет не список. В общем, вся это дрочь на иммутабельность, она ломает идеи структур данных. Там где тебе нужен массив ты берешь какой-то выдуманный замороженный список.
>>2451600 >Нефига ты мечтатель для языка которому 20 лет ну так я и НЕ заявляю что он хорошо задизайнен. задизайнен он паршиво как и жава, просто потом засахарился и оброс полезными (и бесполезными) плюшками. Но основа осталась какая осталась
> благо в шарпе это опционально. ну как и в котлине тоже есть lateinit и !!. разговор о том, что это пришло через многие годы. и такая ситуация именно потому что слизывали жаву. а не продумывали
>Тот еще звездец, который котлинисты признают это признают все, кто достаточно много кодил и начал понимать ценность строгости контракта. Когда язык защищает от ошибок. А то ведь так можно и константы мутабельными сделать - ну а почему нет
>Зачем? Расширение то еще зло, которое нужно использовать осторожно. Чтобы не плодить своих классов ClassEx.Mymethod - раз. Ну и еще для одной штуки что используется в композе, но я щас не вспомню. А насчет зла - ну мс идет по пути зла. раз пихает расширение где угодно. Пример хттпклиент и его функции жсон.
>В котлине вообще какая-то байда. угу. я хейтил пока не разобрался. там синглтон классы object и companion object - буквально "приаттаченый к классу сигнлтон класс без имени". А раз это класс, то и все возможности класса - те же расширения
>Видно что свойство это отдельный элемент я про backfield, который не зарезервировали и приходится каждый раз прописывать вручную свойство, если оно не авто (что довольно часто)
>а в котлине до сих пор не могут в приватные сеттеры хз о чем ты. использую их на постоянной основе.
>(а я не хочу чтобы все!) ну это уже спорно и на уровне фломастеров.
>это уже будет не список нет. это будет списком. в котором нет "риоднли не значит что он иммутабелен".
>она ломает идеи структур данных >Там где тебе нужен массив ты берешь отвратительные идеи. есть четкое логическое разделение на мутабельные, иммутабельные и поверх них риоднли + перечисляемость, то есть строгое определение контракта
А что в шарпе? а в шарпе IList (который не наследник IReadOnlyList лол) и Array... в итоге (у 99% шарпистов) метод принимает Ilist, потому что "так привычно", ты передаешь ему массив и оно валится в рантайме. Строгость контракта уровня "мы шарп, нам нинужны никакие контракты" (что видно по тому что Contract.Requies() так и не пошел в массы)
>потому что есть тернарный оператор! вообще не замена. вложенные ифы выглядят как катастрофа. а обычный иф требует заведение внешних переменных
и возвращаемость настолько "не нужна", что в новом switch именно ее и сделали и все ей пользуются )
>В кокотлине выкинули классический for ну я выдвигаю претензии к шарпу как шарпист. Я не хвалю котлин (в котором тоже хватает WTF), а жалуюсь на шарп. И стараюсь избегать сравнения фич которых нет в шарпе. И var/val, иммутабельность, выражения я упоминаю не потому что они есть в котлине. Я имел эти претензии еще до изучения котлина.
Я не говорю про иммутабельные типы что там в System.Collections.Immutable - это вообще отдельные структуры для многопотока.
Я говорю про строгость, что я могу указать принятие неизменяемого списка и быть в этом уверенным. IReadOnlyList такой гарантии не дает. Принимать массив? У кодера по всему коду списки ходят и материализовывать в массивы только чтобы угодить очередному методу- лютая дичь. В итоге и родился подход создания защитной коллекции в самом методе/конструкторе потому что нет на уровне языка средств гарантий.
И когда добавили IReadOnlyList , то пользоваться им все равно неудобно (от него не наследуется IList), что все так и продолжили использовать IList
В шарпе много хороших вещей, но тут создатели знатно обосрались.
>>2451621 > от него не наследуется IList), что все так и продолжили использовать IList Я уверен, что они оба реализуют IEnumerable<> вот прям настолько уверен, что даже гуглить не полезу. а раз реализуют, то вот бери и объявляй IEnumerable<YoItemType> YoVar = BazTask.GetList();
>>2451627 Не всегда удобно, чтобы метод принимал именно IEnumerable, так как а) Вместо коллекции могут подсунуть бесконечный генератор б) Твоему алгоритму нужно выполнить двойной обход коллекции. С произвольным IEnumerable можно таки поломаться.
>>2451612 Кривой дизайн -Везде автовывод, без IDE нечитаемо. -Кривая асинхронщина, читаемая только с IDE -Иммутабельность только для ссылки, когда у тебя все мутабельно, для додиков сойдет, ФП-господа ржут с этого. -lateinit говнофикс с магией, потому что иммутабельный дрочь не до конца заходит в императивную разработку. -val, жесть. -магия с автокастом, в божественно шарпе надо явно указать новую переменную, никакой магие, все явно. -отключение нуллабельности, не всем этот развод "на миллион долларов" заходит, когда у тебя вся типизация умножается на два. -!! говнофикс, что так ты упадешь с НПЕ что так. -Мешать процедурный стиль с ООП это плохо, еще в 90х к этому пришли и именно жаба себя ставила противовес С++, указывая на то что нет функций. -100500 зарезервированных слов, там звездец.
Выкинул на помойку, когда у меня сломался код (год спустя), когда компилятор вместо метода стал дергать базовую функцию расширения (то ли let, то ли run... хз туча их там) и ругать меня за то, что сигнатура не совпала, лол.
Там еще тонна говна, которого я не помню, просто надергали говная с груви, скалы и шарпа и ботинком прибили - и так сойдет.
>>2451649 Ну вообще ide не обязательно, чтобы увидеть, что метод обозначен как suspend, так что это придирки на пустом месте. Вообще на котлине вне idea вряд ли кто-то будет писать, раз уж это целиком и полностью продукт jb, как собственно и на сишарпе писали только в студии пока райдер не вышел.
>>2451633 как и все остальное - не дает гарантию неизменяемости.
>>2451636 мы вроде в шарпотреде и должны обсуждать недостатки шарпа, а не котлина. И уж тем более не натягивать сову на глобус >-Везде автовывод, без IDE нечитаемо. в шарпе идентично. var, вывод типов, без IDE не понять откуда взялся класс ибо неймспейсы это как import * >Кривая асинхронщина, читаемая только с IDE да нормально читается. я в основном читаю код на планшете без всяких IDE. хз причем тут вообще IDE для читабельности >Иммутабельность только для ссылки, когда у тебя все мутабельно какие то фантазии. риоднли список он реально ридонли. он заморожен и гарантируется что не будет изменен. И это не на уровне ICollection<T>.IsReadOnly, а я могу описать сигнатуру >-lateinit говнофикс с магией null! говнофикс )) в чем разница? ты определенно не понимаешь разницы между иммутабельными типами для многопотока (которые на самом деле мутабельные) и frozen-коллекциями которые в обычном однопоточном коде (я все время говорю о вторых) >-val, жесть. я так понимаю конкретных аргументов против не будет. Любой аргумент против val - все равно что аргумент против использования констант как oneinit вещей. >-магия с автокастом сложно оценить проблемность. мне это тоже не нравится, но проблем не испытывал >!! говнофикс null! никакой разницы. если ты используешь его как "отвали с варнингами" то ссзб и в шарпе упадешь с NRE аналогично. А так это просто фикс когда тебе виднее, а анализатору нет. >Мешать процедурный стиль с ООП это плохо это нужно DSL. даже MAUI если не будут тупить будет использвоать static using чтобы было похоже на процедурный стиль и избавиться от многочисленных new
>>2451649 >Нужна IDE чтобы увидеть что метод асинхронный зачем это видеть? что это дает?
напомню - я наезжаю на шарп в шарпотреде (на тот самый шарп на котором я пишу с его рождения, а на котлине всего чуть), и нападать на котлин в шарпотреде....
>>2451633 Ты немного не в теме обсуждения. Мы тут выражаем недовольство, что ICollection<T> не реализует IReadOnlyCollection<T> в силу исторических причин. Это бывает временами очень не удобно, и припятсвует распространению этого интерфейса. А он как раз очень удобен для использования в конкрактах методов, так как даёт всем понять, что коллекция меняться не будет. Анон предложил использовать в таких местах IEnumerable, но у него есть подводные камни, о которых я и написал.
Как по мне, выходом, пусть и корявым, могло бы стать добавление в ICollection<T> метода IReadOnlyCollection<T> AsReadOnly(). В нем можно было бы возвращать саму коллекцию, если она поддерживает IReadOnlyCollection, либо объект-обертку. Но на это тоже скорее всего не пойдут, так как даже добавление новых методов в столь древний и широко используемых интерфейс дело очень болезненное. Так что остаётся только городить свои методы расширения.
>>2451656 > мы вроде в шарпотреде и должны обсуждать недостатки шарпа, а не котлина Ты попался на дерейл олух! олух! Ты попался на дерейл, глупый дурачок! Рекомендую игнорировать котлиномразь, закатившуюся в тред, а если не прекратит, начнём репортить.
>>2451667 ясно. значит закрыли вопрос. вместо вменяемых аргументов в защиту шарпа ты стал нападать на другие языки, хотя котлин был просто для примера "что такое, когда язык продумывали все таки, а не "так исторически сложилось"" и почему это может быть удобно"
Но ты не понимаешь даже недостатка Ilist, а претензия к val вообще занавес
>>2451670 Ты используешь самые примитивные подходы в демагогии, поэтому хватит косить под несведущего дурочка, мы не в джава треде, тут так просто не разведешь никого.
Шарп это язык общего назначения, котлин прокси-язык жабы, который кроме мобильной разработки практически нигде не прижился. Жаба протухла, не носи её сюда.
>>2451674 >Шарп это язык общего назначения И????? это как то оправдывает кривые решения в нем? кривые решения бывают везде. это нормально. просто нужно трезво смотреть на вещи, а не защищать с пеной у рта, и уж тем более не объявлять что именно так и правильно аргументами уровня "а мне норм".
> котлин прокси-язык жабы, который кроме мобильной разработки практически нигде не прижился. не знаю почему ТЫ так вцепился в котлин ведь претензии к шарпу от шарписта (я шарпист - это мой основной язык, а котлин чисто замена хамарина на мобилках для меня), но аргументы уровня "ваш язык говно потому что говно". Котлин молодой язык, а жависты - дикие консерваторы мазохисты, ведь столько лет пишут на убогом языке и их не парит. Вооо. на тебя похожи ))). Любой недостаток разбивается об "а мне норм"
Напомню - шарп до некоторого времени тоже мало где приживался ибо был виндоонли язык, а всякие моно это был страх и ужас. Только после выхода кор, и то не сразу, началось расширение шарпа в использовании
>Жаба протухла, не носи её сюда. к жабе у меня такие же претензии как и к шарпу (у них же одинаковый изначальный дизайн).
>>2451681 ты сам ее принес на мой список претензий к дизайну шарпа ты списком претензий к котлину (причем высосанными из пальца). Про котлин от тебя я уже наслышался и про жаву тоже. По шарпу есть че сказать то? ну кроме "мне норм, а значит так правильно"
Уже больше года замечаю сишарп фанбоя, который всей доске пытается доказать, что в шарпе нет никаких недостатков, в то время как в жабе, котлине и расте их просто уйма. Ну и еще с рейтингами techempower носится, в которых asp.net быстрее перегоняет плейнтекст, чем фреймворки на расте или го. Но ничего, сейчас школа началась, сегодня только линейка, а завтра уже уроки, так что уровень неадеквата снизится.
Анон, я правильно понимаю, что ASP.NET Web API — это урезанная версия ASP.NET MVC? И если выучу первое, то буду понимать и второе? Я смотрю большая часть курсов по MVC, а в вакансиях обычно Web API, вот думаю не выучу ли не то в итоге.
>>2451822 > работает - да чувак, Thread.Sleep не просто не эффективно, но ещё и НЕ работает. Как ты, например, будешь Ctrl+C (то есть токены отмены) обрабатывать?
Без холивара по типу у кого какие скобки красивее или классы статичнее. У кого сейчас больше будущего? У котлина или шарпа и главное почему (ваше мнение)?
>>2451827 .NET офк, вот почему: 1. Котлин живет потому что живет Джава 2. Джава живет потому что много легаси 3. Легаси переписывается на упругий Go и .NET 4. Меньше легаси - меньше джавы - меньше котлина
Но, у котлина есть своя ниша, которую .NET пока что не занять - это мобилки под андроид. Но тут майки просто долбоёбы не хотят нормально линукс поддерживать.
>>2451818 хотя вижу родной метод GetByteCount такой же бестолковый. Я не знаю что он делает в наследниках, но в базовом классе превращает текст в массив чаров зачем то (и это из Span<>)
>>2451827 у обоих. языки не связаны. шарписту незачем переходить на котлин. шарп - один из лучших современных языков
котлин будет занимать нишу гугель никого не заставлял писать на котлине. просто объявил его еще одним офф языком разработки - и как результат люди сделали свой выбор. но жава будет сверхдолго сопротивляться в силу инерционности жавистов и оверхеда котлина при компиляции
>>2451829 надо, но проблемы нет. Как вот в видео про обнволятор killall /f остановит все.
>>2451813 Не анон. Я как раз не знаю длину строки. Изначально я хотел передавать в пакете байтов инфу о размере одного символа и количестве символов в строке, но анон >>2451801 написал, что размер символа вариативный. Так что да, буду предавать данные об общем размере в байтах.
Просто почему я по первому пути пошел, потому что у меня еще передается и массив интеджеров, к примеру.
>>2451809 То есть и там и там внутреннее устройство именно бэка будет одинаковое? Как подключается база, как идет работа с зависимостями, репозитори паттерн и вот это вот все.
>>2451838 ну да. просто генерация вида уносится на фронт (если она конечно есть эта генерация вида. а не просто данные ради данных) ну и подход к авторизации будет немного другой, а в остальном идентично.
>>2451836 > надо, но проблемы нет Вообще есть. Graceful stop это обязательное условие для части сервисов. > Как вот в видео про обнволятор killall /f А, ну ясно, понятно
>>2451844 >Graceful stop это обязательное условие для части сервисов. такое требование только к сервисам написаное прямыми руками. К тем, кто юзает sleep вместо таймера, это не относится.
>>2451849 разницы нет. мне, условному жависту, придется его выучить и только потому что кто-то объявил его предпочтительным? это так себе аргумент. правда, ЭТО АНДРОИД. а там жава немного совсем не та жава, что полная и выбор сделать проще.
>>2451831 >Легаси переписывается на упругий Go и .NET Жаба легаси (хотя что считать легаси) в основном и дальше продолжает жить на жабе, иногда перекатываясь на 11 или даже на 17 версии, иногда впиливая котлин в проекты, просто потому что проще и дешевле оставить все как есть, чем вкладываться в переписывание с нуля на го, так как под это дело нужно целую команду собирать. На дотнет ничего не переписывается, так как реальный перформанс по итогу будет почти что одинаковым, увы, так что жаба будет жить дальше десятилетиями.
>>2451831 >которую .NET пока что не занять Андроид на дотнете никто никогда писать не будет, для этого нужно будет обеспечить полную совместимость с либами жабы и котлина, иначе он попросту никому не нужен будет, что мы сейчас и видим.
Котлин такой же язык общего назначения, как и шарп, можно и мобилки, и бек писать, и даже фронт с нативщиной.
>>2451871 У котлина нет своей JVM, котлин топит джаву и сам вместе с ней идет на дно. Сами джависты не хотят за одну зарплату писать на двух языках, а мобильники слишком узкая ниша. JVM все, надо было развиваться.
Здравствуйте, можете, пожалуйста, скинуть какой-нибудь материал, чтобы почитать про Ковариантность/Контравариантность. Я в общих чертах понял, но вроде нихуя не понял. читал на метаните
А че кроме этого есть еще что-нибудь? Еще же было что-то для вин10, не очень популярное Может еще какой способ интересный есть чтоб графическое приложение напиать мимо-вкатываюсь-обратно-после-армейки/нихуянепомню
А точно, а кроссплатформу никак не сделать на этом?
>>2451925 Есть мертворожденный uwp и совсем новый maui, но они в целом построены на тех же принципах, что и wpf. Знаешь последний, считай что знаешь и остальные два. И по wpf лучше всего будет навернуть уроки шмачилина на ютьюбе. Затем отполировать троелсеном, у него рассматриваются некоторые продвинутые вещи. Для джуна этого хватит.
>>2451929 >uwp Точно. > maui На MAUI реально можно написать норм приложение разом для всех мобилок? > по wpf лучше всего будет навернуть уроки шмачилина на ютьюбе. Затем отполировать троелсеном, у него рассматриваются некоторые продвинутые вещи А за это двачая
>>2451877 >котлин топит джаву и сам вместе с ней идет на дно >джависты не хотят за одну зарплату писать на двух языках >мобильники слишком узкая ниша >JVM все Спасибо, посмеялся. Пиши чаще, techempower-шиз.
>>2451925 Для десктопной кроссплатформы есть Avalonia.
>>2451935 >На MAUI реально можно написать норм приложение разом для всех мобилок? Можно, но никому не нужно. Все равно 99% пилят натив, в крайнем случае на Флаттере или Реакт Нейтиве делают что-нибудь на отъебись.
>>2451966 >>2451971 А знаешь что самое прекрасное, что котлин это не их проект. Им даже париться не надо над ним, да и вообще там свой дарт есть, сразу в фуксии. Поматросили и бросили.
1 долгий запуск. На современных девайсах не так заметно, но вот мой старенький планшет с MediaTek MT8732 8+ секунд для хелло ворлд. На моем старом смарте - 15 секунд было.
2 ограниченность функционала вида "да блин как тут сделать"
на старте решил взять хамарин, там все похоже на WPF ну разве что глюки (ну а где их нет). слепил и нужен был мне вроде был все виды клика в гриде. И бац - не работает лонгклик. Вот прост работает, а конкретно там внутри грида, внутри чего то да в комбинации с другими кликами не хотело. Гуглю - а там пишут "не реализовано, но вы можете сделать поддержку сами". Давно было дело, но как то мне это сразу не понравилось и как раз появился первый альфа compose, где все было чудесно (если конечно не считать необходимости изучения котлина). Не текущий момент я в восторге (но да, заплатил за это изучением котлина, что совсем не мелочь. Язык имеет огромную выразительную мощь - но это же является и недостатком. И очень весомым. Я бы не рекомендовал так грузить голову)
3 больше жрет памяти и больше весит. хотя на это всем плевать как бы. Просто я имел возможность сравнить абсолютно идентичное мое приложение которое я портировал. В нативе на стареньком MT8732 работает пошустрее визуально, то есть весьма приемлемо.
в общем то вряд ли это проблема на текущий момент.
Погоди, а на Фуксии какой язык основной? Не Котлин разве? Кстати, где Фуксия? Я уже год не слышу этого названия. А про неё говорили уже много лет назад
>>2452144 Зумерье не в состояние отличить что такое ниша разработки и продукт. Если Гейтс самый богатый человек, который заработал на винде, которая на сях, значит си самый популярный язык? Так в ваших поридж мозгах работает?
Имелось ввиду мобильная разработка под нишевое железо (ARM) и нишевую операционку (андроид), под нишевую виртуалку (Dalvik)
>>2452431 ну если не брать старое в виде жавы, фрагментов, хмл разметки, руннеры, асинтаски и прочую херь, а взять все последнее, то писать не просто неплохо, а даже приятно
дяди и тети, скажите, нужно ли задротить задачки типа (и более сложные подобные)
C2.4. Найти: а) сумму кубов всех целых чисел от 20 до 40; б) сумму квадратов всех целых чисел от a до 50 (значение a вводится с клавиатуры; 0<a<=50); в) сумму квадратов всех целых чисел от 1 до n (значение n вводится с клавиатуры; 1<=n<=100); г) сумму квадратов всех целых чисел от a до b (значения a и b вводятся с клавиатуры; b>a).
>>2452658 Конкретно те что ты написал - ты должен изи делать по хорошему.
> (и более сложные подобные) Нужны примеры.
Вообще, ты НЕ обязан знать математику, если ты про это, т.е. вот те задачки что ты скинул - это чисто проверка того, что ты умеешь писать простые циклы, а не знания математических определений. Что такое сумма кубов ещё любой дурак знает, но если будут какие-то более ебанутые задачи где ты чисто математические термины не понимаешь - то скорее всего автор задач даун
Вы вообще, сидящие тут в треде, работаете? Че то бесконечные рассуждения о том какой язык лучше, какой язык сдохнет, а практические вопросы все игнорируются
>>2452718 > https://c-sharp.pro/задачник/ Посмотрел, все решать смысла вообще нет. Может 1-2 задачи в каждой теме решить и все, там где тяжело побольше.
Но, повторюсь, если сложности с математикой в какой-то задаче - забей на нее.
А че почитать про асинхронность? Я понимаю синтаксически как её использовать, знаю, что там компилятор делает класс стейт машины которая сохраняет все нужные данные.
Но я не очень понимаю контекст сихронизации - я же правильно понимаю, что в фреймворках которые её поддерживают в какой-то(в какой?) момент в основном потоке срабатывает какая-то функция и в ней выполняются все куски между авейтами?
И мне нужно больше практических примеров использования, типа лучшие практики там хз, вот такое где посмотреть?
>>2452790 Приведу аналогию Допустим ты пишешь на тасках в стиле Task.Run() И ты пишешь продолжения вида task.ContinueWith(). Где будут выполняться эти ContinueWith? А за это отвечает TaskScheduler, который можно передать свой или же будет использоваться дефолтный (который пихает в тредпул эти продолжения)
await та же фигня только сбоку await разбивает код на цепочку "продолжений". И вот за то, где выполнять эти продолжения и отвечает SyncronizationContext. Семантически он ведет себя как TaskScheduler для тасков.
await-ер захватывать текущий SyncronizationContext (если он есть конечно) и если сказано его учитывать ConfigureAwait(true), то все выполнение делегируется ему, иначе тредпулу.
Это самый обычный "выполнятор" как и TaskScheduler, которому можно передать делегат продолжения, чтобы он его выполнил как хотел. GUI создает свой SyncronizationContext и устанавливает через SynchronizationContext.SetSynchronizationContext, а дальше уже механизм await сам будет его захватывать и работать с ним.
Ты можешь и сам создать свой контекст - сделать наследника SyncronizationContext в котором создать поток, впилить туда BlockingCollection и все поступающие делегаты туда запихивать, а твой поток будет перемалывать их все в 1 потоке. Собственно вот ты и сделаешь так свой простой UI контекст.
Здравствуйте. Подскажите пожалуйста по одному вопросу: были ли на вашей практике примеры, когда человек без опыта и в возрасте подходящем к 30 начал карьеру сишарп разработчика?
Я просто под гнетом обстоятельств решил сферу деятельности поменять, ну и спустя месяц мытарств пришел к выводу, что наиболее реальный вариант сейчас это 1с. Но мне до ужаса не хочется туда лезть, ибо бухгалтерия и все в этом роде явно не мое. Поэтому сейчас в раздумьях. Для каких целей предпочтительней изучать сишарп? Что можно для начала выбрать? Чтобы без особых требований к опыту и скилам, дабы хоть какой-то релевантный опыт наработать в процессе обучения и как можно быстрее начать полученные навыки использовать. Ну типа техподдержки или чего-то подобного.
на данный момент я между джавой и сишарп выбираю, поэтому очень хотелось бы ваше мнение и на этот счёт услышать
>>2452843 другой анон, но в тему поста. Вот, например, написал метод, где заменил все синхронные вызовы на асинхронные, всё я правильно делаю, просто приписывая await к асинхронным методам или чето не так?
>>2452790 Кстати этот самый SyncronizationContext и его связь с ExecutionContext - еще один косяк в дизайне языка. И кто из джунов(или выше) об этом знает а?
Лечение - не использовать контекст как это сделали в асп.нет коре (вера в то, что не будет контекста так наивна - хотя для круд сайтиков это можно принять) или использовать везде ConfigureAwait(false), который по умолчанию true (это еще одна глупость в угоду пориджам формшлепам) - и мелкомягкие никак не хотят с этим бороться
ну что блин им стоило сделать await await!
или ладно к текущему сделать await@ await?
и было бы лепо, а не уродское ConfigureAwait, которое нужно везде тыкать.
>>2453164 Ну, я почти в 30 начал. В 24 - на первую работу после магистратуры устроился. За 20к работал. Заебись все. Деньги плотют вовремя, пишешь код. Что еще надо?
>>2453270 Чёт не понял, чел. Как я верну результат круда если например мой вызов бд GetZalupaAsync будет без контекста? Он же просто улетит куда-то выполняться в другом месте, а круд продолжит выполнение в текущем. Так-то ConfigureAwait(false) для UI нужен чтобы вызовы говна не висели в UI потоке и не тормозили его. В asp.core Ты обязан в текущем потоке работать, который тебе выдали на запрос, и если хочешь че-то запустить через FireAndForget использовать бэкграунд треды, иначе наплодишь говна. В чем я не прав?
>>2453459 >Он же просто улетит куда-то выполняться в другом месте Не понял о чем ты.
>В asp.core Ты обязан в текущем потоке работат никому никто ничего не обязан. асп.кор всего лишь не определяет свой SyncronizationContext, что дает твбе возможность не писать ConfigureAwait(false), но никаких больше требований или правил. Если у тебя долгоиграющий сервис что-то делает на CPU, то выделить ему свой поток, (а то и несколько) вне пула - нормальное решение.
>>2453459 >Ты обязан в текущем потоке работать, который тебе выдали на запрос нет такого. "поток/процесс на запрос" это в языках где нет асинков. Где есть async-и то твой контроллер просто самый обычный асинхронный метод который вызывается на первом попавшемся из пула треде и в процессе выполнения метода контроллер может несколько раз поток сменить
Есть тредпул с потоками, есть async/await-ы которые дербанят твои асинхронные методы на куски. Далее планировщик запихивает нужный кусок в тредпул для выполнения. И так по кругу. Так все и работает если ничего не трогать. Ну в GUI имеем еще сверху 1 выделенный поток для UI
Я не понимаю, зачем нужна конструкция async await. Ведь с await основной поток приостанавливается, то есть программа все равно выполняется синхронно. А без await можно просто вызвать task.run
>>2453859 >Ведь с await основной поток приостанавливается нет. с async/await потоки не приостанавливаются. в этом и есть смысл асинхронности. await освобождает поток и ждет результата асинхронной операции.
>>2453908 Вкатуны испоганили слово пет проект, если изначально это был проект, которым ты занимаешься в свободное от работы время в свое удовольствие, теперь пет проект -- это бесполезный высер, которым ты пытаешься впечатлить Кабана, чтобы он взял тебя грести на галеру.
>>2453980 >теперь пет проект -- это бесполезный высер, которым ты пытаешься впечатлить Кабана, чтобы он взял тебя грести на галеру А что в этом собственно плохого? На пет проекте ты освоишь основы работы с фрейморком, гитом, CI/CD мб. Полезная вещь на самом деле.
>>2453980 Ну так я и планирую заниматься в свободное от работы время в свое удовольствие. Я всмысле чтоб опыт коммерческой разработки появился плюс минус
>>2453977 на самом деле это очень простая концепция, просто твой мозг не привык думать в этом стиле. но стоит понять парадигму, то сразу сможешь так писать в любом другом языке
async - метка компилятору что в методе будут await и нужно его преобразовать в стейтмашину. await - "мы тут ждем ответа от асинхронной операции, поток нам не нужен, но когда ответ будет, тогда попросим выполнить продолжение (код после await)" и он будет выполнен либо в контексте синхронизации (который по факту тупо выполнятор-планировщик) или в тредпуле.
В конце ожидания продолжение (код после await) будет запланировано (станет в очередь) на выполнение. Если есть свободный поток, то оно и будет сразу выполнено, иначе будет ждать пока не освободится поток. Получив поток продолжение будет выполняться в нем, пока не встретится следующий await и поток будет освобожден и будет ожидание, потом результат ожидания и снова постановка очередного продложения на выполнение. И так пока цепочка не закончится
Цепочка await выполняется последовательно друг за другом и если у тебя тупо однозадачная херня, то разницы особой с синхронным кодом нет, разве что в моменты ожидания I/O твой поток не заблокирован, а просто ждет когда его снова позовут. Но другое дело если параллельно выполняется много чего.
Если у тебя потоки, то 10000 параллельных запросов потребуют создать 10000 тредов, каждому из которых нужно выделить стек, потратить время на создание, да и еще и между ними переключаться "чтобы каждый поработал". При этом будет много лишних переключений контекста когда поток просто ждет ответа I/O и собственно ему делать нечего.
А вот с асинками у тебя пул потоков. И в каждом из 10000 запросов есит цепрчка await-ов, где каждый await, когда до него дойдет выполнение, возвращает поток в пул давая возможность поработать другим. Потом await получает результат и ставит продолжение в очередь на выполнение. Если у тебя много I/O, где происходит тупо ожидание, то эти 20 потоков легко перемолотят твои 10к запросов.
Есть классы NamedPipeServerStream и NamedPipeClientStream Они являются наследниками PipeStream.
Так вот, в моем базовом классе используется PipeStream. Затем я наследуюсь и делаю новый класс, где при помощи оверрайда пытаюсь PipeStream привести к типу NamedPipeServerStream. Но мне дают пизды.
"NamedPipeServerStream" не может переопределить "PipeStream", так как их возвращаемые типы различны.
Почему сишарп выбрали? Сейчас посмотрел количество вакансий, в Москве около 400 с опытом от 1 до 3 человеколет. Явно придется потолкаться. Или вы по другим критериям выбирали?
>>2454104 По яве в Москве больше в два раза, а касаемо зарплаты я даже не решаюсь судить, цифры разнятся, как и требования к кандидату. Пока расчет только на начало карьеры. Кстати первую работу тяжело было найти?
>>2454106 > Кстати первую работу тяжело было найти? Мне приглашение самому пришло. Я одной компании бесплатно помог данные восстановить, мой друг там был вторым человеком. И на следующий день от него "Ты работу случайно не ищешь?"
>>2451658 > В нем можно было бы возвращать саму коллекцию, если она поддерживает IReadOnlyCollection Любая коллекция кастится в рид-онли коллекцию. Хоть список хоть массив. Не забывай, что это просто коллекция, у которой есть геттер, но нет сеттеров на добавление и изменение элеменнта
>>2454137 Может я спутал апкаст с даункастом. Но то, что ты предложил, приведет "mamku ebal" в типу свойства base. А мне нужно наоборот: был родительский, а стал дочерний.
>>2454125 >что это просто коллекция, у которой есть геттер, но нет сеттеров на добавление и изменение элеменнта он как раз не забывает. собственно об этом и толкуем, что IList должен быть наследником IReadOnlyList
>Любая коллекция кастится кастится. но явным кастом.
Объясните, как снизить нагрузку на GC? Вот я беру память из меморипулла. Парсю сообщение. Создаю объект сообщения. Дальше пускаю его по всяеким своим фильтрам, оно доходит до роутера, роутится к обработчику, обрабатывается, шлю ответ. Все, оно умирает. GC - берешь и жрет его. Так вот. Если мой сервер работает в десктопном режиме, то он, блядь, постоянно стопит все, чтобы эти сообщения пожрать. С вообщении содержится только тип сообщения, какие-то данные о валидности, ну и может наличиствовать тело, если тип сообщения его содержит. Я вот начинаю подумывать, что делать абстракцию над сообщением - было плохой затеей. Но чет как иначе сделать - не представляю. Так вот. Как мне снизить нагрузку, чтобы GC не бесновался и постоянно не дергался? Просто в проффилировщике оно примерно так выглядит и меня это напрягает. Память правда так не утекает, держится на кровне 200МБ, но постоянно долбится GC.
>>2454195 Если у тебя дохуя строк, и дохуя с ними работы, то тут может быть проблема. Любая манипуляция со строками создает новые экземпляры строк, которые GC нужно чистить вилкой. https://youtu.be/95AlosM6Ka0?t=280
Для этого юзают стрингбилдеры. Но я могу только догадываться что у тебя за пробелма.
>>2454096 Та не. У меня примено прикриплейд. Вот то что там что-то делает с сообщением - это статические методы, которые по логике приложения доставляют до нужного обработчика, на уровне обработчика.
Хотя я пока накидывал пример - понял, что а нахуя мне вообще эти вот "сообщения"? Типа почему все не хранить в контексте? Он-то живет пока живо соединение. А эти вот сообщения придумывать было тупой идеей.
>>2454305 Ну серьезно, чел. Я буду тебе сейчас для примера накидывать как у меня в реальности с пайпами вся хуйня, катанием по буфферу туды-сюды и прочей хуйней?
>>2454327 Ну блин. 1. Реальный проект я по понятным причинам показать не могу. 2. Проблема как раз в сообщениях, потому что судя по профилировщику - именно они постоянно удаляются-создаются.
Аноны, помогите определиться с названиями классов.
Сервис Authentication: Нужен класс Account который содержит данные текущего пользователя и класс Account который содержит короткие публичные данные другого пользователя, которые возвращаются по запросу.
Сервис Game: И аналогично классы Player. Один для текущего пользователя, который содержит полную информацию с инвентарем, кол-вом валюты и второй класс, который содержит короткую инфу о другом игроке, типа nickname и portrait.
Может так: UserAccount | AccountInfo UserPlayer | PlayerInfo
Как перейти с net 6 на net 5? Я меняю целевую платформу в файле конфигурации проекта, но при компиляции всё равно генерируется файл g.cs с глобальными юзингами, из-за которых в итоге возникает ошибка.
>>2454341 конечно они создаются. но это сколько нужно запросов чтобы они были проблемой. Как я понимаю по 1му объекту message на запрос...так это обычное дело.
для начала коментируется await Application.Handle чтобы понять что проблема именно тут, а не там. А еще создается и контекст (хз че это) на каждый запрос. Хз насколько он тяжелый и кто его знает как работает его Parse
Привет, посаны. Пришла таска накидать API на .net 6. Подскажите что почитать чтобы его сделать. API элементарное, но я в вебе никогда ничего не писал до сих пор. Основы знаю самые.
>>2455340 Хочешь крутые программы для системы, а будешь легаси для учёта всякой хуйни на древнем проприетарном дотнет фреймворке. Лучше уж веб, чем такая участь.
>>2455410 Частично начнешь Разметка ведь только часть всего Если знаешь впф и прочтешь курс стартандроид по диагонали то сможешь писать на замарине с гуглом
>>2455702 Это по факту конечно. Ну у нас например фронт очень базовый - разор и пара либ с компонентами для него. Никаких версток и реактов ковырять не надо.
>>2445746 (OP) На оппике - Таприс Шугарбелл Тисаки, если кому интересно. Я не знаю нахуй я это гуглил и нахуя тебе (и мне) эта информация, Анон, но вот как-то так. Анончики, как бросить страдать хуйней и начать работать.
>>2456264 Я нихуя не понимаю, анон. Я уже отупел с эти нюгетом. Чтобы мне надо сделать, чтобы получить .nupkg с двумя dll внутри? Какие-то папки блядь, рантаймы нахуй, ебанутые. Ты вот ссылку скинул, там пишут пок кок, спите в .nuspec. В соседней статье другой индус пишет АЛЕРТ .НЮСПЕК БОЛЬШЕ НИНАДА, пользуйтесь тегами проекта для SDK. Какими нахуй тегами?
Почему я не могу написать dotnet pack p: Platform x64|arm64 и получить что хочу.
Анон помоги, я на работе сначала плакал а потом рыдал смехом когда понял что nupkg это zip архив
>>2456287 какие еще 2 dll дотнет dll делятся на типы рантайма - ,net/core/mono и так далее. То есть одна длл будет работать и на винде х64 и на макоси арм м2
а разделение на платформы уже там папка runtimes с нативными либами
>То есть одна длл будет работать и на винде х64 и на макоси арм м2
В случае AnyCPU.
Пчел, у меня либа с классами с таргетом на .net6, в прожектфайле две платформы - x64;arm64, все. В солюшене тоже самое.
Сделав dotnet pack, я увидел что msbuild просто собрал мой код под AnyCPU и пихнул в пакет. Я убил весь день, чтобы понять как собрать пакет под две платформы. И все ещё нихуя не понял.
>>2456315 >Можно ли считаться джуном Я лично тебе разрешаю считаться кем хочешь, только не женщиной, геем можно но обычно джуном считают тех кто может самостоятельно закрывать относительно несложные таски, а знание языка тут дело обязательное, но его воообще недостаточно даже близко. Нужно знать фреймворки, ORM, SQL, предметную область, элементарную математику, git, скорее всего ещё уметь немного верстать, понимать как работает операционная система, HTTP, рантайм дуднета и кофемашина в офисе. Т.е. даже если ты осилишь этот или другой курс по языку ты будешь на один шаг ближе к заветному вкату, но идти до него будет ещё много километров идти. И даже если тебя возьмут на трейни-позицию, пока ты не начнёшь самостоятельно закрывать таски ты не будешь считаться джуном. Если ты до этого носил пиццы, то лучше забей. Если учишься на программиста, лучше читай книги из шапки, курсы тебе не помогут если ты долбоёб.
Пацы, как бы удобно оформить сохранение объектов в файлы?
Есть класс LocalStorage, который должен сохранять в файлы разные классы в json формате, типа SettingsData, LoginData, ShopData, TimersData.
Можно конечно тупа вот так сделать: _localStorage.SettingsData { get; } _localStorage.SaveSettingsData(); // ... _localStorage.LoginData { get; } _localStorage.SaveLoginData(); // etc
Но если я решу добавить ещё один класс, то мне придётся обновить интерфейс ILocalStorage, а затем и саму реализацию. Как-то не очень получается.
Джун это: 1. Хорошее знание C# (твой курс я по-быстрому проскроллил, не увидел там даже делегатов и ивентов, а также исключений и асинк-авейтов, немрого посмотрел, сам курс похоже не показывает как надо делать, а лишь показывает синтаксис каких-то частей языка). На metanit зайди и там по главам просто иди.
2. Базовое знание стека технологий какой-то определенной сферы. Ты чем хочешь заниматься? Бекенд? Мобильные приложения? Игры? Десктопные приложения? У всего этого свои фреймворки и библиотеки, ты должен знать что они делают и уметь с их помощью что-то сделать.
3. Базовое знание алгоритмов и структур данных. Нужно просто знать че такое массив, односвязный список, двусвязный список, хеш таблица, двоичное дерево, зачем они нужны. Сортировку пузырьком еще хотя бы напиши.
4. Базовое понимание основных концепций ооп(Solid и хотя бы штук 5 паттернов)
5. Опыт работы/наличие своих проектов соответствующих пункту 2. Без опыта работы скорее всего ток на стажера возьмут.
>>2456346 >metanit Там, по-моему, еще более скупо чем в этом курсе. Чел из плейлиста берет какой-то кусок синтаксиса и в течении 15-20 минут объясняет шо це такэ на примерах. На метаните текста на пару минут чтения. > Ты чем хочешь заниматься? Бэкенд. > Базовое понимание основных концепций ооп Понимаю что такое инкапсуляция и наследование. Думаю, если дадут тест на собесе с ними, то смогу решить. >Без опыта работы скорее всего ток на стажера возьмут Да похуй, как это называется. Под джуном я имел ввиду человека, который собирается поступать на свою первую галеру.
>>2456348 > Там, по-моему, еще более скупо чем в этом курсе. Чел из плейлиста берет какой-то кусок синтаксиса и в течении 15-20 минут объясняет шо це такэ на примерах. На метаните текста на пару минут чтения. Ну если ты эти видосы лучше воспринимаешь то смотри их, но повторюсь - я не увидел там нескольких очень важных тем.
> Бэкенд Я не бекендер, так что пусть кто-то другой подробнее ответит, но по идее ты еще должен хоть на каком-то адекватном уровне знать asp net core, уметь писать самые простые запросы на sql, какой-нибудь маппер, любой фреймворк для dependency injection, ну и понимать как ваще интернет и сеть в общем работает примерно
> Понимаю что такое инкапсуляция и наследование. Думаю, если дадут тест на собесе с ними, то смогу решить. Ну инкапсуляция и наследование это ладно, с этим разобраться легко. Чем наследование может быть плохо понимаешь? Зачем нужна инкапсуляуия понимаешь? Ну и опять же - солид и немножко паттернов надо знать по хорошему.
> Да похуй, как это называется. Под джуном я имел ввиду человека, который собирается поступать на свою первую галеру. Справедливо. А у тебя какой сейчас уовень? Ты только начинаешь вкатываться? Языки какие-то изучал до этого? Если у тебя вдруг уже есть опыт работы не на шарпе, то вкатиться намного проще будет
>>2456359 >Чем наследование может быть плохо понимаешь? Еще нет. Чем? По-моему, очень удобная штука. >Зачем нужна инкапсуляция понимаешь? Да. Код писать буду не один. И чтобы другой программист не наебнул логику моего кода например, вписав в поле возраст -1000, определенным полям следует давать либо приват, либо протектед. >Языки какие-то изучал до этого? Плюсы. Но у меня что-то не получилось, психанул разочаровавшись в себе и бросил на полгода. >Если у тебя вдруг уже есть опыт работы не на шарпе, то вкатиться намного проще будет Нету. Кстати, а можно в резюме напиздеть, что работал без ТД у друга брата деда? Хотя бы пару месяцев. Сильно палиться буду?
>>2456368 > Сильно палиться буду? Сам как думаешь? Сейчас вкатуны нахуй не нужны, между вашим братом устраивают "игру в кальмара" самую настоящую. Иди лучше в моряки сразу.
>>2456368 > Еще нет. Чем? По-моему, очень удобная штука. Ну короче если слишком большая глубина наследования - то разобраться в структуре программы становится тяжело - придется всю цепочку наследования смотреть, плюс появляется зависимость между базовым классом и производным, и если случится какой-то сильный рефакторинг то всю цепочку наследования придется чинить.
Поэтому если ты пишешь прогу - старайся как можно меньше делать всяких абстрактных классов и длинных цепочек наследования(А наследуется от Б, Б наследуется от В, В наследуетсч от... - вот этого надо избегать, но если никак, то ладно), а пытайся как-бы в ширину растить программу - делай просто маленькие интерфейсы с понятным назначением и ответственностью, и какими надо классами их реализуй. Это в общем-то сразу два принципа солид(1й и вроде 4й)
Когда ты на реальный проект придешь, там везде будет работа чисто на интерфейсах, многое будет выглядеть примерно так: interface IMochaProviderSevice { IMocha GetMocha(); }
> Да. Код писать буду не один. И чтобы другой программист не наебнул логику моего кода например, вписав в поле возраст -1000, определенным полям следует давать либо приват, либо протектед. Малаца. Это кажется очевидным, но почему-то многие новички этого не осознают.
> Плюсы. Но у меня что-то не получилось, психанул разочаровавшись в себе и бросил на полгода. И правильно, на шарпе писать в разы приятнее.
> Нету. Кстати, а можно в резюме напиздеть, что работал без ТД у друга брата деда? Хотя бы пару месяцев. Сильно палиться буду? Лучше не надо, сразу поймут. В теории можно фриланс написать, но я так не делал, поэтому хз.
Лучше займись каким-то своим проектом и просто впиши в опыт, что вот работал над ним полгода. Все так делают, поэтому это норм - хотя бы хр фильтр пройдешь.
>>2456448 Хорошо, понял. Еще по поводу: >На metanit зайди и там по главам просто иди. Скажи, до какой главы ориентировочно читать, чтобы претендовать на стажера/джуна? Просто для меня очень важно, иметь четкую цель, чувствовать прогресс к ней, а не просто "учится".
>>2456450 Ты скорее всего не встретишь 18 главу (но её полезно было бы прочитать), 20 глава не нужна, остальные все обязательно нужно понимать полностью.
В главе 8 определение операторов и методы расширения, остальное просто прочитай 1 раз
Главу 9 просто прочитай, особо учить не надо, просто прочитай й раз и будь в курсе что такое есть
Главу 10 хорошо надо знать
Главу 11 хорошо надо знать. Но регулярные выражения идеально заучивать не обязательно
Главу 12 просто почитай
Глава 13 джуну не нужна, прочитай 1 раз и забудь, запомни только если тебе там что-то понравится
Глава 14 это не на уровень джуна, пока не лезь, только первый пункт там прочитай, как поток стартануть и попробуй сам это сделать. Многопоточность это очень объёмная тема, но ты просто должен знать что такое поток
Главы 15, 16, 17 нужны
Главы 21(про сборщик мусора на собеседовании будут спрашивать скорее всего), 22, 23 нужны
>>2456346 >Сортировку пузырьком еще хотя бы напиши. Как же трудно сейчас айтишникам, они до сих пор ручками пишут базовые алгоритмы. Почему не спрашиваете теорему Пифагора?
Общие вопросы: Уровни модели OSI Клиент-серверная архитектура, какие бывают еще Работа операционной системы (что делает, какие бывают, что можно переложить на нее, чтобы не велосипедить) Многопоточка, синхронизация доступа к разделяемым ресурсам, поиск консенсуса. Асинхронщина. Чому говно, чому круто? В чем вообще прекол. HTTP. Чому говно, чому не говно? Принцип работы. Вебсокеты. Что, зачем? Какие подводные камни? Сессии, куки, авторизация-аутентификация. JWT. Что, почему пользуем? Почему говно? Как жить-то с ними? Почему нужно возвращать всегда 200? Вопрос с подвохой. Докеры-хуекеры, кубернетисы-шмубирнетисы. Что, зачем, почему, как поднять. Что за зверь такой MVC? Почему оно так популярно? API First.
Шарпы: База - что-то из этого не знаешь - сразу идешь нахуй
Ссылочные и значимые типы. Чем они отличаются. Вопрос со звездочкой - что такое record, как жили без него? Передача аргументов, чем in от ref отличается? String - с хуя этот зверь, являясь ссылочным ведет себя как сука? Колекции шарпа, как какие работают, вообще - нах оно надо? LINQ, что зачем и почему говно без задач, но почему - придется пользоваться? Женерики - что, почему заебись, чем от темплейтов из C++ отличаются, почему жава опять соснула. unsafe - надо ли вообще оно тебе, и почему - да. GC - что за хуй такой, как работает, зачем нужен Финализаторы и почему ты не должен их писать. IDispoasble - воняет говной или не? Когда надо, когда - пошло оно нахуй. Рефлексия. Что, зачем, почему говно без задач. Чем Framework от Core отличается, а те в свою очередь от Mono?
Бекендер-щит - тут могут быть пробелы, джуну-то, но что-то спиздануть по каждой теме надо Механизм обработки запрос. Что вообще происходи-то, после того до сервера добрался первый SYN? ASP - стори, че вообще такое. Какие были майками предприняты попытки завоевать бекенд-рынок? Почему соснули? Какие веб-серверы у майков есть для хостинга твоего приложения? Почему ты должен использовать Kestrel? Если Kestrel, то что там с хостингом сразу нескольких приложений? Что есть для авторизации? Что там по работе с БД? Почему использовать ADO в 2022 все еще норм?
>>2456494 Да, про SOLID, паттерны я не стал включать исключительно из-за того что очередной бесноватый будет кричать, что это уже минимум мидл. По факту - джуну тоже это знать надо и спросят. Так что лучше про них тоже почитай.
>>2456493 >Как же трудно сейчас айтишникам, они до сих пор ручками пишут базовые алгоритмы. Художники прежде чем начать писать портреты барышень рисуют всякие кубы и фрукты, музыканты перед великими произведениями играют гаммы, а программисты реализуют простые алгоритмы. Не вижу причин твоего подрыва.
>>2456497 Ты инженер, а не художник. Тебе не нужно мастерить колесо, чтобы потом высчитать его площадь. Тебе не нужно доказывать пифагора, чтобы использовать полигоны. Мне от работника куда важнее знать насколько хорошо он умеет работать с базой с SQL, чем то насколько он там Фибоначчи собирать умеет. Знает что такой алгоритм есть, загуглит если нужно будет его писать руками. Так же и во всем остальном, что уже людьми открыто давно.
>>2456504 > Ты инженер, а не художник Инженер гораздо ближе к художнику чем ты думаешь. Ты просто не шаришь. Литкод-то медиум решить можешь хоть, инженер?
Дали тестовое на джуна, я его сделал, на мой, джуновский взгляд, все было неплохо. Но в итоге мне прислали отказ. Сейчас такую дизмораль словил из-за этого.
>>2456601 Да просто кандидатов было несколько, и кто-то справился чуть лучше тебя, а кто-то хуже, ну и выбрали лучшего кандидата, остальным отказ. Это нормально.
>>2456601 Сидел пол дня ковырялся в жопе, имитировал работу, пришла тестовая таска от джуна, скипнул сразу, потому что хотел посмотреть новую игру престолов (как раз времени на час).
>>2456494 >Почему нужно возвращать всегда 200? Вопрос с подвохо нахер этот вопрос. за него морду нужно бить ибо холивар. возвращать всегда 200 не нужно, но "натянуть все ошибки логики на коды хттп" тоже дичь.
>String - с хуя этот зверь, являясь ссылочным ведет себя как сука? ась? обычный иммутабельный тип. ведет себя как положено таким типам.
>Рефлексия. Что, зачем, почему говно без задач. Без каких задач? наряду с кодогеном лютый вин. Как раз не жава же. Впрочем кодогенерация при компиляции вещь не хуже, чем все делать в рантайме.
>Какие были майками предприняты попытки завоевать бекенд-рынок? Почему соснули? шта? это вообще о чем.
Как скопировать текст в текущую позицию?
Аноним06/09/22 Втр 12:01:27№2456655496
Сап, делаю расширение vsix, мне нужно вставить скопированную строчку в текущее положение курсора файла, открытого в Visual studio. Как это можно сделать?
GetText() не помогает, я понял что надо копать в сторону microsoft.visualstudio.shell.interop , но я не понимаю, какой интерфейс сюда подходит?
>>2456676 Два критичных, как мне кажется - папка Model для моделей. То есть объектов с минимум бизнес-логике. И возможно им не понравилось реализация событий, и они хотели что бы использовал INotifyChanged
>>2456676 хз че делает код без самого задания. так что по диагонали
1 засилье region мешает чтению. Ну и переменные с большой буквы. Это придирки..но зачем злить экзаменатора 2 double.Parse входной темпы - никогда не доверяй входным данным, что они будут в нужном формате. КРИТИЧНО. 3 EngineIC Engine = new(10, M, V, 110, 0.01, 0.0001, 0.1); вот то, на что я жаловался на шарп в прошлых тредах - поди разбери что это за параметры. Там еще предлагали юзать переменные чисто для описания (гыгы). Ладно перехожу на сигнатуру - (int i, int[] M, int[] V, double overheatTemp, double hm, double hv, double c) имена мне ни о чем не говорят. И собственно эти же имена в классе - хз что они означают. КРИТИЧНО. 4 Engine.TemperatureChanged += OnEngineTemperatureChanged; а отписка где? Напрашивается IDisposable КРИТИЧНО. 5 _TimeFromStart++; - имя говорит про время, но это ничуть не время, а больше смахивает на счетчик итераций. Да и вообще там речь идет про время везде, но где само время?? КРИТИЧНО. 6 if (time == -1) - про "время" я уже писал, а по факту как ответ "Ответ на главный вопрос жизни, вселенной и всего такого". Это число не говорит о результате. Лучше вернуть результат тестирования с четким пониманием что произошло и итог. КРИТИЧНО.
>>2456735 О, спасибо за подробный разбор. > 5 _TimeFromStart++; - имя говорит про время, но это ничуть не время, а больше смахивает на счетчик итераций. Да и вообще там речь идет про время везде, но где само время?? КРИТИЧНО. В задании нужно было упрощенно симулировать работу двигателя, при этом не используя реальное время, чтобы не дожидаться результата. +Программа должна быть легко расширяема (Подрузамевается простота добавления новых типов двигателей и тестов). Одна итерация в данном случае равна одной секунде. > имена мне ни о чем не говорят. И собственно эти же имена в классе - хз что они означают. Все переменные были даны в виде физических констант. Наверное стоило им всем присвоить понятные имена тут я оплошал, да.
>>2456753 >Подрузамевается простота добавления новых типов двигателей и тестов ну последнего вроде нет
А вообще типичная проблема таких заданий - хз что подразумевает проверяющий. У него ж свое видение и если что не так - ты провалился.
Я так завалил свой первый собес (на другом языке), где мне сказали тупо по бырому "вычислить фибоначи но не использовать кеширование". И естественно я его провалил потому что "должен был использовать мемоизацию". До сих пор не знаю, какое такое кеширование имелось в виду, если это не мемоизация.
>>2456735 > поди разбери что это за параметры Открой в студии с решарпером, все параметры неочевидные будут подписаны. По остальным пунктам согласен, не перезвонил бы
>>2456788 и получается забавный результат 1 решарпер считает нужным удалить все явные param: value если они совпадают с позиционными, что делает код менее читабельным 2 в итоге сам же и замусорит своими подсказками
и читать без IDE неудобно. Особенно если смотришь какой нибудь дифф, а там магия.
конечно решарпер можно настроить чтобы не удалял, но это уже мой костыль, а не общепринятый подход.
Ребят, у меня ситуация: я написал аддон для приложения. По сути это самостоятельное wpf окно, которое висит на протяжении всей сессии приложения, да еще в режиме TopMost.
Проблема заключается в том, что при деактивации приложения, мое окно продолжает висеть и перекрывать собой экран. Есть ли какой способ сделать мое окно так сказать принадлежащим к определенному приложению? Обращаться к самому приложению я тоже не могу по техническим ограничениям.
Из первого, что пришло в голову, это постоянно сканировать процессы и проверять активность нужного. Есть ли что-то проще?
>>2456914 по хорошему у твоего окна должен быть Owner, но похоже это не подразумевается и у тебя его нет. Значит ты должен сам следить за основным окном. Если основное окно это WPF то ты можешь попытаться добраться до него с помощью Application.Current.MainWindow Application.Current.Windows
и подписаться на событие минимизации. (или тупо сделать Owner своему окну)
>>2456928 К сожалению это приложение не подчиняется мне. Ну как если бы я из браузера запустил свою приложуху. Вот как мне браузер сделать owner ссылаясь на его процесс?
>>2456939 Если приложение впф и ты в его процессе то ты можешь достать его окна. Тут правда еще фреймворк важен и как делается изоляция В коре аппдомаины выпилены
Ну естественно я опустил момент, если процессов несколько или вообще нет. Теперь если скрыть главное приложение, то скрывается и мое. Но вет если переключаться при помощи alt+tab к примеру, то мое окно висит поверх. Тут надо убирать topMost, но тогда основное приложение будет перекрывать мое окно.
>>2456952 >А если ты в своем процессе то ты уже не аддон Да я хз как это назвать. Там на самом деле все через жопу. По факту у меня работает отдельное приложение.
Скрипт, из приложения, для которого я пишу доп функционал запускает функцию из моей dll, Эта функция при помощи именованных каналов передает данные в еще одно мое приложение. Вот, собсно последнее мне надо как-то сделать причастным к первому. Как бцдто это часть приложения.
>>2457011 Ссыль не найду. Там суть в том, что для некоторых методов (sum, min, max, avg, мб ещё что-то) теперь используются векторные инструкции, если есть такая возможность. Ускорение примерно в 40 раз по сравнению с вычислением ручками.
И как-то он удачно встал, что у меня все работало как я хочу. Но стоит мне его убрать, как мое окно при запуске проваливалось за окно главной приложухи и эффекта TopMost только относительно приложения уже не наблюдалось. Как только окно загружается, то сразу идет на задний план. Что делал месседжбокс?
>>2457090 да причем тут сторонняя. это просто враппер для того чтобы не пердолится самому в реализацию всех эти структур никто не запрещает и самому это делать
>>2457085 Что делал месседжбокс? активировал окно. то есть выносил на передний план а вообще такое нужно без студии. меня запарило с 19 и 22 студии фигня что месседжбокс при запуске из под студии невидим. Приходится с трудом до него добираться то есть работа под студией и в релизе разная.
>>2457092 >активировал окно. Попробовал Activate заюзать, но без толку. Вот даже когда я скрываю основное приложение, то мое не скрывается автоматически. С месседжбоксом скрывается.
>>2457104 Попытался вместо месседжбокса запустить кастомное окно в режиме Showdialog Запускается оно в момент Loading моего окна
Так вот, когда я самолично тыкаю по окну и закрываю, то мое окно работает так как нужно. Но если я диалоговое окно закрываю автоматически через какое-то время, то эффекта ноль.
Как запихнуть несколько ASP.net приложений с EFCore, Postgres, Serilog и прочими вещами в железку с объемом оперативной памяти 128МБ и 256МБ флеш-памяти?
>>2457104 я хз че у тебя происходит. тот кусок кода что я дал на пике - при минимизации основного минимизируется и окно из пика а при закрытии закрывается
>>2457185 Ну, это был бы вариант, если бы у меня в распоряжении было ~100 человек, которых можно было бы посадить поддерживать эти форки. Но у меня я и
>>2457220 Ну, EFCore и так заменили на прямую работу с базой(дергаем нативные функции SQLite), логер - тоже свой написали. Все равно одно - еще как-то влезает, а вот несколько - уже не лезет. Если отказаться от ASP и реализовывать свою работу с HTTP - то в принципе 3+-1 влезет, но можно ли такое в прод пускать? Только разве что как пруф оф концепт оно может так существовать.
>>2457267 Попробовал простой пример. При вызове GetInstance для типа с уровнем жизни Transient, он создаётся два раза. Вопрос - А КАКОГО ХРЕНА??? Это или баг, или я неправильно понимаю Transient.
>>2457361 Понял. Спасибо. У него в примерах показано, что нужно самому вызывать 'Verify()'. Я сначала на этот метод подумал, поэтому убрал проверку и ничего не изменилось. А она по дефолту включена, лол....
>>2457369 Понятно на что На майковое после того как асп стал иметь свой дефолтный И я просто запарился поддерживать в своих либах несколько контейнеров
Анончики, такой вопрос, кто-нибудь пользуется Linq2Db? Если да, то как он? Какие есть подводные? Просто все советуют в качестве ORM либо грузный EF Core, ли не очень удобный Dapper. А Linq2Db как раз выглдяит как штука, которой почти так же удобно пользоватся, как EF Core (по крайней мере для составления запросов через Linq), но вроде бы сильно легче, чем EF core, и даёт больше контроля (даже CTE-ки через LINQ мутить можно, вроде бы).
Здарова, шарпята. Есть некая апиха, которая на принимает пост запрос типа: { “id”:[14, 88] } И отвечает: { “status”: “success”, “data”: { “14”:{ “id”: 14, “info”: “foo” }, “88”:{ “id”: 88, “info”: “bar” } } } И есть мое приложение асп которому нужно вот то инфо из даты считывать. А собственно как? Это ж нельзя строго типизировать - айдишники и соответственно названия полей в дата каждый раз разные. Есть способ это нормально прочитать шарпом? Инбифо пиши парсер жиссонов
>>2457420 ну в минимуме он памяти жрет больше чем EF но ближе к SQL ным запросам чем более абстрактный EF И получаем как EF без трекинга и контекста с перекосом в чистые запросы (пусть даже написаны на Linq)
Это и есть подводный камень - перекос в чистые запросы хоть и на Linq - из-за этого нет примитивного partial update
Больше чем linq2db но меньше чем ef core - SqlSugar, но там своеобразное именование и рукожопы не разделили зависимости от баз данных, поэтому тупо ставятся все зависимости и место занимают.
>ли не очень удобный Dapper Есть путь использовать Dapper, но облегчить себе жизнь через составление запросов с помощью Linq, хотя всякие Include все ручками ибо навигацию не учитывают. Но легковесность.
Ну если структура неизвестна во время ответа, то полуручной разбор поддерживается и в System.Text.Json через JsonDocument.Parse и в Newtonsoft.JSON через JObject.Parse - и плата за это некоторый оверхед. Ну а без него - ручной разбор
>>2457539 Не, ну она известна и даже управляема, количество и названия объектов в data зависят от айдишек в запросе, сами эти объекты тоже известны и стабильны
>>2457629 Ну блин, получается что динамическим является количество и названия филдов у объекта дата (определяется в момент запроса, количество равно количеству айдишек в запросе (в моем случае вообще одна будет), а названия сами айдишки текстом) их тип и все остальное стабильно. Получается что известно заранее, но хрен типизируешь
Привет всем шарперам, зашел к вам из лагеря джавистов просто полюбопытствовать. Я чёт уже заколебался настраивать JVM, это какая-то сран и отдельная наука, такого, чтобы просто пнул и оно полетело практически не встречается на +- серьезных проектах, чуть ли не отдельных людей приходится заводить, чтобы они всё тюнили.
Это только наши приколы или у вас какая-то похожая ситуация? Как вообще у вас обстоят дела с GC? С блокировками во время этого дела? Затратами на проц и оперативку? Необходимостью тюнинга? Статьи в интернете я читал, но интересует именно практический опыт от реальных людей, вот насколько вас приходится сталкиваться с этим в реальной жизни и насколько удобно такие задачи решать?
>>2457715 Ну на самом деле структура чуть сложнее вот эти классы, которые называются как айдишка текстом, могут содержать в себе и массивы и другие классы. Что насчёт такого варианта: var response = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(responseBody); var data = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(response[“data”].ToString()); var obj = JsonSerializer.Deserialize<SomeClass>(data[$”{id}”].ToString()); Вот так более-менее эффективно будет?
>>2457810 Ну, с GC по ощущениям сильно проще. Так как язык и рантайм поддерживают значимые типы данных (ака структурам), и они широко применяются в стандартной библиотеке, то нагрузка на менеджер памяти и GC выходит заметно ниже, так как порождается меньше объектов, особенно маложивущих. GC два. Десктопный с упором на минимизацию задержек на STW, и серверный, с упором на скорость выделения памяти. Тюнить их не приходилось. Не знаю, как себя поведет GC на огромных хипах, которые, слышал, в джавовских монолитах могут встречаться. Везде, где работал, пилят микросервисы и стараются особо много памяти им не наваливать Обычно, когда появляются какие-то проблемы с использованием памяти, то это значит, что пора бы попробовать переписать код на allocation free. Благо инструменты, типо пулов памяти/массивов, span-ов, всяких разных ref (в том числе readonly) структур и stackalloc'а есть. Центили-байтоебы могут даже попробовать unsafe и пдрочить указатели.
>>2457829 Спасибо за такой подробный ответ. А как у вас с линуксом, я слышал про всякие mono, насколько реализации отличаются и насколько это вообще жизнеспособно?
>>2457837 Сейчас у нас основной рантайм - опенсорсный кроссплатформенный .Net Core. .Net Framework и Mono остались в прошлом и уже не развиваются. Рантайм активно развивают, в первую очередь в сторону производительности. С запуском под линухом проблем нет. Для популярных дистров есть пакеты с рантаймом. Есть оф. образы для докера, которыми все активно пользуются. На трёх местах, где я работал и работаю сервисы деплоятся под линухом в кубере или Open Shift. Единственная проблема, нет нормального кросплатформенного UI. WinForms, WPF и UWP прибиты к Винде. Майки разрабатывают кросплатформенный (винда + мобилки) MAUI, но линух официально поддерживать не хотят и оставляют это на откуп сообществу. Вроде как ещё есть трули кроссплатформенная Avalonia, но я ее не трогал, потому мне сказать нечего.
>>2457859 что это за синглтон такой что рождается и умирает (ну допустим ладно в рамках IoC такое есть) хотя зачем ему умирать и деструктор??? финализатор что ли? не гуд. Отписываться нужно в Dispose (но опять же что это за синглтон такой)
самый продвинутый уровень это lifetime, но это для тех, кто постиг дзен (и это не веб где достаточно IoC контейнера из-за специфики)
>>2457861 Немножко неправильно объяснил. У меня есть сервисы. Они не знают о своём времени жизни. Но по факту они будут жить до закрытия программы, как синглтоны, внутри контейнера. Некоторые из этих сервисов должны подписываться на события других сервисов.
Не знаю как бы это грамотно реализовать. Или добавить может им interface с методами, которые будут дёргаться извне. Типа AddListeners / Remove Listeners.
>>2457862 Подписываются и пусть подписываются. Для этого события и нужны.
Если же время жизни может быть меньше того, на что подписываются то компонент должен знать, когда ему нужно очистить ресурсы 1 Stop(Async) если это что то типа HostedService 2 Dispose() 3 lifetime - токен
собственно все это одно и то же с небольшими отличиями.
Я хочу чтобы зпшка жоска наваливала бабла на карту и не хочу совсем уж заниматься говнокодством и хернёй. В бэк через С# норм тогда вкатываться? Просто плюсы, кои я учил до этого, не дают первого, а какая-нибудь джава второго
>>2458068 Я не хочу получать бабло и не работать. Хотелось бы выполнять интересную более менее работу и не недополучать в деньгах, как повелось в каком нибудь эмбенде на си. Думаю C# лучший варант для этого
>>2458197 >ак разные orm могут иметь разную скорость работы, если они просто переводят запросы с синтаксиса языка в sql А как разные языки программирования могут иметь разную скорость работы, если они просто переводят запросы пользователя с синтаксиса языка в команды процессора? Вот наверное по той же самой причине.
>>2458136 Да, вполне норм тема, но нужен опыт. В шарпе сейчас интересно в основном на новых проектах, где .net6 и т.д. Но туда берут либо по знакомству, либо за очень хорошие скилы.
>>2458204 > Обычный джойн может превратиться в цикл из селектов. То есть авторы orm считают, что могут лучше оптимизировать запросы, чем это сделает сама бд?
>>2458222 Не считают, просто не всегда корректно срабатывает генератор запросов. Чтобы самому не проебаться при использовании ORM, надо либо отказаться от их использования, либо очень хорошо знать кишки ORM, быть нахуй сеньором DBA и иметь лет 15 опыта, а каждый сгенерированный запрос перепроверять вручную.
Анон помоги, хочу событием после сборки перемешать папку из сурса в дефолтную директорию ОС типа Документов или AppData. Как определить путь? Не нашел у msbuild встроенных переменных.
>>2458334 …но сам факт показателен: зумер считает, что нет нужды изучать сраное легаси плесневелых дидов, и не знает о существовании переменных среды, и соответственно, будет велосипедить очередное мокрописечное говно.
>>2458349 > прописывать переменные Ох и ебланище малолетнее. Изучи матчасть. >>2458329 > дефолтную директорию ОС типа Документов или AppData >>2458349 > прописывать > дефолтную > Тебя зумеры избили или в голове насрано? У тебя в голове пусто, порридж.
Почему в byte jej = 7; происходит неявное преобразование. и даже в byte jej = 7 + 3; оно произойдет, когда оператор + вернет инт. но здесь byte yey = jej + 3; все сломается? почему jej просто неявно не перейдет в int, оператор + не отдаст результат в int и как было до этого и этот результат также неявно не перейдет в byte, как и 7, и 7+3 до этого?
>>2458427 Потому что компилятор видит, что в первых двух случаях значение влезает в byte. (Константные выражения он на этапе компиляции сворачивает). А вот когда появляется переменная, то гарантий что влезет уже нет. Так что кастуй явно, чтобы ты так сказать, расписался, что понимаешь что запихиваешь значения более широкого типа в переменную менее широкого и готов к тому, что значение может урезаться.
Зачем микрософт упорно поддерживает Visual Basic? Что за бред, кто на нём пишет вообще? Кто реально будет ставить студию, и создавать проекты на VB? Я понимаю VBA, который в excel встроен и который для офисных планктонин до сих пор безальтернативен (с C# и дот.нет не имеет никакой связи, кроме возможности через COM вызывать код дон.нета). Но его почему-то спустили в унитаз и не обновляли лет этак 20. А вот VB.NET, который по факту абсолютно никому не нужен (если челик даун, он возьмёт петухон, если челик виндолюб и настроен решительно, он возьмёт решетку), майки поддерживают и развивают. Я понимаю F# - песочница и обкатка новых фич. Но VB.NET? Зачем? Для кого? Какого это вообще работать в микрософт, получать жирную котлету и закрывать тасочки по разработке языка, но котором не пишет никто?
>>2458685 Они его даже не развивают уже, а просто не выкидывают, чтобы легаси у других организаций не сломалось. Легаси начали писать ещё у нулевых, смигрировав его с более старых проектов на не-дотнетовском бейсике. Ну и есть некоторое количество дебилов-старпёров, которые знали старый бейсик и начали писать новые проекты не на шарпе, а на vb.net, якобы сложно переучиваться, хотя хуй знает, как вообще можно не осилить фигурные скобочки. > Какого это вообще работать в микрософт, получать жирную котлету и закрывать тасочки по разработке языка, но котором не пишет никто? Его пишут те же разрабы, что пишут шарп, просто парсер языка другой, его и дорабатывать не нужно почти. А кишки всё те же, дотнетовские.
Как перестать читать по три книги Шилда и Троелсена в день, и начать писать йоба пет проекты от которых у ейчаров волосы стоять дыбом будут? >Преимущество перед такими же вкатунами даст парочка интересных пет-проектов где вы делаете всё максимально правильно и точно следуя архитектуре. Например каких?
>>2458799 На самом деле эчарам похуй на твои проекты в 99% случаев. Открываешь вакансию на вкатуна в пятницу, в понедельник там 400 откликов. Если у каждого гитхаб 5 минут смотреть, это займет 33 часа.
>>2458799 >>2458848 Да никакие HR не будут смотреть ваши гитхабы. Хрюши смотрят на резюме и за 30 секунд определяют. До гитхба доходит только если ваше резюме посмотрели и не выкинули
>>2458913 Так я в курсе. Мой гитхаб вообще не смотрели, даже тестовое попросили зипкой скинуть. Мой знакомый месяц ловил отказ за отказом, потом переработал резюме на покрасивше, поставил фотку красивую, после этого пригласили на 3 собеса, где он получил по офферу.
>>2458919 >Мой знакомый месяц ловил отказ за отказом, потом переработал резюме на покрасивше, поставил фотку красивую Всё так, к сожалению вычислением нормальных кадидатов занимается хрюша которая ничего не понимает в айти и ей только остается ориентироваться на ключевые слова в резюме и фоточку
>>2459304 Зумеры не знают таких тонкостей. Чорное текстовое - это консолечка, которой пердолятся красноглазые. Этого достаточно, чтобы вкатиться на галеру джуном.
Подскажите, в чем проблема с Докером. На docker hub`e лежит image. В нём aspnet core api с DbContext`oм у которого в конструкторе Database.EnsureCreated()
Проблема, что на сервере (консоль 1) бд походу не создается и падает с "No such table", а на моей машине (консоль 2) все запускается идеально и создается бд.
Команды запуска идентичны, при локальном запуске тоже всё работает.
>>2460444 Я ХЗ, в зависимости от того, что конкретно тебе надо. Если надо выебнуться, сделай каждый стейт отдельным классом, с методами EnterState и ExitState, В которых будет делаться то, что на пикче. А ещё лучше сделать интерфейс и один класс-реализатор с методами-делегатами и сразу лямбдой при создании программировать эти действия.
>>2461220 По первому доёбу: почему бы не юзать вместо енума класс? Понятное дело, всахара не будет, ты будешь видеть свой енум как класс/структ, но все фишки типа методов и реализации интерфейса будут: > public static class TokenType { > public const int IDENTIFIER = 0; > public const int NUMBER = 1; > public const int ASSIGN = 2; >} Читаем дальше.
>>2461220 ну функциональные интерфейсы и анонимные реализации вещи годные. просто ведь шарп вырос из жава клона, то как бы много не накопаешь фич а вот если котлин пригласить в тему, то набросить можно много
>>2461235 >У интерфейса не может быть экземпляров. Их и нет. это такой же класс, который требует реализацию, просто описывается на месте и потому без имени.
Абсолютно идентично как метод принимает делегат, а ты ему пропихиваешь анонимную реализацию этого делегата, то бишь ламбду
Только лямбда это один метод, а анонимная реализация интерфейса это можно более одного метода. В итоге ты волен выбирать - нужен один метод, можешь лямбду, нужно несколько, можешь анонимную реализацию
Есть сложный объект <id, id1, id2...> и массив Как найти через linq объект с id1, в котором все значения из массива есть в id2, то есть id| id1 | id2 1 | 1 | 1 2 | 1 | 2 3 | 1 | 3 4 | 2 | 4 5 | 2 | 1 и массив {1, 2, 3}
Надо вернуть id1 = 1. Или надо свою реализацию писать? i
>>2461220 Последняя хуйня была бы оооооооооооооооооч полезна. Особенно в случае LINQ, потому что это буквально бесит, то ты не можешь нормально интерфейс оттуда вернуть, особенно если LINQ у тебя в другом методе. >>2461230 Вот я делал парсер простенький для нужд. Нужны условия в духе: если до меня был такой-то знак, а после - такой-то я должен создать такую-то лексему. Ты просто не представляешь какая это боль в контексте шарпов. У тебя будет что-то в духе:
public class Token { public readonly int? Line; public readonly int? Col; public readonly string Symbol;
public static readonly Token Space = new (" "); public static readonly Token SingleQuotes = new ("'"); public static readonly Token DoubleQuotes = new ("\""); public static readonly Token Slash = new ("/"); public static readonly Token BackSlash = new ("\\"); public static readonly Token Space = new (" "); public static readonly Token Comma = new (","); public static readonly Token OpenCurly= new ("{"); public static readonly Token CloseCurly = new("}"); public static readonly Token OpenRound= new ("("); public static readonly Token CloseRound= new ("("); public static readonly Token OpenSquare = new("["); public static readonly Token CloseSquare = new("]"); public static readonly Token BEGIN = new("BEGIN"); public static readonly Token END = new("END"); public static readonly Token ASSIGN = new("::="); public static readonly Token EOL = new("\n"); }
И это уже пиздец. А тут еще логику нужно вопхнуть и это будет пиздецки больно. А еще ходить туда-сюда, в поисках нужного. И много еще чего веселого. Я в итоге когда это делал - забил на ООП и попытки делать "красиво" и хуйнул как деды хуярили свичем и за один проход, ибо нехуй.
Как мягко намекнуть джуну, что 0 в индексе удобства поддержки в коде, который пишется руками - это нихуя не норма? Просто я чет был занят своими делами, а остальным - так-то похуй. Но сегодня разгреб свои, решил посмотреть что там у других и, блядь. 0, сук. Я даже от автосгенерированного кода такой хуйни не видел. Посмотрел - там пиздец, метод 2,5к строк, который хуй пойми как работает. Работает при этом до пиздеца медленно. Чел - просто по фану решил создавать словари, пихать в них свойства, которые рефлексей достает, потом в цикле проходится по словорям и смотрит с каким свойтсом другого обхъекта имена совпадают, потом... Ну вы поняли, там пиздец, который во первых - нечитаем, во вторых - нахуй не нужен, в третьих - еще и жутко медленный со сложностью O^4. Я просто чет охуел с такой жизни. Не хочется показываться токсом, но я уже раз 5 в других местах ему подсказывал, по сути - писал половину кода, ему только дополнить свою часть нужно было, но когда чел береться сам - вот такая хуета выходит. Что делать-то? Опять же - не хочется быть токсом, но кроме матерных слов - других нет.
Пытаюсь проходить уже третий курс по ASP и везде одна и та же проблема: показывают, как сделать, но не объясняют, почему так и как это все целиком работает. То есть я даже не могу понять порядок выполнения кода от начала до выдачи жсона/хтмл. Где можно добыть эти знания и болеее углубленное понимание разных тем? Например что за наследование от DbContext и конструктора в этом классе от base с options. Или принцип работы мидлвара и всякие конфигурации. Есть книжка Фримана, но она аж на 1,5к страниц. Я планировал уже после нг работу искать, а с ней зависну на полгода минимум. Плюс надо еще учить базы данных, фронт, гит и прочие мелочи. И пет хуярить.
Я хочу, чтобы ивент Changed передавал что-то со значениями до изменения.
Если Action<int, string>, то вне класса не совсем непонятно, что это такое, и нет ссылки на сам объект. Последнее можно решить через Action<Yoba, int, string>, но мне кажется так даже хуже.
Запилить YobaChangeEventArgs : EventArgs со свойствами типа OldNumber и OldText, и сделать ивент через EventHandler<YobaChangeEventArgs>? Или лучше свой собственный делегат с параметрами (Yoba sender, YobaChangeEventArgs e)?
>>2461581 > Как мягко намекнуть джуну, что 0 в индексе удобства поддержки в коде, который пишется руками - это нихуя не норма? Вот это предложение что значит?
Есть поток сообщений, которые парсятся, валидируются, а потом отправляются в дальнейшую обработку. Можно ли сделать так, чтобы они парсились и валидирлвались в отдельных тасках в несколько потоков, но при этом отправлялись в дальнейшую обработку в том же порядке? Есть ли в этом смысл вообще? Какие инструменты можно использовать для такого дела?
Посоны, возник вопрос. А в России можно найти какую-то супердешевую part-time работу для хорошего разработчика на дотнете. Чтобы работать час в неделю условно и получать за это тысяч 30-40 рублей? Работать строго удалённо, из-за рубежа (и прописать это в ТД для налоговой).
Смысл в том, чтобы эти небольшие деньги кидать на ипотеку оставшейся в РФ квартиры.
Или лучше искать зарубежных заказчиков на большие суммы и переводить в РФ.
>>2461956 >C точки зрения малолетнего долбоёба - безусловно. Мой российский доход за полный рабочий день - 230К чистыми. Кто из нас с тобой - малолетний долбоёб?
у него типичный вопрос вида - я пилю свое событие, нужно ли мне обязательно делать его EventHandler<EventArgs> (вдруг у меня 10 событий и КАЖДОМУ сделай класс аргументов "патаму шта...марамушта")
или тупо можно Action<T> благо они появились в шарпе и "нахера мне вся эта портянка с EventHandler<EventArgs>"
>>2462017 Лол, нищенка думает что его копейкам кто-то завидует. Понимаю, твоя сифозная мамаша устроила тебе трудное дество, но держи его при себе, никто кроме твоей блядской семейки в этом не виноват. :)
>>2462016 Ебанашка, ты передел в лужу якобы механизм языка event убог, хотя по факту убог только твоей мелкий мозг. Cобытие вообще не проблема сделать как угодно и запилить свои аргументы вообще не проблема, проблема бывает только тогда когда автор фреймворка не предусмотрел а тебе это нужно позарез, такое в винформсах иногда встречается например.
>>2462084 >якобы механизм языка event убог Дебилушка, все именно так
Для отписки нужно дать делегат, причем именно тот же. Попробуй реализуй подиску и отписку в обработчике события и сам увидишь насколько это коряво. Легко вообще можно забыть отписаться.
Сравни это хотя бы с подходом, где можно получить токен и просто диспознуть его, тем самым отписавшись. С lifetime еще удобнее - там просто невозможно забыть отписаться.
Про события и многопоточность там вообще нет нормального решения - есть только "нуу вроде бы это получше других будет"
>>2461784 Нашел версию 2021 года, но там пятый дотнет, который с шестым вообще не клеится, все нахуй поменяли. Ставить пятый или искать что-то другое? К моменту моего устройства многие уже скорее всего будут сидеть на 6 версии, ибо лтс.
>>2461848 >Вот это предложение что значит? Ты студию открывать пробовал, няша? Это конечно не 100% критерий, но 0 тут - это уже страшновато смотрится, я такого никогда не видел от кода людьми написанного, худшее что я от людей видел до этого джуна - 40. >>2461656 Я пришел с работы в 11 вечера. В конце дня как раз кодом джуна занялся. Писал на эмоциях. >>2461593 Я же не хочу быть токсичным. Хочу как-то мягко намекнуть, что код в духе второго прикриплейд НЕ ОЧЕНЬ. И когда такой метод 2,5к строк - разобраться в нем СЛОЖНОВАТО.
>>2462148 Я воспроизвел. Код с работы, внезапно, на работе, и показывать его в интернетах - незя. Под страхом выебут. И да. Я в душе не ебу зачем чел это сделал. Я долго пытался вникнуть. Так и не понял. Завтра спрошу.
>>2462078 >Лол, нищенка думает что его копейкам кто-то завидует. >Понимаю, твоя сифозная мамаша устроила тебе трудное дество, но держи его при себе, никто кроме твоей блядской семейки в этом не виноват. :) Какой-то токсичный инцел порвался. Тут у вас такое часто?
>>2462199 Я если что - шутил. Воть. Ну, типа что в ООП и жава-подобных языках - принято же нахуячить миллион абстракций, фабрик и т.д. Как же я люблю свои шуточки объяснять...
Написал я приложение для человека корочи. Запускает он его на маке а там какую то ебанину пишет в консоли. Даже разбирается не стал что за хуета. Установил он виртмашину корочи. На виртуальной машине не работает var context = await httpListener.GetContextAsync(); И это блять кроссплатформенность?
>>2462353 как будто под виндой проблем нет. Создаем httpListener, биндим его на ip машины на кастомный порт и получаем "идинах" при попытке запустить его без прав админа (решается добавлением правил в брэндмауер)
>>2462116 >, все нахуй поменяли. Ставить пятый или искать что-то другое? К моменту моего устройства многие уже скорее всего будут сидеть на 6 версии Я х.з. в чем проблема. Я вообще особо не заметил перехода с 3.1 на 6.
>>2462362 >>2462358 Я этим вопросом не интересовался и верил только на слова >Совместима с такими операционными системами как Windows, Linux и macOS. Была выпущена компанией Microsoft. А на деле залупа выходит. Есть ли вообще гарантия что приложение заработает на win10 первой версии и win10 с последними обновлениями?
>>2462369 это все пустые слова. запускаю и на убунту и на маке. Проблемы только с самой авалонией, но что поделать - оно сделано энтузиастами. Даже мелкие ниасилили поддерживать столько сколько они.
>>2462369 >А на деле залупа выходит. Ты так говоришь будто бы с любым другим приложением/языком/фреймворком нет залупы при попытках разработки/сборки/запуска на разных платформах.
>>2462383 С джава такая же хуйня? Просто миокрокодилы заходят в тред и постоянно пиздят что кроссплатформенности нет, их постоянно шлют нахуй и говорят что есть. Вот я подумал что это пидоры просто завидуют вот и пиздят всякую хуйню. А как столкнулся дак чет начал задумываться мб они и правы.
>>2462243 >Мало кто остаётся инцелом когда твоя мамаша на гастролях :) Ты главное не волнуйся так сильно, Скуф, в твоём возрасте это вредно. А то не доживёшь до аванса в 20К.
Сап, сидельцы Какой сейчас положняк между систем.текст.жиссон и ньютонсофт.жиссон? Что лучше и почему? Для аппа на коре 3.1 Вроде как общепринятым стандартом является ньютон, но чому?
>>2462476 >Инфа от твоей мамаши заразившей сифилисом половину казанского вокзала? Такой себе источник информации. Ты зря разнервничался так. У меня российский проект на 230 тысяч российских и американский заказчик на 3К$. Это в сумме под 7К$. Что в принципе уже может позволить комфортно жить и в Западной Европе, например. Когда через год продам трёхкомнатную квартиру в Москве, чтобы не платить налог, буду перебираться как минимум в Португалию.
У тебя зарплата примерно 600-700$ по нынешнему курсу (правда ты получаешь в фантиках, на которые можешь купить всё меньше и меньше товаров с учётом отсутствия импорта и инфляции в 20%; если валютное регулирование отпустят, твой доход упадёт по 150-200$). Ради этих денег ты должен работать 5/2 8 часов, появляясь в офисе ровно в 9 утра. Твоё резюме не котируется на линкеде и даже на hh. За годы твоего стажа ты бы мог стать хорошим специалистом, но остался бюджетной макакой.
Вот по этому ты и злишься. А я не злюсь, мне тебя жалко.
Господа решёткобояре, хочу писать пет на asp.net и всвязи с этим у меня вопрос: Есть ли разница писать под Виндухом или под Линухом? Где разработка протекает менее ухабисто?
>Не стоит ожидать, что Microsoft когда-либо будет использовать MAUI внутри компании. Я даже готов поспорить, что они никогда не создадут серьезный продукт на Blazor. Выбор технологического стека, особенно фронтенда, делается не так, как в Dogfooding. Насколько я знаю, это полностью зависит от команды разработчиков, и, как и все в этой индустрии, большинство разработчиков больше знакомы с JS/TS, чем с чем-либо еще. Это не заговор и не алая буква на MAUI/Xamarin, это просто та же история о том, что JS/TS съедает все. >В MSFT я наблюдал, как они взяли внутренний инструмент ML, который изначально был создан на C# для windows, полностью переписали с электронным фронт-эндом, чтобы сделать его кросс-платформенным. Я так и не увидел его релиза, который в итоге работал бы без тонны сбоев, но это не важно. Когда я спросил, почему команда не создала фронт-энд на Xamarin поверх существующей базы кода, они просто не имели понятия, о чем я говорю. >Реальность такова, что если вы не докажете вышестоящему руководству, что расширение внутреннего использования или дальнейшее развитие фреймворка (созданного MSFT или иным образом) каким-то образом принесет больше расходов на Azure (это не так), у них нет стимула отдавать предпочтение этому стеку перед любым другим. И без реальных усилий по продвижению на рынок и продвижению этих фронтенд-фреймворков на фоне доминирования JS/TS, они будут продолжаться так же, как они продолжались годами - просто еще одна абстракция пользовательского интерфейса, увядающая на лозе, поддерживаемая все более скелетными командами компаний, которые исторически использовали C#. И как бы унизительно это ни было для тех из нас, кто потратил значительную часть своей карьеры на веру в них, в краткосрочной перспективе это имеет смысл для бизнеса. Я, честно говоря, не уверен, имеет ли это смысл в долгосрочной перспективе, хотя, как ни больно, вероятно, имеет, но это выходит за рамки данной темы. >Но если ваш случай использования соответствует идеальному (непотребительские LOB-приложения в существующем магазине C#, имо), сантехника для MAUI существует уже давно и, вероятно, будет в порядке. Если вам нужно, чтобы MSFT использовала его прежде, чем вы сможете, вам следует двигаться дальше.
А как сделать так, чтобы в диспетчере задач процесс одного приложения был под катом другого процесса? Вот как на прикриле сделано?
Вот я с помощью одного приложения запускаю другое и оно норм уходит под кат первого. Но затем я во втором запускаю окно и теперь втрое приложение полностью становится отдельным процессом в глазах диспетчера задач.
Я знаю что окна работают в отдельных процессах, типа [STAThread], но ведь когда я в рамках одного приложения запускаю несколько окон, они считаются частью одной группы.
Я пытался установить owner окну и все норм, кроме отображения в диспетчере задач.
шарпач, посоветуй как правильнее определить наличие загруженного длл. сейчас я делаю пикрелейтед(сравниваю версию длл) и это вроде работает, но проблема в том что есть пачка длл с одинаковыми .Name как их различать? можно ли попробовать через Type.GetType? если, допустим, есть определенный Type, то значит длл точно есть?
>>2462104 Если ты долбоёб подписался лямбдой и спрашиваешь почему тебе не дают отписаться АНОНИМНЫМ методом (если не понял, он по определеню одноразовый), медицина тут бессильна...
Токент тебе тоже надо где-то хранить, так что если нужна отписка делай именной метод.
>>2463005 >...спустя полгода: > Wpf, uwp, win ui3, maui, НашОхуетьКакойТулкит, сука блять, что это за зоопарк?
Потому что желание противоречит реальному положению дел. Любой, кто пытался запилить "универсальную функцию" понимает о чем я пишу. Это просто не реально. Вся эта универсальность приводит к утяжелению и малой производительности.
Задумывают всё это "эффективные менеджеры", а исполнители практикой доказывают, что это в общем-то невозможно. Имеем что имеем.
>>2463021 > Вся эта универсальность приводит к утяжелению и малой производительности. Кроме МВВМ, МВВМ - это исключение из правила. Она совсем чуть чуть снижает производительность, зато ты всегда можешь сменить фронт. Тебе нужно только новые вьюшки на новом фронтенде написать, а всё остальное у тебя уже есть. Начал на ВПФ, понадобился линукс - дописал вьюшки на авалонии, собрал, раздал красноглазым.
Тупой вопрос. Как так может быть, что я создаю семфаорслим, с конструктором (0,1). Релизю его ровно в одном месте один раз когда мне надо. И при обильном использовании потоков - получаю эксепшн, типа уже отжали больше максиамльного числа раз. Как это блин происходит? Я не понимаю. И типа на маленьком-то - не возникает жи. Типа ну да и да - все точно. А создаю 50к потоков - и вот, в рандомный момент времени - возникает. Что эт за хрень-то? Поясните.
> почему тебе не дают отписаться АНОНИМНЫМ методом где я сказал что не дает? Я сказал, что если тебе нужно отписаться сразу после получения события (одноразовое получение), то тебе нужно городить огород.
>так что если нужна отписка делай именной метод покажи мне мастер класс как с помощью ИМЕННОГО МЕТОДА делается отписка в обработчике события. то есть подписываешься (обычно на локальный объект) и после первого получения события отписываешься. А мы посмотреть.
>Токент тебе тоже надо где-то хранить Достоинства одного подхода - недостатки другого. Такова жизнь. Единственное удобство делегатной отписки - можно не хранить ничего и вызвать потом из Dispose (правда это является и недостатком). Да и не не относится к локальным объектам подписки
Ну а неудобства перекрывают удобства. Нужно постоянно писать код с оглядкой на "не забыть отписаться", ведь можно ("сделали 10 подписок - сделали 10 отписок", а потом "ой одну забыли".) Даже вот WPF написали с оглядкой на weak events ибо не нашли нормального способа дать возможность кодеру нормально отписываться. И все MVVM фреймворки основаны на weak events чет как то решили они проблему отписок путем "не будем вообще использовать обычные event где нужно подписываться" )))
Польза токенов - ну их можно, ДА, куда то сложить и потом разом все диспознуть. Решение проблемы "сделали 10 подписок - сделали 10 отписок". Конечно и токен можно забыть сохранить для диспоза, но тут на сцену выходит lifetime - там не забудешь и токены собственно не нужны. Но даже токены лучше того что есть.
Про многопоток разумеется обсуждать не будем - там все плохо, но можно сказать, что "у меня формсы какой еще многопоток". так что только про подписки.
lock (balanceLock) { } Зачем нужен locker ? Пишут что >При синхронизации доступа потоков к общему ресурсу блокируйте выделенный экземпляр объекта (например, private readonly object balanceLock = new object();) или другой экземпляр, который, скорее всего, не будет использоваться как объект блокировки другими частями кода. 1лок-1обжкт. Но почему не сделать бы lock () так? Что еще можно класть и делать с lock ()?
>>2463172 очевидно потому что "оно было раньше" ньютон был до пришествия текст.жсона. перегружен фичами. Кому нужна была скорость - было на выбор куча вариантов (некоторые из которых по скорость/потребление памяти дают пососать и текст.жсону)
Потом вышел текст.жсон но а) он поддерживает только часть фич и переводить неудобно б) также слепили свое JsonPropertyName вместо родных аттрутов из компонент модел. Причана вроде бы - не хотим тянуть за собой сборку с этим аттрибутом чтобы всякие блазоры не перегружать весом)
так что щас текст.жсон он находится в середине крайностей "фичи" и "скорость/память"
Ребят, как в линке в джоине двух списков/таблиц в select new {name = A.name ... етц} поставить условие. Мне надо сравнивать два числа и меньшее записывать в поле, но я чет не очень синтаксис понимаю..
>>2463202 class A{ int id string name int? money (нуллабл окда) }
У мня есть два списка: List<A> spisok1 и List<A> spisok 2
Я делаю var leftOuterJoin = from s1 in spisok1 join s2 in spisok2 on s1.Id equals s2.Id into temp from s2in temp.DefaultIfEmpty() select new { Id = s1.Id, Name = s1.name, Money = ??????? };
Так вот- в этом Money = ??????? я хочу получить меньшее из s1.Money и s2.Money. А идеально получить - меньшее, либо то которое не нулл, либо нулл если оба нулл
>>2463017 нее у человека который те дллки написал все в этом плане типтоп, это я макака сбоку. вот такое вымучил. используется только один раз за всю жизнь программы, если type найден его же и использую, если нет то логика другая будет. вроде бы работает. за такое не бьют палками?
Есть метод, у которого в качестве возвращаемого типа указан базовый класс, а сам метод может вернуть несколько разных сабклассов. Как об этом узнать, не заглядывая в код метода? Можно это как-то задокументировать?
>>2463390 Не-не, что-то вроде пикрелейтейда. Если не смотреть в код Class.Check, то как узнать, что он вернул не CheckResult, а NegativeResult? Понятно, что можно сделать .GetType(), можно через is и as, а как-то иначе? Задокументировать это как-то можно? Я смотрел xml документирование, но, если я правильно понял, <returns>description</returns> предлагает просто описать смысл возвращаемого и всё, тэгов для типов нет.
>>2462589 Кроссплатформенного ГУИ на шарпе никогда не будет. Нужен кроссплатформенный ГУИ - бери Qt, electron, awt/swing + flatlaf, compose multiplatform.
А вообще десктоп гуи сейчас очень мало кому нужен (а тем более кроссплатформенный). Если он вам нужен, то лучше подумать еще несколько раз, так как веб хуйню в разы проще запилить.
>>2463415 Почему, технически вроде не сложно. Остальные фреймворки слишком маргинальные, нецелесообразно тратить ресурсы на их освоение если будет поддержка от гиганта вроде МС, я надеялся что так будет в случае МАУИ.
>А вообще десктоп гуи сейчас очень мало кому нужен (а тем более кроссплатформенный) Что за привычка всё мерять потребностями быдла которому кроме инсты в телефончике ничего не надо?
>>2463415 >десктоп гуи сейчас очень мало кому нужен внезапно он нужен конечному пользователю. но кто спрашивает конечного пользователя )
>>2463369 сравнивать руби с шарпом нельзя - они вообще из разных миров.
Лично я когда то любил руби. НО задолбало писать как в блокноте - никогда не знаешь что в текущем классе у тебя есть. И высматривать глазами чужой код бесполезно - хер знает где и как расширен класс. Понятно, что если пишешь постоянно на руби, то проблемы нет, но если это не основной язык и просто не помнишь. Даже писал свой модуль, чтобы по бряку можно было видеть что через миксины напихали в объект. В итоге свалил на питон - возможности магии приличны, но при этом сильный тайпхинтинг, да и генераторы мне ближе чем фиберы. Ну а количество готовых решений на все случаи жизни делает питон лидером в практичности. У руби же ниша - ROR
Ну а сейчас есть котлин, где тебе и статическая типизация (жаль что по жавовски конечно) и богатая поддержка возможностей лепить DSL
>>2463237 Всё збс, но вот здесь > Math.Min(s1.Money.Value, s2.Money.Value) выдаёт предупреждения, что значения могут быть нулль. Я умом-то понимаю, что конкретно в этом месте шаблона - не могут, но как это конпелятору обеснить?
>>2463443 После руби жрать жабью инфраструктуру (даже через котлин), это как после торта есть недельный черствый хлеб. А так из тебя сыпятся шаблонные мантры из ютуба, что ставит твое мнение не выше плинтуса. питон то еще костыльное говно
>>2445746 (OP) Почему я все время слышу, какой шарп охуенный, быстрый, удобный, фичастый, но на нем ничего из сильно крупного не пишется? Только сами майкрасофты и пихают свое поделие в какой-нибудь бинг. Остальным крупным игрокам похуй. Будут держать код на джаве, будут начинать новые проекты, будут делать высоконагруженные сервисы, писать инфраструктуру на го, на джаве, но не на шарпе. Почему так? Или я не прав?
>>2463921 Мелкомягкие тащемта просто долбоебы, разгадка проста Раньше: зачем нужен сырой аналог жабы только под шиндовс, когда есть проверенный кроссплатформенный обратносовместимый инструмент? Теперь: нахуй нам вообще задумываться об использовании мелкомягкого кала, когда есть ГОвно или проверенная жаба Вот и все, вы успешно проебали рынок
>>2463921 Крупные игроки не хотят зависеть от вендора. Почему С++ может быть в гугле, а шарп не будет там никогда. С++ имеет комитет и стандарт, ты не зависишь не от кого (свой компилятор налапатишь если надо). Так же, когда гугл высрет свой карбон, кроме гугла никто не будет его юзать (из крупных игроков). Потому что никто не хочет завязнуть на чужом продукте, особенно когда могут сделать сами свой.
В тоже время мягкие показывают, что они делают именно продукт. Например студия частично написана на шарпе, что как бы показывает - мы используем шарп во флагманском продукте и тем самым показывая какие-то гарантии. А вот если взять котлин, то мы видим что за 6 лет не один флагманский проект не был переписан на него и тут сразу ловишь себя на мысли, если они не рискуют, то почему я должен рисковать своим продуктом?
>>2463921 Что касается джавы, то саны, перед тем как слохнупнуться, сделали жабу попенсорс и чем спасли бизнес, который в жабу вляпался. Поэтому до сих пор все идет по инерции, но сама жаба не развивается и протухает. Лишь благодаря мобильниками и натянутым на глобус конференциям ты еще не проводишь параллель между джавой и коболом. Забавно, котлин топит в мобильниках джаву, джава топит котлин за собой весь JVM
>>2463944 Говно не вывозит многолетние проекты. Фанатики, конечно, могут писать на чем угодно и сколько угодно, но все что кроме круда в го вызывает анальный зуд (это просто какой-то перманентный бойлерплейт).
У жабы настолько протухшая тырпрайзная экосистема, которая вообще никак не оптимизированная, что надо быть немного странным чтобы стартовать на этом новые проекты. Собственном на этом го скорее всего и выстрелил, сойдет даже говно, лишь бы снова на жабе не писать сама жаба проста и быстра, но не слоенный, не оптимизированный тырпрайз
Заходишь такой в шарпотред. Такс, чо тут новенького у вас? > котлин > котлин > жаба > го Вы чо охуели блять? Создайте тред котлина и сидите там. Что такое котлин? Котлин это > function GoFuckYourSelf(HowFuck: TObject) : TFuckStyle; > var > TempFuck : TObject > begin > TempFuck := HowFuck; > result := CreateFuckStyle(TempFuck); > end;
>>2463985 >Говно не вывозит многолетние проекты Понимаешь ли, затс джаст лайк, юр опинион, мэн. А крупные игроки просто берут и используют говно, в бэке, в многолетних проектах. Кроме самих гуглов, говно используют те же майки, нетфликс, пэйпал, клаудфлейр, убер и т. д., а шарп - нет, кроме самих же создателей.
>>2464352 Тебе и сказали что это круд микросервисы, которые переписать дешевле чем новую команду собрать. Сегодня там микра на го, завтра на жопоскрипте. Тут как раз бизнесу и насрать, лишь бы гребцы были.
Шарп второй язык в вебе, как среди общего числа, так и среди миллионников, естественно его используют многие, кроме твоим манямирков, конечно.
>>2464409 Linq будет транслироваться в sql, если мы, конечно, не о linq to objects говорим. Нужно уметь читать запросы, в которые он транслируется, понимать как они будут исполняться, как работает база и т.д. Как можно их оптимизировать. Частенько для части запросов приходится выкидывать нахер тот же EF, и ебашить запросы ручками (ну или Dapper'ом), иначе с производительностью все печально будет.
>>2464383 >это круд микросервисы, которые переписать дешевле чем новую команду собрать >Сегодня там микра на го, завтра на жопоскрипте Очередная мантра про "ряя тока микросервисы!!" Мань, там на оф. сайте го есть кейс стадиз, компании рассказывают о том, как используют го. Посмотри на их круды и микросервисы, лол. Ну не позорься ты так, не рвись, твой манямирок же можно разбить одной ссылочкой на сайт го. >Шарп второй язык в вебе, как среди общего числа, так и среди миллионников, естественно его используют многие Многие-то многие, только мы про крупных игроков уровня фаанга говорим. Перечитай пост, с которого обуждение началось. И иди проспись.
Щито поделать, никогда шарпа (за пределами мелкомягких) уже не будет в крупнейших передовых компаниях, лидерах в своей отрасли. Ява - есть, го - есть и его будет еще больше, шарп - нет. Зато лавочка ашота на 900.000 месте написана на шарпе, это да, этого не отнять. Но не нетфликсы и клаудфлейры, увы и ах.
>>2464469 >Шарп второй язык в вебе, >как среди общего числа (количества), >так и среди сайтов миллиоников (качества) Но жопочтец продолжает писать >Кококо кроме мягких негде используется
>>2464469 >Шарп второй язык в вебе, >как среди общего числа (количества), >так и среди сайтов миллиоников (качества) Но жопочтец продолжает писать >Кококо кроме мягких негде используется
>>2463985 >Говно не вывозит многолетние проекты Тащем-то на го я вижу кучу популярного опенсорса вроде докера, кубера, опеншифта, терраформа, консула, кокроача, которому уже немало лет. На шарпе так нихуя опенсорсного и не написали, кстати, ну или написали, но оно умерло(.
>>2464513 Не, в крупные конторы аля фаанги шарп не завезли, от того и инфры на шарпе нет, как нет и экспертизы в дотнете. Пока крупняк не начнет массово использовать шарп, то шарп так и останется технологией для небольшого бекенда в маленьких аутсорс конторках, либо в госсекторе с формочками.
>>2463979 >котлин, то мы видим что за 6 лет не один флагманский проект не был переписан на него Часть кода IDEA написана на котлине, так что флагманский проект jb вполне использует свой же язык.
>>2464610 Тебя укусил делфист и ты уже языков не различаешь зеленка тебе поможет.
>>2464613 >Часть кода IDEA написана на котлине я мимокрок но это не аргумент. Переписана с жавы на котлин. Это ДАЛЕКО НЕ ТО ЖЕ САМОЕ как переписать с любого постороннего языка Даже студия, в которой я пишу на котлин при вставке кода на жаве тупо конвертит ее в котлин, а дальше только причесать
>>2464584 Инвалид, ты опять выходишь на связь? Нет бы устроится разработчиком, и стать полезным, ты как аутист лазаешь по всеи этим тредам? Зачем? Иди лучше бампай тухлый тред раста.
В целях безопасности в асп выпилили идентифицирующие хедеры, и новые проекты перестали попадать в список. Рост жабы, тут как раз из-за падения пхп и шарпа.
>>2464607 >почему твой список не написали на жаве например Наверное жаба для других задач больше подходит, и вообще причем тут она? Ну а вообще докер изначально был написан на питоне, только спустя время его на гоху переписали. Кубер изначально создавался в гугле, где его изначально на го начали писать, что в целом ожидаемо. Вообще всякие задачи контейнеризации-виртуализации было бы странно решать используя жабу.
>>2464618 >я мимокрок но это не аргумент Ну там выше шизик рассказывал, что студию частично переписали на шарп, я привел как аргумент, что идею тоже частично переписали на котлин. Да, переход C++ -> C# и Java -> Kotlin намного различается по сложности, но мы же не про сложность перехода говорим? А так на котлине сейчас весь андроид держится, там уж точно много чего было переписано.
>>2464604 Еще один жопочтец, тебе не сказали нельзя, а сказали что оверхедно. Можно написать и на С++ это все, но тебе мальчику выращенному ютубом сражу покажется это накладным, так же и здесь можно рогом упереться и написать на бойлерплейтах, но ну его нафиг.
>>2464623 >Наверное жаба для других задач больше подходит, >и вообще причем тут она? а причем тут тогда шарп? жава находится даже в более выгодной позиции, ведь за ней не тянется предание "не умеет в кроссплатформенность да и вообще злой мелкософт может сделать кусь. апасна"
> задачи контейнеризации-виртуализации было бы странно решать используя жабу. С шарпом та же история, но тебя это чет не смутило.
>>2464632 >мы же не про сложность перехода говорим? нет. мы именно про нее и говорим. Берем сложный проект и переписываем его на го допустим. Можем переписать? да даже на батниках можно писать и на синклер бейсике. Вопрос в том сколько это времени займет.
>>2464638 >тебя это чет не смутило А почему должно было смутить? Изначально речь шла о том, что го кроме как для крудов, бесполезен, однако это не так и на нем много долгоживущих проектов написано, в отличие от шарпа, где опенсорса не видно и не слышно. Про контейнеризацию, вирутализацию и жабу уже другой разговор.
>>2464613 Второй по популярности язык в вебе, но жаба макака все еще маневрирует фразами "а вот этой компании его нет, значит его нет вообще нигде". Иди уже.
>Часть кода IDEA написана на котлине Показывает нам бесплатный продукт и тот только частично на котлине. Вот когда идею на котлин перепишут, тогда на твой котлин и начнем смотреть как на продукт слишком гладо про интероп стилили. Сами не рискуют переписывают свои продукты, а мы должны.
>>2464637 >тебе не сказали нельзя, а сказали что оверхедно Оверхедно это анальный зуд при написании проектов-долгожителей на го или ты про оверхед в шарпе? Нихуя не понял.
>>2464638 Жаба не имеет никакого отношения к тому, что существуют крупный популярный опенсорс на го.
>>2464638 >мы именно про нее и говорим Ты говорил про переписывание флагманского продукта на свой язык. Jb переписали часть идеи на котлин, и новые фичи тоже в основном на котлине пишутся, так что флагманский продукт вполне успешно использует язык компании.
>>2464644 изначально (и всегда) речь шла о том, что go это бойлерплейт язык. И чем больше проект, тем больше кодирования. Поэтому для мелочи оно удобно ведь пока начинает бесить это - уже все написал.
>>2464646 >Жаба не имеет никакого отношения к тому верно. как и шарп не имеет отношения
ты привел список из которого негласно следует вопрос "а где ТАКОЕ ЖЕ на шарпе". А где ТАКОЕ ЖЕ на жаве? у шарпа своя ниша - почему вдруг продукт должен оперсонсным и вообще орать на каждом углу что он шарп?
Типичная "ошибка выжившего"
ps: да (цензура) форма поста. какой макака ее разрабатывал, пишешь текст вслепую
>>2464645 >жаба макака Я вообще никак с жабой не связан.
>>2464645 >Показывает нам бесплатный продукт и тот только частично на котлине. Вот когда идею на котлин перепишут ???? Я тебе скинул репозиторий идеи, которая действительно частично на котлине написана, как и студия частично на сишарпе. В чем причина подрыва?
>>2464650 >А где ТАКОЕ ЖЕ на жаве Почему на жаве должен быть написан докер? Но если тебе интересно, то как минимум на жаве есть другие крупные опенсорс проекты - кафка, эластик, хадуп, зукипер + написаны бд вроде кассандры и H2. А разговор шел про то, что на го все-таки есть крупный опенсорс, который долго живет. А на шарпе его не видно. Вот и все. На жабе опенсорс как видишь тоже есть.
>>2464658 >Почему на жаве должен быть написан докер? не должен только вот зачем забывать про применимость языка и ставить в пример проекты где "какой то язык применим"
У кого то есть время! и желание! (и необходимость) писать на бойлерплейт языке, да еще делать это опенсорс но не у всех же такая необходимость
Возьмем для примера gitlab. Вот есть gitea - там "православный go" но чет не отправляет на свалку истории она гитлаб написанный на "ужасном богомерзком руби" с дикими тормозам и потреблением памяи. Как так? ведь go же
жаба и опенсорс это нечесна учитывая что шарп как кроссплатформа очень молодой
А по поводу "не видать" так 1 а зачем оно должно быть видно. вот у нас шарп - снаружи не видать. На антиплагиате шарп - снаружи не видать. На стекоферфлоу шарп - снаружи не видать. Знаешь об этом только потому разрабы не поленились опубликовать эту инфу 2 триггер "фатальный недостаток" действует не на всех. И чем больше приложение, тем меньше действует.
>>2464665 >жаба и опенсорс это нечесна А кто говорит о честности? Выше был пост, где было явно сказано, что MS просрали свое время и очухались слишком поздно. Как бы сами разработчики платформы и их хозяева проебались.
>>2464665 >антиплагиате шарп - снаружи не видать. На стекоферфлоу шарп - снаружи не видать Это не опенсорсные проекты. И другие разработчики по всему миру не пользуются трудом инженеров стаковерфлоу или антиплагиата. А докером и кубером пользуются. Кафкой и эластиком пользуются.
>>2464677 но ведь go быстрее собственно поэому и gitea стали писать
делов то - дописать до уровня гитлаба и перейти. какая проблема? ведь go же - на нем можно писать такой объемности вещи (бойлерплейтно,а потому дольше, но ведь можно же)))
тут кто то распинался что сменить язык изи и вообще go это ня ибо вон на нем есть. Так почему бы gitea который пишется на супер языке просто не вырасти и не выбросить гитлаб. что мешает? (вопрос риторический)
>>2464679 >просто не вырасти и не выбросить гитлаб. что мешает? Потому что гитлаб первым (а точнее вторым) захватил рынок, а gitea мало чего нового предлагает? Точно так же как и жабой-шарпом. Вроде бы шарп охуенный язык, но из новшеств только сахар, поэтому люди дальше на жабе сидят и не хотят с нее переходить на шарп.
>>2464686 фатальный недостаток это когда пишешь свой велосипед потому что не хочешь платить за то что есть или "написано не тобой" (с) мелкие
>докером и кубером пользуются >Кафкой и эластиком пользуются. вот они есть и работают. зачем их переписывать? незачем. Можно родить другой продукт. но какой? Ну придумай такое - раз, запрограммируй опенсорс, то есть за свой счет - два и чтобы это было всем нужное (то есть не было альтернатив и оно захватило место (как гитлаб ниже)).
>Потому что гитлаб первым (а точнее вторым) захватил рынок как и упомянутые тобой продукты. Шарп очень молодой в своей новой форме, чтобы от него ожидать что будет много чего то, чего раньше не было и всем нужно. До сих пор тянется плохая слава прошлых лет.
к тому же опенсорс не требующий доп рантаймов как бы в более выигрышной позиции.
>gitea мало чего нового предлагает? наглядный пример "мощи" go - получаешь быстрый код, но кодишь дольше, намного дольше (если сравнивать с руби)
(я на питоне пишу на порядок быстрее, чем на шарпе)
>поэтому люди дальше на жабе сидят ну жависты особый народ. они закостенелые. их все устраивает. А кого не устраивает - ну те изучают котлин. А шарп то им зачем.
>>2464652 Тебе сказали, что бесплатная приблуда не годиться в противовес продукта аля студия, где она полностью, почти на шарпе. Нахера ты продолжаешь натягивать манямир? У них был полный интероп и время, чтобы показать котлин как продукт, ценой рисков своего продукта. давай, задай этот же вопрос в третий раз
>>2464658 >крупные опенсорс проекты - кафка, эластик, хадуп, зукипер + написаны бд вроде кассандры и H2. Какое-то тырпрайзное говно вы жрете, месье, я лично ожидаю от го или котлина продуктов в виде таркова, раста или геншина импакт. Я уверен что все эти базворды пишутся максимум за месяц, как и все тырпрайзное, оверпразное, не оптимизированное говно (не алгоритмами славится тырпрайз, а умением наслоить тонну говна поверх говна, программистами студентами из индии).
Java: кафка, дженкинс, зукипер, хадуп, кассандра, эластик, нео4ж и т. д. Инфраструктура, банки, высоконагруженный многолетний бэкэнд в крупнейших компаниях мира. Go: докер, кубер, опеншифт, терраформ, консул, таракан и т. д. Инфраструктура, высоконагруженный многолетний бэкэнд в крупнейших компаниях мира. C#: Эээ... Ну..... Инфра-.. Эм-м.. Ну, это.. Майкрасофт, да.. Студия.. Да не успели просто, а крупные компании специально в штаны насрали, бойкотируют.... Зато мы по популярности в мелком бэкэнде с крудами и формочками на втором месте, после такого гиганта бэкэнда, как ПХП. Да-а... )
Смотрите чего придумал! Думаю и так понятно что это. Но суть - да. Помечать сервисы атрибутом и потом просто что-то в духе services.AddServicesFromAssembly(); Какие могут быть подводные камни?
Просто вот лично меня уже долюбило, что я тупо забываю добавить какой-то сервис. Бесит. Как аутист - проверяешь в рантайме, что не упадет когда до нужного сервиса дело дойдет.
Типа я понимаю, что вооот, ты это привязал к магическому атрибуту, вооот. да. На что у меня ответ - не нужно не пользуйся. Но вот мне с забывчивостью - оно бы оч пригодилось. Ну и да, я понимаю что всратенько оно смотрится. Но это опять же не суть.
Но я могу чего-то не знать. Типа возможно майки по каким-то рациональным причинам такую штуку сами не запилили.
>>2464751 не в тему, но я один считаю синтаксис голанга крайне уебанским? я его увидел случайно и подумал что никогда бы не смог писать чисто из-за синтаксиса. так у меня и с C++, и с питоном, и с пхп. Вот у C# супер-приятный синтаксис, писать на нем одно удовольствие. А у вас какое мнение?
>>2464751 >Да не успели просто, именно так. не кросс шарп сразу мимо а кросс - ну в 19м вышел 3.1 кор и все постоянно спрашивали "а готов ли это для энтерпрайз". То есть сомнений выше крыши Про патентную политику мелких та же херня.
>>2464754 Если у тебя несколько сервисов, которые реализуют один интерфейс, то при необходимости замены в DI одной его реализации на другую при таком подходе ты будешь страдать. Плюс, ты банально по всей кодовой базе размазывает конфигурацию DI.
>>2464758 Мне нравится синтаксис щарпа. Приятный. Во многом - лучший в плане код-экспириенса. Но с другой стороны - некоторых моментов с жавы не хватает. Плюс - у жавы вариативность всяких решений. Типа вот нужно мне байтоебить и пилить какой-то там сервер на HTTP'шный - я могу взять Netty, могу Mina. И то и другое - охуенно. В шарпе - я хочу побайтоебить сервер. Ну, кхм, ну вот тебе TCPListener и NetworkStream - развлекайся. Типа я к чему. Язык - охуенный. Но то что большая часть всего завязана на майков - удручает. А оно будет завязано, потому что майки - владельнцы и завтра они решат все сломать - и проект который ты на шарпе для комунити делал - придется переписывать или оставаться на текущей версии. Короче, такое себе. В жаве оно хотя бы если ломаем, то ломаем предупредив и дав время на переход.
>>2464766 > Если у тебя несколько сервисов, которые реализуют один интерфейс, то при необходимости замены в DI одной его реализации на другую при таком подходе ты будешь страдать. Это кстати да, хороший аргумент. Другое дело, что за всю мою недолгую карьеру, я крайне мало видел реальных случаев имплементации одного интерфейса несколькими сервисами не в целях тестирования. Тип даже звучит странно, вот я делаю две реализации одного интерфейса-сервиса. Разве что этот сервис - это некая инфраструктурная хренотень, типо эвентбассов и подобного и мы условно хотим от кролика абстрагироваться. Но их-то и не обязательно таким макаром внедрять.
>Плюс, ты банально по всей кодовой базе размазывает конфигурацию DI. Ну не знаю. Вот конфигурирование роутов - тоже мы размазываем по всей кодовой базе. Чет я мало видел ИРЛ примеров, чтобы кто-то в одном месте все прописал руками, какие методы дергать.
>>2464767 То есть у жавы можно брать сторонние либы, а в шарпе нельзя? ну ну.
не завязано. Наоборот даже - ориентированность "что нужно бери стороннюю либу с нюгета" и отличает шарп Мне жависты постоянно тыкают мол у вас того и этого нет из коробки.
>>2464773 Ну, роуты штука жёстко привязанная к контроллерам. Контроллеры у тебя обычно лежат в одной папке и где их искать ты всегда знаешь. Сервисы же у тебя могут по куче мест быть раскиданы, и в случае чего, тебе придется использование этих аттрибутов по всему проекту искать. Плюс, не знаю как у вас, а мы обычно очень жёстко пилим приложение по слоям на проекты (отдельно Domain, отдельно ApplicationServices, отдельно Infrastructure, отдельно непосредственно сам Web/Grpc Api) и стараемся, банально, чтобы инфраструктура не протекала в бизнес логику. Это же лютая завязка всех компонентов приложения на конкретную деталь реслизации, такую как DI контейнер. Банально, если ты захочешь написать консольную утилиту, которая использует сервисы из проекта с ApplicationServices, то придется и в нее так или иначе тянуть DI.
>>2464767 >Плюс - у жавы вариативность всяких решений В шарпе все выходит на уровень стандартов и это круто, не нужно знать 100500 ORM или http серверов.
На самом деле это все восприятие от евангелистов с ютуба, реальность жабы куда страшнее. Тебе кажется что кругом разнообразие, но как только сделаешь шаг в сторону от топ либ (того же магического тормозного спринга), сразу такую кучу говна хлебнешь. Ты не поверишь, но даже в пхп дела куда лучше обстоят (я сам говна навернул, когда с пхп на жабу ливнул), попенсорс та еще обманка, куда лучше когда софт тебе пишет и сопровождает такая софтерная компания как майкрософт (ну или гугл или еще кто), чем кустари на коленке, делают то что надо их спонсору, или куда страшнее от скуки.
Жаба реально вывозит на своем звездеже, но на деле она уже близка к судьбе кобола. Хз покорит ли шарп мир, но блин точно сейчас не нужно лесть в jvm мир. Да и все равно сейчас проще нанять за твою зп пятерых индусов, чем держать такого мидла как ты.
>>2464767 >я могу взять Netty, могу Mina Потому что тупо ненужно. Ну вот серьезно, ты слезаешь с протокола хттп и с разу попадаешь на tcp/ip, что тебе еще нужно кроме как ручками этот TCP поюзать?? Ну дал тебе нетти пайплайн и что? За то теперь любой затык и ты часами сидишь куришь сорцы/маны на тему как это там работает, хотя этот пайплайн, если надо, написал сам бы за час.
Это очередная прмблуда, которую можно "продать" в тырпрайзном мире, но решает она куда меньше чем на самом деле нужно. да и вроде в шарпах клонировали этот твой нетти и как видишь не прижился
В общем, хватит жрать жырную и вредную пищу джавы, переходи на здоровое практичное программирование.
Можно передать в метод параметр с in, тогда это будет неизменяемая ссылка, а как сделать так, чтобы при передаче копированием тот параметр, куда я передал, был константным? Тоетсь как с in, но без передачи с ссылкой, а копированием?
Использую в коде во многих местах ArrayPool<T>.Shared для Rent и для Return. Как убедиться или как проверить, что я нигде не забыл вернуть в все взятые напрокат массивы, и утечек памяти нет?
Хочу создать словарик Dictionary<char, T> в котором char'ы будут проверяться с учётом игнора регистра. Где взять побырому IEqualityComparer<char> для такого случая?
Ну можешь анализатор написать проверяющий что если взяли в методе то в методе и вернули (и вернули без условий) Можешь взять за правило использовать MemoryPool<T> и using (и проверять анализатором его)
>>2465698 > IDisposable хуйнюшку и в диспозе - возвращать это уже есть. MemoryPool
>Тебе студия будет подсвечивать, что ты забыл задиспозить что-то С чего ей это делать? Откуда ей то знать где именно нужно вызывать Dispose и нужно ли. Это даже кодер не знает
Смотрите, вот в шарпе есть ивенты и у них есть очевидная проблема, что надо вручную управлять лайфтаймом - отписываться когда надо.
Есть ли хоть какой-нибудь вариант их в функцию передать или специальный контейнер закинуть, чтобы можно было в одну строчку потом от всех отписаться в нужном мне объекте? Вариант с двумя лямбдами в которых будет делатьсч подписка и отписка мне не подходит.
Или это ток кастомными реализациями обсервер паттерна делают?
Просто бля странно, что вроде бы это целая фича языка, а на практике не очень юзабельна...
>>2465706 Если у тебя создается IDisposable в скоупе - студия подсвечивает, что ты его не диспознул. Если у тебя передается IDisposable в конструкторе - анализатор - дает предупреждение, что нужно диспозить.
>>2465715 ну покажи где студия это делает. Моя студия с решарпером ничего подобного не делает
>в конструкторе - анализатор - дает предупреждение, что нужно диспозить. это бредовый варнинг был бы. Впрочем не вижу варнингов. Студии абсолютно плевать, хоть все IDisposable утыкай
>>2465714 именно так. Только кастомная реализация может дать требование передать ей lifetime и тем самым не дать возможность забыть.
В остальном же 2 ламбды. Ну а как иначе, если уже есть event и ничего ты с этим не сделаешь. Собственно и 2х ламбдовость не даст забыть сделать вторую ламбду. Но выглядит это коряво.
>>2465715 Использование ArrayPool часто подразумевает критичные к производительности места, когда нужен какой-то буфер промежуточный, и если он нужен маленький, то делается stackallock, а если большой - ArrayPool.Rent(). Эта логика либо оборачивается в ref struct'ы, либо в подобном контексте используется, поэтому явный IDisposable тут не применим. Хотя для шарпа IDisposable можно по утиному реализовать даже в ref struct'ах, и затем использовать using.
>>2465578 >>2465578 Можно создать метод int func(int a) {...} и тогда то, что мы передадим, скопируется в локальную переменную a. Можно создать метод int func(ref int a) {...} и тогда то, что мы передадим, просто получит другое имя Если int func(in int a) {...} то будет как в прошлом случае, но без возможности менять "a". как сделать это, но с 1 случаем? Тоесть просто убрать возможность менять, но передать копированием?
>>2464992 > Можно передать в метод параметр с in, тогда это будет неизменяемая ссылка, а как сделать так, чтобы при передаче копированием тот параметр, куда я передал, был константным? Тоетсь как с in, но без передачи с ссылкой, а копированием?
Если я тебя правильно понял, то ты хочешь передать по ссылке что-то в метод, при этом быть уверенным, что переданное по ссылке - не изменится внутри метода. Что-то типа плюсового void foo(const int* const some){}
Ну так вот. Такой фичи из коробки в шарпах нету. Для этого тебе нужно иммутабельность реализоваывать в случае использования классов. Можешь - использовать readonly struct и readonly record, если у тебя там нет особой логики.
C# проприетарная параша. Мелкозалупа уже поссала на лица кодерков в прошлом году когда захотели сделать хотрелоад ЫНТЫРПРАЙЗ ОНЛИ фичей от чего у всех шарпомакак сгорела жопа https://github.com/dotnet/sdk/issues/22247КАК ЖЕ ТАК, ХОЗЯИН ПРЕДАЛ И НАЕБАЛ
Если вам нравится быть шлюхой под хозяином и терпеть все его выходки и ожидать что в один момент у эффективных манагеров что-то переклюнит в башке и они обговномидаснят ваш проект то ожидайте и в страхе
НУ НЕ МОГУТ ЖЕ ОНИ!!1!1 ЭТО ЖЕ РАЗОЗЛИТ ВСЕ КОМУНИТИ! могут, вы для них халявные рабы, произошла бизнес оптимизация
>>2466047 Спасибо. Удивительно, что этого нет. Я думал это фишка шарпов постоянно что-то пилить новое, а тут такой базы не оказалось. Ты меня немного не понял, я спрашивал более экзотическую вещь, чисто ради интереса, а тут такое
>>2466049 Вот тут интересно, маркетологи хотели прогнуть, но прогнули их. А вот в случае какого-нибудь Го, где комьюнити имели как хотели, никто даже не вспоминает. Какие же вы лицемерные, шизики.
>>2466279 Ну я и написал, что это экзотический вопрос, чисто ради интереса. А то что нельзя передать ссылочный объект в функцию и быть уверенным что инфа самого объекта из кучи не изменится это странно.
>>2466463 Я так делал уже: всё равно ломается. Вообще с else кажется более логичным, если ветвление if предполагает покрытые всех случаев алгоритма, а без него кажется более логичным, если if выполняет функцию опционального ответвления от алгоритма. Как то красивее так и логичней
>>2466049 > вам нравится быть шлюхой под хозяином и терпеть все его выходки Не нравится, но блять, покажи мне другую платформу, в которой я смогу: 1. Одной командой в консолечке скачать и установить платформу, без ошибок, остановок или вываливающихся километров стектрейса. 2. Второй командой в консолечке создать новый проект. 3. Третьей командой в консолечке скомпилировать и запустить проект. Без. Ошибок. Остановок. И прочей хуйни. 4. Открываю проект в ИДЕ и без задней мысли пишу код. It just works.
Я тебе отвечу, нет, ни одного решения с таким простым порогом входа. Поэтому тебе встречный вопрос, почему твой хозяин не сделал тебе такую простую систему?
>>2466049 >Если вам нравится быть шлюхой под хозяином и терпеть все его выходки Будешь так кучеряво базарить, то анон сделает один звоночек дяде Биллу и тот купит твою маму, сдаст её в гарем по цене цветмета за кг. и станет на миллиард богаче.
>>2466498 >если ветвление if предполагает покрытые всех случаев алгоритма Если не if то это дефакто else тем более если ты в обоих случаях возвращаешь значение.
>>2466515 Какие нахуй хозяины, вы ебанулись? Ряяя хазяен нам платформу диктует (((( Ряяя хазяен на фичи языка диктует (((( Ряяя хазяен процесорные инструкции нам диктует (((( Ряяя клятые транзисторы хазяен диктует ((( Ряяя а че там только електроны бегают хачу на частицах кала вычислять ((((
>>2445746 (OP) Аноны, молю, дайте годный туториал по взаимодействию EF с Postgres'ом. Желательно чтоб был и code first и database first, и чтоб CRUD был по-человечески объяснен и как хранимые процедуры юзать. Вот с Dapper'om вообще все просто и понятно, но глядя на вакансии, везде требуют EF.
>Ты сделал ДЗ, а его никто не проверил. Там обычно дз вообще не имеют ничего общего с реальным миром, ценность их нулевая, так как не откладывается ассоциация в голове. Никогда их не делал, вкатился норм в айти. Лучший ментор - это ковыряние в исходниках, а курсы это попил бобла ибо сфера слишком сложная чтобы уместить в один курс. Это равносильно пойти на курс хирурга, или зубного врача, где тебе расскажут про инструменты и дадут потыкать в лягушку.
>>2466049 Ты заставил меня задуматься, но какая альтернатива для языка общего назначения? Жаба тухнет и там только веб, у го тоже веб, раст там на дне копашится. Какие альтернативы шарпу, если я хочу и веб писать и игры делать?
>>2464757 Бля, вот это действительно охуенно. Если там еще и производительность 2Д рендера в нормальный вид привели (батчинг), то я даже сдую пыль со своих двух-годовалых проектов, чтобы поразвлекаться на досуге.
Есть один небольшой метод, который берёт цвет в каком-то странном формате в виде инта и конвертит его в формат нормальный https://pastebin.com/dfnxbBjw С ним всё нормально, но теперь мне нужен реверс, чтобы из нормального формата конвертило опять в этот всратый и у меня почему-то не получается, не то число выходит. Пробовал вот так int.Parse(Color.Trim('#'), System.Globalization.NumberStyles.HexNumber) И ещё более всратыми способами. Жопой чую, что это должно элементарно делаться, но туплю
Когда написано в коде с дженериком тип T?, а на T нет ограничений class или struct, и nullable enabled. Что это вообще значит? T? Если это структура, то по идее она должна оборачиваться в Nullable<T>, но этого не происходит. Какой-то мутный непродуманный запутывающий синтаксис.
Как перекинуть рабочий экзешник другу? Написал код, у меня все работает, а у него нет. Как я понимаю, нужно пользоваться "сборкой решения"? А где этот выходной файл, собранный файл? Или что то не то я делаю? Библиотек никаких дополнительных нет
Что почитать на тему устройства wpf? Чтобы понимать, как xaml преобразуется в код, как работют свойства зависимости, логическое и визуальные деревья и тд.
Немного глупый вопрос, но всё же. Как происходит поиск товара, допустим, на сайте DNS? Для этого используется NOSQL база данных или обычная, например, PostgreSQL. Просто я слышал, что запросы к SQL базе данных медленные, вот решил спросить.
>что запросы к SQL базе данных медленные Всё не так страшно как кажется главное не использовать по 50 join'ов в запросе и для этого майки рекомендуют использовать для работы с БД\Файлами async await как я помню.
>>2467348 >запросы к SQL базе данных медленные, вот решил спросить Запрос к нормализованным данным может быть медленным. Все зависит от того как это все нужно собрать в кучу Для этого и используются индексы, а в некоторых случаях некоторая денормализация базы
Со всякими же JSON расширениями приходят и фишки NoSQL
>>2466942 Хотя, нет. Спиздел. Это aBGR. Тебе по факту нужно просто нужно у полученной строки поменять местами символы отвечающие за R и B компоненты местами и потом полученную строку распарсить обратно в int через TryParse используя перегрузку с NumberStyles.HexNumber. Правда alfa компоненту ты уже не получишь, т.к. она будет утеряна.
Мужики ржаные гречневые, за сколько времени вы начинали понимать что на работе происходит? У меня вот испытательный срок в тырпрайз конторе, там этих сущностей таблиц миллион (первая работа) и я чёт пока так тяжело в них ориентируюсь. В коде вроде норм, а вот в связях этих всех пиздец
>>2468266 Двачую этого. >>2468245 > не осилили разрешения конфликтов Осилили. При помощи множественной имплементации интерфейсов, вместо множественного наследования объектов. И визуально и логически ты получаешь то же самое. Только архитектурно различается.
>>2468475 Архитектурно, я повторяюсь, разные. Семантически, если убрать из имён интерфейсов букву И, наш страдалец получит то же самое, чего он там хотел: > class Dvacher : Mammal, Male, Human, BurgerEater, ChairSitter, LifeDropper {}
>>2468510 Либо я тебя не понимаю, либо ты меня. Я говорю, что если у объекта есть нужные атрибуты, ты берёшь их и пользуешься. И они возвращают нужные тебе значения, или производят нужные тебе действия. И именно на этом уровне нет разницы, унаследован ли атрибут, имплементирован, или подмешан. Он есть. Он просто работает. Разницы нет. Тоже самое касаемо коллекций. Ты объявил коллекцию типа ArtCreator creators; и добавляешь в неё всех, у кого есть интерфейс IArtCreator, вне зависимости от того, каким образом в добавляемые объекты пришли те атрибуты, которые реализуют этот интерфейс в конечном объекте. Эти арт-креаторы могут быть людьми, ИИ-нейросетями, разумными грибами, пришельцами с Плеяд, кем угодно. И иерархию этого "как угодно" можно сделать сотней разных архитектур. Но на поверхности мы увидим только набор атрибутов, который нас интересует, нас устраивает.
>>2468668 Все просто У тебя есть абстрактный родительский класс. Он может иметь состояние - то есть приватные переменные что то хранят, приватные методы для удобства, то есть ведет себя как самый обычный класс
Интерфейс же эквивалентен как если бы мы extension методы написали - то есть ничего хранить не можем, все что есть в this ( и оно публичное обязательно должно быть) - с тем и можем работать. И даже приватные методы для удобства не можем.
Во множественном наследовании второй (и вообще все) родительский класс имеет те же возможности как и обычный родительский класс без множественного
Снаружи это выглядит одинаково, но внутри небо и земля.
>>2468668 и желающему множественное наследование нужны возможности внутри, а не снаружи. Снаружи всегда будет одинаково - что при множественном, что без (с интерфейсами)
>>2468675 > Все просто > У тебя есть абстрактный родительский класс. Да ты блять угашенный штоле? Я тебе в третий раз повторяю, на уровне использования готового объекта я не знаю и мне не интересно, кто у него там родитель. У него есть атрибуты, я беру их и пользую. Всё.
>>2468679 > желающему множественное наследование нужны возможности внутри, а не снаружи Тащемта ему сразу сказали, что он что-то навыдумывал себе неправильное. >>2468266 > Ты думаешь, что оно тебе нужно, но на самом деле оно тебе не нужно.
>>2468684 Ну вообще не особо нужно. Все зависит от привычек. Я вот пишу на шарпе много и мне привычно делегировать, потому что сразу заложились привычки в силу того что есть в языке.
В питоне использую множественное ибо у такого наследования есть реально плюшки.
В котлине вовсю юзаю методы расширения, ведь в котлине упор на DSL-ость. (а вот в шарпе их избегаю ибо они не могут быть описаны в контракте)
>>2471248 Нет, я байтоёб упрощённый, из мира .NET. Еще и zero-allocation сериализацию можно сделать если забайтоёбить unmanaged типы. В C# 7 майки еще и забайтоёбили Linq, он теперь при возможности на Vector<T> переходит. А пиздежа-то было про байтоёбство, а ведь это единственно верный путь к настоящему программированию
У ASP действительно такая проивзодительность, или там специально набайтоебили с ансейфом и неприменимой хуетой, как чел выше? Если там нормальный код без крестоебства, то почему всем крупным компаниям до сих пор похуй на шарп?
>>2471727 >почему всем крупным компаниям А ты во многих крупных компаниях был, чтобы такие выводы делать? Я тебе даже больше скажу, даже работая в такой компании - хуй ты сходу скажешь какой у нее стек преобладает, т.к. знать ты будешь только то на чем пишет твоя команда и пара смежных. А что в соседнем отделе, хуй ты узнаешь.
>>2472132 Брат, ну давай без коупинга по этому поводу. Выше уже был срач про использование шарпа, го и жабы во всяких гуглах, и шарп очевидно проебывает. Стартапы тоже - даже котлин с обоссанным жвм берут, но на шарп как-то всем пох. Мне больше интересно - производительность-то какая будет в реальных условиях, без ансейф байтоебли? Есть бенчмарки? Как примерно чувствуете, шарп с кором выстрелит еще сильнее со временем и вообще заменит жабомир, или так и останется на подсосе у жаб и го?
ХХОСПАДЕ....КАКОЙ ЖЕ ПРЕКРАСНЫЙ ЯЗЫК Я ПРОСТО В ШОКЕ!! Столько фич, такой быстрый, хорошая оптимизация, приятный синтаксис, две великолепные IDE........................
>>2464619 >В целях безопасности в асп выпилили идентифицирующие хедеры а можно ссылку какую-нибудь на это? а то меня как вкатыша напугала эта статистика...
Есть один WPF-проект с переопределённой точкой входа, чтобы было удобнее работать с четырьмя независимыми окнами одновременно Это условие лабы, уменьшить количество нельзя. Но из-за этого после открытия окон они сразу же закрываются, т.к. программа доходит до логического завершения.
В связи с чем сам вопрос — каким грязным хаком я могу заставить свой грязный хак работать нормально? Вечный цикл после открытия всех окон? Какая-то пауза? Где-то есть настройка вечной работы с окнами? При этом вся информация с окон стекается в один обработчик, по сути
>>2472163 Срач был в твоем маня-мирке, а так тебя там обоссали и объяснили, что шарп второй язык в интернете (как по количеству, так и по миллионникам, даже при условия того что хедеры asp убрали тонну лет назад).
Все тесты там настоящие, единственное где-то есть без mvc, то есть вариант для API, никакого байтоебства нет. Но радует, что если надо, можно навернуть максимум железный код (который обычно нужен в 1 случае из 100).
Но ванильный го, необрезанный, не вывозит даже противостояние с mvc
>>2472709 Где-то еще в 2009 началось безумие и все, даже в пхп начали удалять хедеры с ответом. Что ты именно хочешь узнать и что тебя напугало? Запусти сервер и посмотри x-powered-by.
>>2472932 >что тебя напугало? что шарп теряет популярность судя по голой статистике >Запусти сервер и посмотри x-powered-by. я вкатышек который проходил только паскаль и си в школе и на первом курсе, шарп пока не трогал даже, собственно этого не умею.. можешь показать немощному? и подсказать что выбрать для бэкэнда, без фанатизма? выбор сейчас между джавой и шарпом, в го я так понимаю вкатышам без опыта дорога закрыта
>>2473162 >что шарп теряет популярность судя по голой статистике Оно стало размазываться из-за того что стали прятать хедеры. С нет-кором популярность шарпа только стала расти, так как нет больше потребности нюхать старую жабу или топорный бойлерплейтный го.
>подсказать что выбрать для бэкэнда Смотри работу в своем мухосранске или куда будешь релокейтиться. Вкатышам везде трудно, в ИТ сейчас нехватка спецов и переизбыток джунов или крудеров.
Сейчас еще создадут какие-нибудь самооптимизирующие модели, которые будут на декларативном диалекте генерировать круды и айтишечка вообще схлопнется, останутся только тру-инженера.
>>2473165 >стали прятать хедеры то есть по умолчанию нет хедеров с какого-то года? тогда понятно почему статистика такая. или ты хочешь сказать что хедеры вручную убирают? >мухосранске я в дефолт городе. в общем с точки зрения перспектив технологии лучше шарп выбрать? (вакансий то вроде везде много)
>>2473178 >то есть по умолчанию нет хедеров с какого-то года? тогда понятно почему статистика такая. или ты хочешь сказать что хедеры вручную убирают? Тут я возможно ошибся или перепутал, не могу сейчас поднять дефолтный сервер. Но на работающих приложениях у меня хедеров этих нет (но и новость не нашел, поэтому засомневался).
>дефолт городе. в общем с точки зрения перспектив технологии лучше шарп выбрать? (вакансий то вроде везде много) Считаю шарп/дотнет перспективной технологией, потому что жаба не стоит тех денег с чем приходится там работать в бэкенде, как бы там не натягивали жабу, но это чистой воды COBOL Серьезно, считаю, что даже пхп будет лучше, чем жаба
>>2465612 Очередное подтверждение, что C# - это детский игрушечный язык. И как следствие, программисты-макакингеры упускают из виду решения, которые давно известны. В языках для взрослых, типа С и С++, такие проблемы умели решать ещё 40 лет назад. Все Rent и все Return нужно обернуть в конструкцию #if DEBUG / #else / #endif. И в дебаг-режиме вместо прямого использования ArrayPool<T>.Shared, использовать обертку с подсчётом одалживаний и возвратов.
>>2445746 (OP) Анон, смотри. Иногда флешка тупо сыпется случается пикрилы. Первое, чо пришло в голову, при такой хуйне - сделать raid-1 массив, из двух флешек. Но хуй знает как, для этого нужны какие-то железяки, и короче raid-1 контроллеры, там.
Поэтому, пришла в голову другая мысль. Очевидно, что если флешка сыпется, то несколько копий не поможет, однако очевидно, что несколько копий на флешке - нужно иметь.
Ну так вот, мысль состоит в следующем. Пусть есть две посыпавшиеся копии одного и того же файла, или даже копии раздела, тома с файлами. Пусть эти файлы/тома, читаются прогой в два потока. Если ячейки битые, и контрольные суммы секторов - невалидные, то - заполнение сектора - нулевыми байтами. Если в одном потоке - нулевые байты, а в другом потоке - какие-то данные - данные, то XOR секторов. В реультате, с двух, посыпавшихся копий, а лучше из трёх-четырех, вероятностно-предопределённо получится изначальный файл, который можно записать снова в две-три копии, если было задетекчено, что предыдущие копии посыпались, и содержат битые сектора.
Вопрос. Как реализовать сие на шарпе, и стоит ли использовать шарп? Первое что приходит в голову- это работать с байтами, внутри filestream. А вообще, хотелось бы заебенить это на уровне драйвера какого-нить, чтобы тупо разделить флешку на два-четыре раздела, заебенить raid-1 на этой флешке, и подмонтировать всю хуйню, как один раздел поменьше, с регулярной перезаписью данных в нормальные, не битые сектора.
>>2473709 Да. В .editorconfig прописываешь следующее:
dotnet_diagnostic.CS8509.severity = error
Теперь если если в switch-e с enum-ом будет какой-то недостижимый вариант, то будет ошибка. Чтобы ее не было, нужно либо чтобы были расписаны все варианты енамов, либо был default.
Еще можешь добавить вот такую команду:
dotnet_diagnostic.CS8524.severity = none
Это отключит предупреждение если у тебя расписаны все варианты, но нет дефолтного.
>>2474674 Винформы точно нет. Про Asp.Net нужно уточнять. Если это обычный, .Net-фреймворковый Асп - то нахуй. Если Asp.Net Core то - актуально. Но в нормальных конторах обычно знают разницу и везде указывают приставку Core.
>>2474706 > Про Asp.Net нужно уточнять. Если это обычный, .Net-фреймворковый Асп - то нахуй. Если Asp.Net Core то - актуально. А между ними такая большая разница?
>>2474706 Написано без Кор, просто асп.нет. Поэтому стремаюсь немного. Как бы там скуфидронов небыло, которые затянут меня в бесперспективный кал мамонта свой.
Есть какая книга или цикл статей о разработке крупных систем? Вот желательно было бы в виде истории типо начали разрабатывать интернет магазин сделали, а потом начали допиливать и вот такие косяки вылезли. Везде пишут как правильно но ни кто не пишет как не правильно( Я уже второй раз пытаюсь написать свой сервис и блять через неделю получается такая ебань что я не могу вообще разобрать как и почему это работает.
>>2474712 Для разраба в принципе не особо. Есть некоторые запарки и ньюансы, но не критично. Вопрос в работодателе, если у него там до сих пор .net framework и он не собирается переходить на core, то делать там нехуй.
>>2474717 >Как бы там скуфидронов небыло, которые затянут меня в бесперспективный кал мамонта свой. Скорее всего ты будешь там один и будешь тянуть на себе весь этот 'кал мамонта'
>>2475025 >И какие же альтернативы для написания легковесных приложений для ПК с виндой? Да пиши пожалуйста, только это не та область (десктоп) где сейчас хоть как-то нормально заработать можно. Вопрос, то про вакансию изначально был, а не про хобби.
Уважаемые, кто знает где достать BufferedStream который имел бы динамический размер буфера, или хотя бы позволил один раз поменять его размер? А то мне нужно в потоке сначала взять небольшое число байт и принять решение с какого места продолжать чтение большими блоками.
Работяги хотел кое-что спросить в профессиональном плане. Я сейчас работаю в финтехе, пишу под мобилке на кросс платформе(Flutter). Вакансий по стране(не снг) не так много, штук 15. Возвращаться в Андроид натив не хочу, так как не хочу работать в узком направлении и запирать себя на определенной платформе. Я думал перейти в бекенд. Думал о Java либо C#, так как nodejs, golang это не то. Посмотрел как изменился сишарп за последние годы, очень впечатляюще да и вакансии есть
Стоит тратить время и переходить в С#? Можно теоретически если подтяну знания попробовать податься на мидла или нужно с джуна начинать?
>>2476572 >Стоит тратить время и переходить в С#? Если ты уже в финтехе, то стоит. Там сейчас много где шарп используется. И даже старые предпочитают на .net6 перетаскивать, а новые сразу на нем делают.
>Можно теоретически если подтяну знания попробовать податься на мидла или нужно с джуна начинать? Скорее на мидл++, т.к. в финансах сейчас только опытных набирают. В некоторых банках уже ниже ведущего разраба и нет никого. Джунам там точно ничего не светит.
Котаны, насколько сейчас C# и .net core в частности даёт проспаться джаве? Правильно ли я понимаю, что благодаря последним изменениям и переходу к кросплатформе, нет смысла использовать джаву в новых проектах?
Насколько это верно? Стоит ли ожидать увеличение вакансий в будущем?
>>2476874 Отмотай время на три года назад и сравни сколько вакансий было в 2020-м и сколько в 2021-м. Вот и ответ на твой вопрос. 2022-й год по понятным причинам в обзор не берем.
>>2477013 >Но брать 22 нужно. Фиг уже знает что будет дальше. Все это так же применимо и к другим платформам/языкам. Даже на опенсорс не стоит надеятся, как показал предыдущий год - там тоже дохуя ебанутых крыс, говтовых подкинуть говна. Поэтому тут все в равных условиях. >>2477013 >Мелкософт не показал себя непредвзятым. Да и похуй совершенно. Core сейчас позволяет полностью вести разработку совсем не касаясь майковской инфраструкту.
Я тебе даже немного инсайдов подкину. В тех же банках, которые подпали под санкции, спокойно продолжают наяривать на дотнете и переводить старые/разрабатывать новые проекты на .net6 и даже, сюрприз, корпоративные лицензии на студию 2022-ю покупают. Сервера только с винды, на линуксы потихоньку переводят, там где еще не перевели, но и то, в основном, из соображений экономии.
>>2477026 >спокойно продолжают наяривать на дотнете речь не о говне, а об ожиданиях говна им то незачем менять, вон как с коболом а другой, которому только выбирать - подумает
да и что банки и в те банки, что уже есть, не попадешь (а новых не будет)
>>2476874 Мне и многим другим приходилось есть жабу, так как альтернатив не было (выше скрипты, ниже кресты). Потом высрали го, но даже после топорной жабы на нем было больно что-то делать, но этот "вентиль" был открыт и часть комьюнити все же хлынуло туда под напором и у нас появилась хоть какая-то альтернатива этому болоту на жабе. А теперь появился нормальный современный и развивающийся язык, с похожим на джава синтаксисом и стало легче.
Не все еще вышли из криокамер и думают о шарпах как языке для винды, но интерес растет и понятно почему. Так же шарп открывает окно в гейм-дев, особенно для инди-разработчиков, что весьма вкусно, даже просто поковыряться на досуге для себя.
PS Была какая-то надежда на котлин, но он почти полностью тянет джава инфраструктуру, от чего воняет той тем же болотным тырпрайзом.
Шарпаны, как в студии добавить файлы в игнор при quick fix рефакторе? Например я нажал на кнопку apply in project scope, но я не хочу чтобы он шел по некоторым файлам, т.к. это у меня сырые жирные хтмлки на которых он виснет и непонятно почему туда лезет если фикс касается шарп кода.
Ребят, есть куча классов в домене - которые я ентити фреймворком загружаю в постгрес (типа кодфёрст). В этих классах есть интовые проперти (а может еще какие value типы), которые я не могу сделать nullable, иначе могут ошибки появиться в текущем некроентерпрайзе. Так вот - ЕФ в постгрес все мои вэлью тайпы загружает как NOT NULL, а мне надо, чтобы он загружал просто (с возможностью null туда писать), без добавления nullable к пропертям в домене.
Может есть какие настройки в ЕФ для этого? Я чет не могу нагуглить пока
>>2477050 А зачем тебе is null в первой пикче? Знак вопроса уже делает сравнение. Напиши: > return _canExecute ? true : _canExecute(parameter); Посмотрим, что скажет студия на это.
>>2477416 Конфигурация это в моделбилдере же? А если у меня классов как говна, каждое поле всех классов так ставить? Я вот нашел такое - modelBuilder.Properties().Where(p => p.Name != "Id").Configure(p => p.IsOptional());
>>2476874 Тулинг в целом все еще ощутимо хуже, чем в жабе. Куча либ и инструментов работают только на винде, что-то навсегда осталось в старом дотнете.
>нет смысла использовать джаву в новых проектах Все еще есть, и ее используют, особенно там, где уже есть команды с экспертизой в жабе.
>>2476874 >Стоит ли ожидать увеличение вакансий в будущем В РФ точно нет, в ЕС вряд ли, может быть в США, но не уверен. Про Азию ничего говорить не буду.
>>2472163 >так и останется на подсосе у жаб и го this. Нет киллер фич, ради которых нужно переехать с условной жабы на шарп, если у тебя есть команды с экспертизой в жабе. Проще переехать на новую жабу. Даже с го нет смысла перебираться на дотнет, потому как в дотнете нет тех фишек, ради которых берут гошку (виртуальные треды, прозрачный код без магии и orm, отсутствие монструозного ООП, компилируемость в бинарник)
>>2472163 >производительность-то какая будет в реальных условиях, без ансейф байтоебли Обычная, стандартная, обыкновенная для бекенда. Все будет упираться в базу данных.
>>2471727 >почему всем крупным компаниям до сих пор похуй на шарп А зачем переходить, когда вся высокопроизводительная хуета уже написана на С++, круды на жабе и инфра на го? Смысл перепиливать все с нуля?
>>2477443 Когда кодил 14 лет назад на пхп, во многих решениях старались как-то переживать за оптимизацию, даже следили за количеством запросов в базу, оптимизировали каждый, нередко CMS выводили даже об этом инфу в футере сайтов/форумов (еще с инфой времени исполнения кода). Мы даже писали в процедурном стиле, ибо классы в 5.2 имели некоторые ощутимые проблемы с производительностью, в отличие от массивов.
Когда перешел на жабу, увидел что всем насрать вообще на производительность. Полухолостое приложение, слоившиеся годами от рук около-студентов (по возрасту или мозгам), которое жрало планками память и тормозило, делая при этом - нехера. И это не только к внутренним продуктам, по большей части весь стек такой в джаве.
>>2477445 >Так если все удалили свои хедеры еще 10 лет назад, то почему популярность только падает? Ты не очень умный, да? Инет за 10 лет вырос хер знает как, цифры размазываются, там пхп хоть и терял позиции по процентам, но сайтов многократно навернул.
>go/js/python С появлением нет кора жрать говном можно уже перестать.
>>2477446 Го начинает сосать болт когда сталкивается с хипом 10-100-1000Гб. И шедулер не бесплатная вещь, именно поэтому го сосет во многих тестах. Асинхронность не панацея.
>>2477446 Покоромлю зумера >отсутствие монструозного ООП Выросло поколение для которых ООП - это сложна! Помню 6 лет назад гоферы с пеной у рта затирали, что ООП у них есть.
>компилируемость в бинарник Офигеть фича, ты руками деплоешь? В NET 7 теперь тоже можно в бинарь c AOT (вероятно для додиков которые по ftp руками заливают), правда в случае шарпа AOT дает прирост почти в два раза (и по памяти тоже).
>прозрачный код без магии Кодогенирация, касты с рефлексией, свитчи из-за полустатичной типизации. Возможность пропуска ошибки если возврат одного значения (зато проверяются используемость переменных и не компилится, лол), и банально можно забить на обработку ошибки (для чего исключения и были придумали, где надо явно заигнорить ошибку). Ну и вишенка - утиная типизация интерфейсов, открывающая просто кладезь плавающих ошибок.
Дальше писать лень, ибо некрасиво издеваться над гоферами.
Решил запилить галерею на впф, в качестве контейнера использовал listview с wrappanel, каково же было мое разочарование, когда оказалось, что wrappanel не поддерживает виртуализацию и при открытии папки с 1000 картинок, программа отжирает 12 гигов оперативы и крашится. Хз даже что и делать, придется видимо свой контейнер пилить.
>>2477553 С виртуализацией там спец контейнеры. Например VirtualizingStackPanel А потому можно взять любую реализацию VirtualizingWrapPanel и использовать ее как
>>2477540 > ООП - это сложна! Он не о сложности говорит, а о монструозности. Если я правильно понимаю, речь тут вот о чём. ООП может быть простым: > class animal {} > class mammal : animal {} > class human : mammal {} > human uasia = new(); Это простой и элегантный ООП, в котором всё ясно и логично. Но можно и выебнуться, например: > list(list(list(list))) > hui(pizda(koncha(kharcha()))) > hurr = durr(derp) И ты такой сидишь, смотришь на это. А что на нём пишут? Бэк? Фронт? Бизнес-логику? - Да неее... Задачки у себя в универе решают.
>>2477792 Монструозное ООП это про интерпрайз решения, когда просто специфика работы заставляет пилить так, чтобы сегодня лодка, завтра - самолет. Условные абстрактные фабрики абстрактных билдеров абстрактных фабрик, мемные бин-фактории и прочие медиаторы, врапперы, контексты и т.д.
Ну а по факту. В реальности - все зависит от проектов и того что делается. Когда задача простая и понятная - никто в реальности вот этой вот мурой не занимается, кроме мидлов. Когда у тебя много неизвестных - ты пилишь так, чтобы как уже сказано выше - сегодня у тебя туду-лист, а завтра - облачное приложение с билингом, сотней интеграций со сторонними сервисами, дашборды, совместная рисовалка, чатик, видоконференции и диаграмма Ганта, потому что эту ебучую диаграмму каждый хуй просит впихнуть в абсолютно любую хуйню, чтобы была, блядь, и похуй что на деле оно ничего не дает и нихуя не помогает.
А то что ты привел в пример - это нарушение закона Деметры, к ооп оно относится слабо, просто говнокод обыкновенный.
Ну и да. Я не тот чел что про это говорил. Может быть он тоже видел только плохой код под соусом ООП или вообще ИРЛ его не видел, а только слышал что оно монструозное, я не знаю. Говорю просто про особенности работы с интерпрайзом на личном опыте работы.
>>2477792 Шиззо, ты привел пример наследования и композиции, это как раз инструменты борьбы со сложностью и используются совместно а не противопоставляются. У тебя каша в голове, иди читай букварь.
>>2477792 Покоромлю зумера Хотел тебя обоссать, а тебя уже обоссали. ООП не панацея, но лучше когда оно есть, чем когда его нет. Ничто не мешает писать ООП в около процедурном стиле (в жаба тырпрайзе это давно уже мейнстрим, это называется анемичная модель данных https://www.martinfowler.com/bliki/AnemicDomainModel.html )
Но ООП даже в анемичной модели позволяет лучше декомпозировать сложность и предметную область, чем процедуршина и это было доказано императивно еще когда твои родители ходили в пеленки, или даже не родились.
То есть, ооп позволяет писать в процедурном стиле (такой процедурный++ стиль) и процедурный позволяет писать в ооп, но уже ценой бойлерплейта (дроча композицию).
В общем, хорошо когда у тебя язык мультипарадигменный, у тебя есть выбор.
И да, языки в который по стекам надо пробрасывать ошибки и нет возможности в этих ошибках развернуть стектрейс - не являются промышленными языками. Стектрейс в 100-200 функций это сейчас почти минимум для продвинутого приложения разрабатываемого в команде. Если всякие Си просто устарели для промышленного кодинга, то го и расты просто примитивные игрушечные перделки, не отвечающие потребностям современности.
>>2477896 Ключём может быть хэш парольной фразы, а её - в башке уже несложно запомнить. Ну или застеганографировать в какой-нибудь фотке, с помощью алгоритма f5 steganography https://username1565.github.io/js-jpeg-steg/ А фотку уже на карты памяти раскидать и на харды, в тел засунуть, в камеру, на флешку, на магнитную плёнку стримера вхуярить, в стекле вписать там, ну хуй знает. Но опять же, фотка может посыпатся, а вот нейроны в башке по 150 лет могут жить, какбэ. Я даже помню нашли какую-то акулу, которой 512 лет.
Кстати, в этом контексте, а чо бы уж сразу, в нейронах не писать инфо? Были уже опыты по сохранению бекапов внутрь нейросетей? Уже представил себе нейросетку, выращенную в чашке Петри, помещённую в бункер, и USB/SATA-разъём, из неё выходящий. Гы.
>>2477898 Спасибо. Понял. Принял. Извинился. > То есть, ооп позволяет писать в процедурном стиле (такой процедурный++ стиль) и процедурный позволяет писать в ооп, но уже ценой бойлерплейта (дроча композицию). То есть, лучше когда я в ООП-языке объявляю статик метод, чем когда я в процедурном языке объявляю процедуру Объект.Метод()? Об этом речь?
>>2478087 >То есть, лучше когда я в ООП-языке объявляю статик метод, чем когда я в процедурном языке объявляю процедуру Объект.Метод()? Об этом речь? Там больше плюшек, но если по твоему случаю, то да. Ты так и так будешь группировать функции в файле, почему бы не сгруппировать их статик классом, чтобы не иметь импорта по звезде как в котлине (или в противном случае портянке импортов), ну и в последующем видеть откуда вызов по типу "Class.method()", чтобы видеть что это вызов из импорта, а ее внутренний метод текущего объекта.
>>2478136 Да это какой-то левый хуй высрался. >>2478128 Спасибо. Всё так, но я по большей части в уме держал не котлин, а паскаль, в качестве процедурного бойлерплейтного контрпримера. Паскалешкольник я, азбуку паскаля читавший.
>>2478153 >по большей части в уме держал не котлин, Просто картинка по котлину была и пример, что не всегда функции это прям круто, хотя иногда и удобно, пока не пишешь что-то большое.
На самом деле и статик классы плохо, на практике делают обычные классы без состояний (называют их в анемичной модели - сервисы). Это дает там некоторые плюшки в плане работы с интерфейсами, DI (IoC), возможности моков в тестах и еще чего-то, но не помню уже.
>>2478087 >То есть, лучше когда я в ООП-языке Лучше если дебилы вроде тебя съябут нахуй из профессии, а не то что в ООП-языке. Т.е. дебилов вроде тебя даже в процедурных языках быть не должно.
>>2478132 Вообще то то, что на скрине, и есть "как в неймспейсах" А не такой пипец в шарпе не потому что неймспейсы а потому что нельзя методы и переменные держать вне класса, поэтому вынужден писать имя класса в коде, что чуть более информативно (для блокнота конечно) откуда оно.
>>2478183 >что не всегда функции это прям круто, хотя иногда и удобно
Вообще то вполне нормально, если язык заточен под DSL и при этом DSL является легальным кодом. Оно как раз читается лучше И пример на скрине превосходно читается, то какой то школьник не знает основ языка.
>>2478792 На практике, без доки, эти DSL понятно как писать только авторам самого этого DSL. Код без IDE выглядит как чистая магия. Лесенка из лямбд вложенная в лямбды, нехера это не круто, у тебя вместо вертикального последовательного кода получается какой-то горизонтальный звездец и тебе приходиться читать весь этот каскад кишков.
Единственное, наверное, будет круто гуишки описывать так, но опять же тебе придется доку писать и проверять валидность значений, обязательные и необязательные параметры, в общем все то, что ты бы делал и с псевдоязыком. Котлин DSL для DSL слишком кастрированный и ничего кроме каскадной вложенности не дает.
>>2478994 >у тебя вместо вертикального последовательного кода Какого еще последовательного кода. На пике декларативное описание конфигурации.
Кстати в asp.net core точно такой же Только в асп что то типа services.AddFeature() вместо install(Feature) но это просто семантика так выбрана - фактически в обоих случаях используется метод расширение + метод билдер. Просто в котлин лямбда блок переданный как последний параметр можно писать так и this в этой лямбде можно не писать. поэтому выглядит магически. Но это самые обычные лямбды.
Я и в шарпе могу так сделать, просто из-за необходимости явно использовать в лямбде объект (не могу его сделать как this) будет больше шума (плюс или минус это - спорно)
>горизонтальный звездец и тебе приходиться читать весь этот каскад кишков. Вообще проблем нет. Кто выбирает декларативный подход - у него и в шарпе будет примерно так же, только более зашумлено всякими ()=> ведь не каждая лабда является семантически калбэком.
>проверять валидность значений, обязательные и необязательные параметры хз о чем ты. это не псевдоязык, который во что-то транслируется, а самый обычный код и поэтому проверяется компилятором. в шарпе выглядело бы точно так же, но с () =>
>но опять же тебе придется доку писать Ничем не отличается от шарпа. В том же асп.нет коре в самом его рождении когда видел всякие куски кода типа services.AddFeature() на гитхабе, то копировал, а оно красным горит - потому что нужно подкинуть пакет какой-то, в котором нужный метод расширение AddFeature а поди узнай какой. Даже знание неймспейса не дает знание где оно. Позже стабилизировалось, потому что все это распихали в метапакет или же НАПИСАЛИ ДОКИ, но кошмар "я тут скопировал кусок кода и он не компилится" - такой же и причины те же.
>Котлин DSL для DSL слишком кастрированный и ничего кроме каскадной вложенности не дает. как раз он наполнен фичастостью на эту тему - скоупы у функций, расширения статиков, скоупные extension методы, делегирования свойств, настоящие инлайны, встроенные функции let/run/apply... А каскадная вложенность вообще не фича - это обычные лямбды.
>будет круто гуишки описывать так О да. jetpack compose охеренно крут именно из-за того что язык заточен под DSL Шарп такое увы не сможет - всего вышеописанного добра в нем просто нет. Впрочем, поскольку мауи это наследник замарина, то они этим путем и не пошли даже, но если бы пошли, то получилось бы сильно не так изящно.
Шарпаны, помогите стать фрилансером. Суть такова - сейчас немношко кодю в одной организации и накодил для них бота для телеги. Бот понравился там кое-кому из сотрудников, дескать кому-то из его знакомых нужен аналогичный и возник вопрос - смогу ли повторить? Накодить то не проблема, но где его потом хостить? Первого то на серверах кампании разместил, а со сторонними заказчиками что делать? Арендовать им виртуальный, запихать туда и типа нате, плотите ежемесячно? А это не моветон? Где-то н бесплатном? А там проблем с производительностью не будет? Что делать, как быть? Какие вообще годные сервисы для хостинга на дотнете есть?
>>2479025 Нам-то это зачем обесняешь? Сотруднику - халявщику это обесняй: > Для нужд организации юзается инфраструктура организации. Для нужд твоей бляди ты мне подгоняешь инфраструктуру и я на ней тебе бота поставлю. Вопросы оплаты инфраструктуры (сервака) ты решаешь сам со своей блядью.
>>2479028 признаю. просто я под влиянием jetpack compose, который хоть и выглядит как императивный код, но является декларативным по сути.
но все же не все однозначно - install может сам выполнять конкретную работу (то есть быть императивным), так и быть просто контейнером описания конфигурации
Как мне подчеркнутый вар снаружи код блока использовать? Задавать до код блока не помогло. Я еще пытался using использовать, но .Net такое не поддерживает.
>>2479518 если перегоришь, то значит в программисты лучше и не идти. Несчастливы те, для кого это "айтишнике норм зарабатывать я тож хочу" Правда несчастливы и те, кому это в радость
>>2480423 Нету перспектив - все сдохло. Забудь про шарп. Майкрософт уже все заблокировал, а в дальнейшем вообще будет закладки делать, так что все российские компы просто взрываться будут если на них хоть один их продукт будет установлен. Пиздуй 1С учи. Алсо, если ты такие тупые вопросы задаешь, то программирование, это скорее всего не твое.
За сколько месяцев можно вкатиться в шарп, если знаю джава кор? Сильно ли сложные тут фреймворки? Нужно ли знать англюсик? Правда ли, что надо будет учить ещё фронт? Я не хочу на фронт, а хочу заниматься бэком.
>>2480737 >За сколько месяцев можно вкатиться в шарп, если знаю джава кор? Полгода-год. Если сразу выкинешь джавовские привычки, то может и меньше. >Сильно ли сложные тут фреймворки? Не сложнее джавовских. >Нужно ли знать англюсик? Лучше знать чем, не знать. >Правда ли, что надо будет учить ещё фронт? Я не хочу на фронт, а хочу заниматься бэком. Да. Сразу клади хуй на все что связано с десктопом (WPF, Winforms) и на все где есть слово MVC. Учишь ASP.Net строго до уровня WebApi и идешь в бэкэндеры. Хотя подучить фронт не помешает на уровне HTML, CSS и что-нибудь вроде React-а, просто, чтобы быть в курсе как там все работает, ну и при отладке больше возможностей иметь.
>>2480742 Во первых можно. Во вторых ты долбоеб не понимающий сути механизма миграций. И то, что они вообще не имеют отношения к тому используешь ты ORM или нет.
Вот микрософт форсит свой продукт, что всё доступно из коробки, но при этом надо всё равно из каких-то репозиториев догружать кучу библиотек. Нельзя было их включить в дотнет?
>>2480825 Да х.з. просто я за всю карьеру только с реактовым фронтом связывался. Ну и насколько я понимаю Angular уже вроде как приближается к статусу "говно мамонта", чтобы начинать его учить. А vue используется меньше чем react. >>2480825 >Я слышал, что как раз последний совместим с ASP.NET. Я х.з. что ты под этим подразумеваешь, т.к. фронт по факту с бэком общается через API и им должно быть строго похуй, что по другую сторону находится.
>>2480851 >Как вы изучали юнит-тестирование? Что-то почитал, что-то посмотрел. В основном чужой код изучал. >Действительно ли, что сам программист на сишарп должен писать юнит-тесты, а не специальный юнит-тестировщик? Чтобы писать юнит тесты нужно как минимум быть разрабом, а садить целого разраба только на юнит тесты дохуя дорого будет. Просто не стоит переоценивать юнит тесты, а четко понимать, что и как ими тестировать. Где-то они будут просто бесполезны, а где-то прямо в самую писечку подойдут. Например для каких-нибудь кастомных мапперов это вообще маст хэв.
Как вы привыкали к тому, что надо ставить фигурную скобочку { в новой строке, а не на той же? Ещё заглавные буквы для методов не привычны, всё таки с маленькой выглядит элегантнее.
>>2480944 Настраиваешь .editorconfig и IDE сама все расставляет. Алсо джавовский стиль, когда скобка оставляется на предыдущей строке (он же K&R) очень уебищен. Говорю как работающий сейчас и с ним и со стандартным шарповым стилем (Олман) Олман в сто раз лучше.
>>2480943 Потому что EF может быть слишком медленный и нужен будет Dapper. Потому что может быть no-sql БД. Или БД не будет вообще. Так нахуя подгружать в проект ненужную библиотеку, которая будет только нагружать процесс?
>>2480959 Ну чем джавовский плох, а шарповский хорош? Вот я вижу, что теряется лишняя строка и код становится объемнее. Учитывая, что ещё и методы с большой буквы, то кажется, что у тебя просто куча кода. Хотя то же самое в джаве куда компактнее.
>>2480805 >Из EF. >>2480806 >Из ORM, а по дефолту для асп.нет это EF Да с хуя ли это из ORM, это один из паттернов при работе с реляционными БД связанный с версионированием. Ты можешь вообще с чистым sql работать и все равно использовать механизм миграций. ORM просто позволяют этот процесс автоматизировать. Те же EF или даппер можно использовать в режиме pure sql, отдавая ему на откуп только версионирование базы в соответствии с моделями данных. Т.к. писать эти миграции руками та еще ебанистика.
>>2480965 > а шарповский хорош? Тем что четко отделяет тело метода/цикла/блока и т.д. от их сигнатуры/определения/базы. Особенно заметно когда например в сигнатуре метода несколько параметров и их приходится врапить, чтобы они за экран не вылезали. Тогда вообще хуй поймешь, где кончаются параметры, а гду уже тело метода началось. Особенно на конструкторах заметно.
Во вторых более удобно когда нужно отельный блок скопировать и перенести куда-то. Не приходится искать где эта ебучая открывающая скобка притаилась. В олмане просто копируешь все нужные строки и все.
>>2480965 >Вот я вижу, что теряется лишняя строка и код становится объемнее. Во первых нехуй байты и строки экономить. Во вторых если тебе прямо так жмет, то можешь в студии экстеншен вроде Shrink Empty Lines, который уменьшает пустые строки и строки со скобками/знаками и т.д. (вобщем без кода) по вертикали и они намного меньше места занимают.
>>2480965 >Хотя то же самое в джаве куда компактнее. В пизду компактность если она мешает читаемости. Потом в любой момент можно все ненужные блоки свернуть по хоткею и разворачивать только то, что нужно.
>>2480977 Да-да, только дебажить его заебешься. Ну и на большом проекте при изменении чего-нибудь одного может все пиздой накрыться, т.к. хер ты узнаешь, что какая-то стопитсотая хранимка не соответствует новой модели.
>>2480949 ну он уходит в другую крайность и вообще все в кучу свалил. репозиторий вообще перпендикулярен и так же используется с даппером - это просто класс "где будут методы для такой то сущности, а внутри даппер или что угодно"
Мои претензии - много жрет памяти - медленно стартует - танцы с бубном если нужно выбрать без трекинга, а потом обновить одно поле в базе - он орм, а значит "мы не можем использовать фишки такой то базы, а вдруг будем переезжать" (на деле никогда) - он орм, а значит над "думаем как написать на SQL" добавляется "теперь нужно придумать, как написать в терминах орм, чтобы в итоге все транслировалось во что нужно" Вот последнее просто бесит
А так даппер как легковесный маппер, но по возможности генерация sql с помощью LINQ, только тут не цель абстрагироваться от SQL максимально, а всего лишь использование Expression как спецификаций.
Чистый SQL...чист, но морока править если имя колонки изменилось и вообще собирать эту строку. Тут можно взять примитивный билдер, а потом добавить в него expression и получим LINQ )))
Есть еще подход как вот FastCRUD, но он как то вырвиглазно получается.
>>2480963 >Потому что EF может быть слишком медленный и нужен будет Dapper по наносекундам если будет, то ты перепишешь на SQL и будет равно дапперу, так что даппер ты брать не станешь (это я про последний и будущие EF кор говорю). Оно проиграет по памяти
>>2480968 >Ты можешь вообще с чистым sql ты можешь делать что угодно, но первоначальный вопрос был "что за миграции такие в асп.нет вон в книжках о них пишут". А это как раз EF и его миграции
А как в ASP.NET можно управлять бинами в контексте? К примеру, я создал свой класс и как мне его поместить в контекст, чтобы потом он внедрился в другой класс?
>>2477920 А я напоминалку пооставлю в тилибоне, чтобы нейрончики будоражить в ячейках ассоциативной памяти с адресацией по содержанию и короче какбэ чтобы память себе освежать. Пусть тилибонькает раз в месяц, хуйле.
>>2481397 В шарпе похуй. Т.е. имя класса может не совпадать с именем файла. Но, крайне рекомендуется, чтобы оно совпадало. По крайней мере на реальных проектах тебе точно предъявят если они будут различаться и попросят обосновать. Если в файле несколько классов, то обычно файл называют по первому классу. С именами каталогов/проектов та же фигня.
>>2481390 Ну если только для удовольствия и ради познавательного интереса. Я сам старый байтоеб и до сих пор иногда на ассемблере пишу в качестве хобби. IL я потрогал ровно в той степени, чтобы понимать при случае что это и как с ним работать. Ну и просто посмотреть во что в итоге высокоуровневый код превращается. Но в реальной работе это ни разу не понадобилось.
Вот вы метанит-метанит, а там все примеры созданы в расчете на вижлу, которая только под виндой. А кто хочет программировать на линуксе, не может использовать метанит. При этом многие новые книги зарубежных авторов стали ориентироваться больше на вс код и консольные команды.
>>2481577 > При этом многие новые книги зарубежных авторов стали ориентироваться больше на вс код и консольные команды. В новом издании Прайса наоборот автор выкинул vs code и перешёл на студию.
Вот C# Core учится легко и быстро, а на ASP.NET буксую, потому что не понимаю зачем нужны все эти конфигурации, миграции, сервисы. Как вы учили ASP.NET?
>>2481940 ASP.Net вообще один из самых легких фреймворков для освоения. Он хорош тем, что с ним можно начать работать не зная и половины его возможностей. >конфигурации, миграции, Это не часть ASP.NET >сервисы. А это вообще просто способ/шаблон проектирования. Ты можешь на ASP написать приложение вообще без единого сервиса запихнув всю логику в контроллеры. Это правда совсем говнокодисто будет, но сделать так можно.
Вопрос, что лучше использовать - просто убрать async с контролера или завернуть его в TaskCompletionSource? Или может итт знают какой-то лучше вариант?
Поясните за json сериалайзеры, конкретно Newtonsoft и System.Text.Json.JsonSerializer? В тырнете пишут второй по бенчмаркам быстрее, алсо еще заметил что второго есть поддержка стримов которые работают еще в полтора-два раза быстрее чем просто десериализация строки. Есть ли какой-то профит юзать Json.Net если мне не нужны его дополнительные фичи?
>>2477503 >классы в 5.2 имели некоторые ощутимые проблемы с производительностью, в отличие от массивов Странно слышать про сравнение производительности классов и массивов, когда это соврешенно разные вещи.
>увидел что всем насрать вообще на производительность В чем это конкретно проявлялось?
>>2477518 >С появлением нет кора жрать говном можно уже перестать. Нет кор появился несколько лет назад, но народ до сих пор жрет говно в виде go и js. В чем причина?
>>2482536 Обычный SQL. Один хуй никто базу данных менять никогда не будет. Ну разве что вы на оракле сидели, а тут петух в жопу клюнул и пришлось на постгрес мигрировать в сжатые сроки.
>>2482541 Тяжелое наследие маркетинга по майкрософтовски. Народ до сих пор им не верит и думает, что еще чуть-чуть и они опять включат свой агрессивный ЕЕЕ и всех повяжут. Примерно так же как и с гуглом. Т.е. все конечно пользуются потихоньку go, стартапчики там всякие и т.д. Но в уме упорно держат, то что это гугл и завтра он с ненулевой вероятностью скажет "Нам надоело, нахуй го, мы его закрываем"
>>2482693 Можно подумать у большинства тут есть хоть какое-то право выбора чем пользоваться. Выбирать стек удел архитекторов, а макаки уже будут жрать, что дают и писать как им скажут.
>>2482721 var isSubset = !collection2.Except(collection1).Any(); var isSubset = collection2.All(a=> collection1.Contains(a)); Не знаю, что у тебя за задача, но поиграйся с linq
>>2482779 Я уже избавился от необходимости проверки, но всё равно спасибо
Теперь есть другой вопрос. Есть возможность собрать шарповое приложение так, чтобы оно не зависело от наличия .NET рантайма в винде? Чтобы у меня был абсолютно топорный бинарник, без зависимостей и бла-бла
Аноны, нужна пояснительная бригада. Объясните, пожалуйста, понятным русским языком - что такое преобразование типов в наследовании где еще используются операторы as и is и нахуй оно нужоно? Посмотрел уже несколько раз пару видосов на ютубе, и не понял, наверное, даже 10%. Что человек делает на пикриле? Зачем при создании объекта материнского класса он использует конструктор дочернего, если методы из него все равно нельзя использовать? Что делает 30 строка? В новый объект дочернего класса запихивает объект материнского, созданный при помощи конструктора того же дочернего класса? Зачем тут (Point)? Зачем вообще эти шуешные многоходов очки?
>>2482786 Продолжай накачивать мозги сишарпом и понимание однажды придёт. Хотя на самом деле мозг лишь выходит на нужную частоту, а знания подгружаются из космоса.
>>2482789 >Продолжай накачивать мозги сишарпом и понимание однажды придёт. Я бы с удовольствием. Только наследование - основополагающая тема, и если я пойду дальше, нормально не разобравшись с ней, ничего хорошего из этого не выйдет.
>>2482786 Вот то, что тебе нужно понять, чтобы понять код выше: 1. explicit и implicit приведение типов 2. upcast и downcast 3. boxing/unboxing (ты можешь посмотреть на то что это на сайте sharplab.io, справа надо будет выбрать "IL" и вникать в инструкции IL кода в нужном тебе методе)
>>2482839 >отключение GC предоставляется искаропки Это залупа. Предоставляется отключение GC в рамках какого-то региона в коде, но не в целом.
>>2482844 >Я ж поэтому и спрашиваю, как мне влинковать всё в экзешник, как в тех же плюсах? Я же говорю, self-contained надо указывать во время публикации проекта
>>2482786 > Объясните, пожалуйста, понятным русским языком > нахуй оно нужоно? Конкретно мне это нужно, чтобы создавать списки. Допустим у тебя есть классы: мужчина, женщина, человек, бот, нейросеть. Все они наследуются от разных классов, а некоторые и друг от друга, но все они реализуют интерфейс "двачер". Вот это-то мне и нужно. Мне нужен список двачеров. Я пишу: > List<IDvacher> dvachersList = new(); > while (Watch.IsWatching(OnDvach)) { > dvachersList.Add(AbstractTaschMayorFactory.GetMimokrock()); > } Как-то так. Понел?
>>2482936 Юзать фрипаскаль, генерирующий экзешники по полкилобайта, плюс твой контент, и не зависящие ни от чего, кроме системных библиотек целевой платформы. Если делаешь оконное приложение, подтянет еще 15 кило графониума в экзешник, в винде зависимостей не притянет, а в линуксах притянет в зависимость ГТК или КТ.
Если ты пришёл в шарп и вообще в дотнет за компактными однофайловыми приложениями, то это ты ошибочно пришёл. Здесь другие ребята. Мы собираем ПРОЕКТЫ, ПРОЕКТИЩА, с кучей либ, которые запаковываем в инсталлеры, которые после загрузки и запуска пользователем чекают пререквизиты и предлагают юзеру докачать при их отсутствии.
Нафига в сишарп напихали столько сахара? Ладно бы ещё это выглядело как-то органично, а то некоторые конструкции выглядят как говорится - не пришей пизде рукав...
>>2483369 Тупой вопрос. Ровно затем же зачем вообще появились языки программирования. Чтобы человек мог объяснить машине, что он хочет от нее на более понятном для себя языке и с наименьшим числом смысловых единиц. Апофеозом всего этого будет один единственный метод DoPizdato()
>>2483399 Весь сахар в C# - ахуенен, я не могу привести ни одного примера сахара который бы выглядел хуёво или непонятно. Лямбды понятны интуитивно если у тебя больше 9 классов образования или хотя бы ПТУ где давался матан. Авто-свойства тоже понятны: генерятся backing field и 2 метода get set. Различные *=, +=, -=, /= пришли вообще из других языков которым по сто лет и так же являются интуитивно понятными. Сахар над событиями точно такой же как и над свойствами. Сахар с проверкой на null: myDelegate?.Invoke() - тоже понятен если его один раз увидеть. Оператор ?? тоже понятный с первого раза: если слева Null - делаем то что справа, иначе слева. Хуй его знает, что тебе непонятно.
>>2483677 Ну що тут сказати? В связи с недавними событиями (Z-событиями) количество легаси вангую поубавится. Потому что поддержки нет. Фирмы ушли. Они конечно вернутся, но будут ли их ждать? И будут ли на них полагаться? Это же, выражаясь языком инфобезопасности, компрометация. Все ушедшие с рынка фирмы на многие годы скомпрометировали себя, как ненадёжная хуйня, которая может отказать в обслуживании клиентам по независящим от клиентов причинам. Однако это может не помочь и шарпу. Сейчас-то он как бы опенсорц, но все мы прекрасно понимаем, какой "опенсорц" у майков. Кто-нибудь вообще собирал из исходников дотнет с мсбилдом?
>>2483665 Так исторически сложилось, а на переписывание кодовой базы на шарп с джавы мало кто согласится выделить бабла. Проще со старой жабы то есть восьмой мигрировать на 11/17 либо сразу на котлин, это в десятки раз дешевле будет.
Повторяю сишку, вот такая задача: Калипта Анны, которая считается самой быстрой птицей в мире относительно своего размера, может развивать скорость до 80 км в час.
Задача Напишите программу, чтобы вывести, сколько километров она будет преодолевать каждый час за 5 часов полета.
Выходные данные 80 160 240 320 400
Подсказка Просто умножьте 80 на счетчик для каждой итерации. Используйте цикл for для итеративного выполнения умножения.
Я вот сейчас час думал над тем, что требуется, даже заснул от того, что сложно понять. Что она. По условию задачки. Летит на максимальной скорости и надо просто количество км с нуля каждый час выводить. ПРИ УСЛОВИИ, ЧТО НЕПРЕРЫВНО ЛЕТИТ ПО ПРЯМОЙ!!! Пиздос, ну кто так условия ставит. А как проходит ваш день?