24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
>>2851295 (OP) Сижу в своё удовольствие почитываю и разбираюсь в книжечке Рихтера, и хочется прям наглядно, самому потыкаться, в каждом его всхрюке разобраться.
И вот у него часто проскакивает таблица метаданных манифеста. В которой он рассказывает о таких таблицах как: AssemblyDef, FileDef, ManifestResourseDef, ExportedTypesDef. И я чот затуп словил и не могу найти эти таблички в IlDasm или IlSpy.
Мне просто интересно откуда он берет эти данные. Может кто из анончиков, такую фигню подскажет.
Да это залупа ссаная. IntelliSence начинает корежить.
Я вот хочу узнать какие есть методы в System.Math, пишу Math, а студия начинает мне предлагать Extended.Math. В общем появляется куча неудобств.
Либо Надо.Писать.Весь.Сука.Путь что нихера не удобно.
Либо надо выдумывать мудреный неймспейс, который сто пудов начнет конфликтовать с какой нибудь еще либой. Вот пишешь Geometry, а хуй тебе там! Потому что такое имя есть System.Windows.Media.
Еще и обоссаная студия сперва предлагает тебе оба варианта, а на третью попытку предлагает только один, потому что ебаному майкрософту надо вставить свой обоссаный ИИ, которому даже кофе заварить не доверишься. ИИ за тебя уже решил.
Шарпаны, что думаете от чистоте крови функции? Пробовали? Как ощущение? Просто со стороны - выглядит как вполне хорошая хуйня же. Типа легко написать тесты. Поведение - предсказуемое. И вообще. Потом из этих чистых функций - наебенил еще фунукций и все заебись погнали.
>>2852022 Это какая-то залупа для джава скриптизеров. В сишарпе есть статические методы для этих целей, а обычные на то и созданы, чтобы взаимодействовать с компонентами экземпляра класса. Примеры таких методов — свойства.
Какой фреймворк выбрать для создания собственной соцсети - Java Spring или #C .NET Core? Правда что Spring медленнее, но стабильнее для больших систем?
>>2852523 ну смотри. если всякий там #if DEBUG используют, значит не хотят в релизной сборке дополнительной нагрузке Мне стоит пояснять что вызов лог метода ДАЖЕ при выключенном логлевеле несет оверхед? И обычно это решается (псевдокод) if(logger.IsEnabled(debug)) logger.WriteDebug и что серилог не исключение (пуф тебе офф вики https://github.com/serilog/serilog/wiki/Writing-Log-Events#level-detection)
то есть твое решение....собственно не сильно отличается от решения в самом вопросе.
Вот жетбраинсковое _logger.LogWithLevel()?.Log() действительно решает проблемы вызова метода когда не нужно, но даже оно дает некоторый оверхед по сравнению с "все вырезано. 0 оверхеда"
>>2852573 что выбрать? подводную лодку или камаз? Мне рассаду выращивать. Ну что за вопросы блин
>>2852490 >>2852523 братишь у меня все в скомпилированном виде занимает 9,50KB нахуй мне эта несомненно крутая монстра которая толще всего моего проекта на порядки, когда пикрелейтед выполняет свою задачу на сто процентов и на релизе даже не появляется?
у меня sample.txt лежит в директории с тестами, как бы мне от рута проекта до него относительный путь указать?
в ноде есть __directory
нагуглил такое https://stackoverflow.com/a/13762465 но эта хуета указывает на /home/user/RiderProjects/EscrowReader/EscrowReader.Unit.Tests/bin/Debug/net7.0
если запускать тесты из райдера и не факт что в другом окружении будет указывать в то же место наверное)
можно было бы в /temp держать но чот хз, не уверен что ток на unix будет запускаться..
Всем привет. Появилась идея сделать что-то типо сайта для просмотра видео. Проблема в том, что если файл весит много, скажем гигов 10, передавать его в сеть - это просто пиздец. Отсюда вопрос: что нужно посмотреть/почитать, чтобы понять как разделить видео на сегменты и передавать в браузер. Насколько я понял нужно код на Js наваять, который будет запрашивать видос с определённого места, а сервак должен будет выдавать сегмент видео, скажем в 4 мб.
>>2852581 >значит не хотят в релизной сборке дополнительной нагрузке Ее и не будет. У логгера можно выставить уровни. Есть возможность глобально указать минимальный уровень.
А это занчит, что ты можешь на старте заюзать ровно один раз #if DEBUG и в блоке глобально указать минимальный уровень, а для релизной версии повысить до Error или Info.
>if(logger.IsEnabled(debug)) logger.WriteDebug Я себе сделал метод немного короче, типа logger.IsDebug()?.logger.WriteDebug()
В любом случае это не так критично по сравнению с остальным. Это как наперстком черпать воду при WPF-шторме.
>>2852623 Братишь, а че будешь делать, если тебе надо будет увеличить уровни логгирования, потому что на машине клиента не робит, а на твоей робит? Ты бы мог установить переключатель и получить от клиента более подробный лог.
>>2852941 то есть ты сам стараешься не вызывать метод если левел не установлен, но всем говоришь что "вызывайте, серилог разберется"?
К дохтору срочна
на деле всегда есть оверхед вызова метода и возможность боксинга. Для избежания боксинга используется набор методов с <T1,T2... сколько их там в серилоге? 3 параметра? <T1,T2, T3> (ох пожадничали) а потом params object[]
ну и в горячих местах это просто вызовы методов....которые не нужны.
>>2852966 >то есть ты сам стараешься не вызывать метод если левел не установлен, но всем говоришь что "вызывайте, серилог разберется"? Я такого не говорил. Операции с текстом лишние, а булевые ничего не стоят.
>на деле всегда есть оверхед вызова метода и возможность боксинга. >ну и в горячих местах Это в каких? Там твой логгер нахуй не нужон. Пиздец. Ты бы еще в циклы логировал.
А я тебе скажу в чем твой план — говно. Когда пользователь запустит твое приложение, оно не сможет записать логи буквально никак. В разработке используется инструменты отладки, а логи записываются как раз на случаи отсутствия непосредственного доступа к программе.
>>2852977 >Там твой логгер нахуй не нужон так с этого и начали. Это ты логгер притащил туда где его не требовалось. А теперь возмущаешься.
>Ты бы еще в циклы логировал а что не так. Если нужно, то логируется все.
>В разработке используется инструменты отладки ты про Debug.WriteLine? о да, его так весело читать. Там чего только нету. Там есть все...что тебе и не нужно.
>>2852979 >Это ты логгер притащил туда где его не требовалось. Я не ванга. Вижу хуйню — делаю замечание.
>а что не так Хуйня №2
>ты про Debug.WriteLine? Я про точки останова, таблицу переменных и панель стека вызовов, которые дают исчерпывающую информацию на любом этапе. Логгирование подразумевает отображение общей информации и в большей части для релизной версии, когда нет доступа к вышеописанным инструментам.
>>2852982 >Я про точки останова, таблицу переменных и панель стека вызовов, которые дают исчерпывающую информацию на любом этапе эээх не ловил ты никогда гейзенбаги. ничего. может повезет.
>>2852980 ну вот я и пишу сообщения для себя, которых на релизе не будет и которые будут выглядеть красиво, спасибо двачу-помогачу. а логгер будет от фреймворка, который подтянется автоматически и будет срать логами только тогда когда это надо, а если "клиент" зальет его в дискок сообщества, то бот его проанализирует и пинганет автора по гуиду. ты на основании трех строчек кода уже какую-то себе картину составил и начал советы непрошенные довить. не надо так
Как в Markdown файлах вставлять локальные изображения. Хотел красивый ридми запилить, но видимо не судьба, это говно ни на чт оне способно. Даже в вижуал студо коде можно, но не в вижуал студии.
>>2852581 >что выбрать? подводную лодку или камаз? Мне рассаду выращивать. Ну что за вопросы блин Java Spring - это подводная лодка? А C# .net - Камаз?
Это типа как UE и Unity - UE для больших проектов, а Unity - для казуалок?
>>2853785 >Java Spring - это подводная лодка? или камаз >А C# .net - Камаз? или подводная лодка >Это типа как UE и Unity - UE для больших проектов, а Unity - для казуалок? то есть то что это 2 разных языка, и вряд ли ты знаешь их оба, тебя не смущает? ну ок
но все равно спрашивать в шарпотреде про жаваговно - ну такое себе.
>>2853954 Я мимодил, увлекаюсь с младых ногтей языками, в своё время неплохо знал джаву, писал на ней пруверы и игры на LWJGL, но спринг не трогал никогда, вебом не интересовался, потом ушёл в шарп капитально, в шарпе уже и кишочки знаю. В принципе оба языка в отрыве от фреймворков представляю довольно хорошо, слежу за новыми фичами в языках и.т.п. А вот чем реально спринг отличается от аспа? Я никогда не видел приложение на спринге даже изнутри.
>>2852947 > Братишь, а че будешь делать, если тебе надо будет увеличить уровни логгирования, потому что на машине клиента не робит, а на твоей робит? Ты бы мог установить переключатель и получить от клиента более подробный лог. Я обычно когда нужна трассировка подкидываю дебажные библиотеки клиенту с напердоленной специально под него трассировкой в местах где жду проблемы. Смысла делать одну трассировку на все косяки не вижу, слишком много мусора и логи тяжело анализировать, больше 50 мегабайт в Notepad++ лучше не вставлять, а на нагруженной опердени 50 мегабайт трассировки набивается за 10 минут. >>2854306 Я думаю людей которые знают и шарп и джаву не мало, меня на работе пытались на джавапроект посадить, но я задоджил. У нас в одном отделе шарп, в другом джава например.
>>2854313 >Я обычно когда нужна трассировка подкидываю дебажные библиотеки клиенту с напердоленной специально под него трассировкой в местах где жду проблемы. А как это сделать?
>>2854313 >Я обычно когда нужна трассировка подкидываю дебажные библиотеки клиенту с напердоленной специально под него трассировкой в местах где жду проблемы. Чет либо пиздеж, либо клиенты у тебя конкретные терпилы, либо у тебя в производстве ебаный бардак. >слишком много мусора и логи тяжело анализировать, больше 50 мегабайт в Notepad++ лучше не вставлять Про ротацию логов слышал? >а на нагруженной опердени 50 мегабайт трассировки набивается за 10 минут. Ну так если у тебя "опердни" - значит финансы. А там даже один проебаный платеж, это гораздо хуже чем гигабайты лишних логов. >Я думаю людей которые знают и шарп и джаву не мало, меня на работе пытались на джавапроект посадить, но я задоджил. У нас в одном отделе шарп, в другом джава например. Просто знающих - много, т.к. языки родственные по многим параметрам, а вот тех кто нормально шарит в кишках и ньюансах фреймворков, так чтобы их профессионально применять уже очень немного. А то что тебя пытались просто с нихуя на другой стек посадить говорит либо об охуенном бардаке в твоей конторе, либо показывает твою низкую ценность как специалиста, что работодателю совершенно похуй где ты будешь работать и что и там и там выхлоп от тебя небольшой будет.
>>2851295 (OP) Совсем ньюфажный вкатывается в тред, в C# по видеоурокам SimpleCode только дошел до классов.
Хочу освоить ASP.Net Core для дальнейшего трудоустр-ва на галеру. Времени много (безработный), желание есть.
Пошел искать актуальные обучающие материалы - пока ничего, кроме двух книжек на пикрелах не нашёл. Подскажите, во что забуриться с головой и не охуеть от косноязычного слога/хуевого микрофона ментора.
>>2854978 ты из тех для кого существует только один вид софта ))) много видел логов, например, в десктопном софте? а ведь даже в браузере они есть. ты их видел? ах да, у тебя же не дебагбилд, вот тупые разрабы браузеров -у них бардак )
открываю сбилденный студией dll в hex редакторе - вижу путь проекта, у меня дефолтный C:\Users\XXXXX\source\repos сразу встал такой вопрос - а что еще пишется в бинарники, есть ли там какая-то еще более персональная инфа и как анонимизироваться, если да?
>>2854446 > А как это сделать? А какие проблемы? Кодовая база разбита на рой мелких библиотек, если надо одну подправить то просто беру и правлю, состояние на конкретный патч у меня в ветке, потом заменяю релизную библиотеку отладочной с логами, снимаю трассировку, опционально правлю что-то и подкладываю пока ошибка не пропадёт. Потом отключаю трассировку (обычно конфигом логгера). Потом правки (без трассировки) переношу из рабочей копии патча в мастер и оттуда они попадают в следующий патч. >>2854978 > Чет либо пиздеж, либо клиенты у тебя конкретные терпилы, либо у тебя в производстве ебаный бардак. Ситуация когда надо снимать трассировку означает что проблема эскалирована уже максимально высоко, такое не особо часто случается, но нашим софтом пользуется очень много кто и на фоне большого количества установок приходится периодически это делать. На тестовых контурах интеграций поймать баги перед релизом нереально, там слишком много что влияет, трассировки нужны под большой разнородной нагрузкой которая бывает только на проде. > Про ротацию логов слышал? И чем она тут поможет? Зачем хранить архивы трассировок? Ты ССД продаёшь и надо чтобы они быстрее из строя выходили? > Ну так если у тебя "опердни" - значит финансы. А там даже один проебаный платеж, это гораздо хуже чем гигабайты лишних логов. Проебать платёж очень сложно. Не то что бы нереально, но если что-то пойдёт не так хоть немного то транзакция просто не завершится и вернётся с ошибкой. Проёбанные платежи происходят только после очень крупных релизов и обычно их можно пересчитать по пальцам одной руки на всю страну за год. Обычно проблема не в том что платежи пропадают, а в том что они возвращаются с ошибкой хотя должны отработать нормально или отрабатывают медленно. > А то что тебя пытались просто с нихуя на другой стек посадить говорит либо об охуенном бардаке в твоей конторе, либо показывает твою низкую ценность как специалиста, что работодателю совершенно похуй где ты будешь работать и что и там и там выхлоп от тебя небольшой будет. Почему? Ты просто слесарь фреймворка и тебе платят за знание кишочек аспа, ты на всех эту слесарную мудрость и распространяешь. Моя ценность как сотрудника не в понимании кишочек аспа, а в понимании бизнеса кабана и того как система крутит этот бизнес. Гораздо легче научить меня спрингу чем джавадебила тому как вся остальная система устроена и как должны проходить бизнес-процессы. Пиздец у тебя привычка на ровном месте пытаться собеседника унизить, у тебя наверное нет друзей.
>>2855142 Я не знаю, но путь к исходникам там реально есть. Обычно сборка релизных версий происходит не на машине разработчика, а на агенте тимсити и вся дрисня там заполнена тоже с агента. Если тебе интересно посмотреть что ещё в DLLке то юзай ILDASM, я по приколу завтра тоже гляну что там есть.
>>2855406 >Какова вероятность со знанием asp.net core и react найти работу на удаленке? Просто со 'знанием' вряд ли. Вот с 'опытом' хотя бы от полугода, то вполне реально.
Типа class A{ void Visit(IVisitor visitor{ visitor.VisitA(this); } } class B{ void Visit(IVisitor visitor{ visitor.VisitB(this); } }
Типа чем объективно это лучше варианта с:
handler.Handle(a); handler.Handle(b);
При этом классы A-B нихуя про этот визитер не будут знать и не будут засраны этим говном. А логику при визите - все равно никто никогда не добавляет ИРЛ.
>>2856623 Не. Просто вот я на ночь глядя вспомнил про конкретно этот паттерн. Подумал-подумал. Еще раз подумал. И за всю жизнь видел его только в коде Netty или Mina(не помню уже, давно смотрел) и это был пиздец какой-то(то что пиздец был - помню) Пизжу. Еще кажется в сорсах .net'а видел пару раз. Но там оно тоже выглядело будто просто хуйнули, чтобы было, типа мы тоже как жависты знаем эти ваши паттерны. Вот и думаю. Мож я чего-то не понимаю и на деле есть применение, где ну прям код становится лучше, удобнее и понятнее.
/// передаем свойство Point по ссылке Point pos = new(300, 300); if(Clamp(ref pos.X, 0, 100)) {} /// где Clamp это ... private static bool Clamp(ref double value, double min, double max) {}
Собсно, а зачем в шарпе нужен ref, если ты не можешь передать свойство по ссылке и его изменить? Классы сами по себе это ссылка и их не нужно передавать по ref, а то что нужно передать по ссылке — не передается. В бейсике есть от ref смысл в изменении структуры по ссылке?
Приходится срать таким образом, если нужно и получить измененное значение структуры и результат успешности операции: private static bool Clamp(double inputValue, double min, double max, out double outputValue) {} Ок, так нет аллокаций, но нахера в шарпе ref?
>>2857741 Ваш сахар несладкий. В бейсике я могу передать свойство в параметр метода как ref и внутри перезаписать. Чтобы такое сделать в шарпе, я должен изъебнуться, и самое печальное, что подобное >>2857342 не повышает ни производительности, ни компактности.
>>2857239 Реф нужен для того чтобы передать ссылку на что-то.
Свойства - это пара методов.
Давай просто переведем твое свойство в то что ты там пытаешься делать:
if(Clamp(ref x.get_X(), 0, 100))
Че по твоему должно произойти-то?
Про передачу по ссылке каких-то простых сущностей типа инта. НАХУЯ? Вот серьезно. Чтобы что? Это не массив. Это не какая-то пиздец сложная структура, которая при копировании сожрет миллионы тон ресурсов. Это, мать его, простое значение, размером с эту самую ссылку, которая, блядь, так же будет создана, если ты передаешь по ссылке(блядь, представь себе, сук, ссылки - тоже занимают место в памяти и чтобы их передать - надо так же создать переменную, а обращение к тому что лежит по ссылке - дольше, сука, потому что надо сначала из ссылки достать адрес того что ищется, а потом уже считать из адреса значение).
Короче. Не беси меня. Вот серьезно. НЕ БЕСИ, блядь.
По ссылкам - передаем либо то когда в методе может измениться значение лежещее по адресу, либо если структура - пиздец здоровая и ее копирование - избыточно. Все.
>>2857901 >блядь, представь себе, сук, ссылки - тоже занимают место в памяти Так у тебя в любом случае будет сылка, нахуй. У тебя просто НЕТ возможности это обойти. Никак.
Вот напиши мне метод TryClamp, который обрезал бы число по диапазону min и max, и возвращал: 2. результат обрезания 1. булевый результат факта обрезания. Если обрезал - true, если нет - false. Давай, напиши мне такой метод без использования ссылок, кортежей и анонимных типов.
>Это, мать его, простое значение, размером с эту самую ссылку Потому что из-за этих ограничений возникает оверинжениринг, когда тебе нужно изменить значение свойства.
В итоге ты либо создаешь еще один параметр out в методе из котрого ты тоже не можешь присвоить значение отбратно
>>2857939 > 2. результат обрезания > 1. булевый результат факта обрезания. Если обрезал - true, если нет - false.
public static class Clamper { public readonly struct ClampResult { public readonly bool Clamped; public readonly double Value; public ClampResult(bool clamped, double value) => (Clamped, Value) = (clamped, value); }
public static ClampResult Clamp(double val, double min, double max) { if( val < min ) return new(true, min); if( val > max ) return new(true, max); return new(false, val); } }
>>2857939 на деле шарп мог бы засахарить ref Property. Это вообще легко, но это ж мелкие. Они скажут - юзай ламбды (они то встраиваются в класс в отличие от методов хаха )
есть UserControl > ContentControl > Combobox есть 2 свойства у UserControl ItemsSource/SelectedItem комбобокс биндится к этим свойствам у контрола. Ну а клиент биндится снаружи. То есть обычный юзерконтрол
И происходит смена DataContext (там по таймеру она) и список конечно меняется и летит SelectedItem=null в старый!!! DataContext, который разумеется такого переварить не может (но не суть)
>>2857986 >без использования кортежей и анонимных типов >создает структуру Наебал, систему, так сказать, но теперь вызов твоего класса нельзя запихнуть в If т.к. он возвращает не bool.
>>2858003 >на деле шарп мог бы засахарить ref Property. Мало того, они уже так сделали, но не для шарпа. Я понимаю, что некоторый бейсиковский сахарок вылезает со временем боком — это я понял с шарпом и понял почему в нем нет подобного, но здесь-то что может пойти не так? Не понимаю.
EF Core и many2many. Аннотации в join entity не работают?! Это вообще нормально?
[Table("student_course")] public class StudentCourse { [Column("uid")] public int StudentID {get;set;} [Column("cid")] public int CourseID {get;set;} public required Course Course { get; set; } public required Student Student { get; set; } }
И вот когда я его спрашиваю скажем context.StudentCourse.Single(sc => sc.CourseID = 1123).StudentID, я получаю ответ. А когда я спрашиваю context.Courses.Include(c => s.Students).Select(c => c.Students).Single(c => c.CourseID=1123), я получаю запрос, в котором написаны StudentCourse, StudentiD и CourseID.
>>2858003 >комбобокс биндится к этим свойствам у контрола Нет, у тебя он биндится к свойствам вьюмодели, которая подхватывается из DataContext. А депенденси-свойства ItemsSource/SelectedItem в UserControl у тебя просто висят в воздухе.
Чтобы комбобокусу присосаться к ним, нужно обращаться к родительскому UserConrol по типу или по имени, и уже у него искать эти свойства.
>>2858163 Ну да, селектед итем сбрасывается, если вернуться на предыдущую модель. Может это из-за асинка. У меня вроде тоже были с этим проблемы, не помню как решил.
Но вообще, в mvvm надо биндиться ко вьюмодели, а не через свойства, чтобы в датаконтекст пришла вобмодель, и уже только после этого там искался селектед итем.
>>2858189 асинк там не причем. Можно любым способом менять вьюмодель и эффект будет.
> в mvvm надо биндиться ко вьюмодели ну это снаружи юзерконтрол биндится куда хочет, но при этом ИЗОЛИРОВАННЫЙ юзерконтрол создает в себе депенденсипроперты и внутренний xaml должен с ними как бы работать. И особо неважно как внутренний xaml найдет эти свойства - не отваливается внешний биндинг. А ClearBinding затирает вообще все наглухо.
>>2858189 и причина то понятна при смене вьюмодели идет обновление привязки сначала ItemsSource, а потом SelectedItem. И в первой привязке сбрасывается текущий пункт, который дергает биндинг селектед...который еще старый и шлет хрень в старую вьюмодель
Таким образом, если поменять местами и будет <local:TestControl SelectedItem="{Binding SelectedItem, Mode=TwoWay}" ItemsSource="{Binding Items, Mode=OneWay}" /> то проблема исчезает
но это как бы не дело.
ловить смену датаконтекста, сбрасывать все привязки и потом героически в коде писать биндинги и шаблоны...да как то читается как говно, ощущается как говно и вообще подход - говно.
>>2858236 >Хотя тыщу раз менял вьюмодель целиком ну если биндиться как положено на датаконтекст, то проблемы вроде бы нет.
А вот при запихивании этого комбо в изолированный контрол и бинд через прокладочные депенденсипроп, то вот какая то хрень.
хз как комбобокс это магует. может ловит полную смену датаконтекста и что то там обнуляет? так нет удобных средств обнуления биндинга. Я гуглил и там жалуются на хз какую то проблему и биндинг в коде делают, хотя я разницы не вижу - после обнуления он снова слетит же. Да и как обнулять селектедбиндинг, а вдруг порядок правильный и тогда почем зря затрешь биндинг и неоткуда его взять.
>>2859295 Разрабатываем на винде в ВисуалСтудио. Пушим в гит, там техногоблины уже настроили женкинсы-хуенкинсы, гоняют-собирают-теструют-разворачивают на тестовом сервере.
Если надо что-то специфичное для линукса юзать в разработке - можно через WSL погонять.
Если мы ебанат и сидим на линуксе - Vim(ну, мы же уже решили, что мы ебанат), и вместо разработки хвастаемся, что 900 символов в минуту печатаем, а работу пусть вон тот джун делает.
Как ссделать так, чтобы в релизной сборке - не было полного пути до файлика если где-то эксепшн, но при этом все еще было имя файлика?
Типа просто всрато смотрится : С:\\users\XXX_ZZZ_NARUTO_FAN_1995_XXX_ZZZ\sources\repo\SuperApp\Core\Module\Parser.cs(256) Хочу чтобы было только: SuperaApp\Core\Parser.cs(256) А как так сделать - хз.
>>2859361 >Если надо что-то специфичное для линукса юзать в разработке - можно через WSL погонять. У меня просто отдельный стенд с линуксом. Я к нему прокинул удаленную отладку и удаленный запуск юнит-тестов с виндовой машины. По итогу разработка на винде, отладка и тесты на линуксе.
Я опять про EF Core. Я опять ничего не понимаю. Как выбрать 3й уровень навигации? Только третий? Ну скажем у Course есть Students, и у каждого Student есть Addresses. Как мне выбрать все Адреса всех Студентов Курса? Данные курса и тем более студентов не нужны.
Чет проиграл с этой маленькой компании у которой не хватило ресурсов на обновление самого актуального на тот момент гуи фреймворка для винды > After we replumbed WPF in .NET 4.0 to use System.Xaml, we weren't able to justify spending our smaller resources on migrating the WPF MarkupCompiler to use System.Xaml.
Всем привет. Есть возможность в компании перейти на шарпы, сам я фронтендер. Честно говоря есть желание перейти на бекенд, потому что хочется возиться с логикой. Но вот я метаюсь между пхп и шарпами, куда лучше, ваше мнение?
>>2859967 ПХП последних версий практически тот же шарп, но без возможности десктопа, зато со своими преколами. Шарп - ну, типа майки, крупная контора, хуе-мое. Ну и шустрее чем ПХП. Хотя опять же - ПХП сильно бустанули в скорости.
Я бы, если честно, если говорим про веб, сейчас бы взял ПХП. Дюже он хороший стал. При этом нет вендорлока, Более открытые и свободные инструменты. Да и вакансий побольше, если вдруг придется менять.
НО, как сеньер-шарповод - я все равно буду говорить, что шарп - лучше. Потому что я, блядь, 10+ лет в нем ковыряюсь. Кишочки вдоль и поперек излазил и вообще. Могу ругать, но все равно буду говорить, что шарп пизже.
>>2859967 Пыха (только 7 и 8 версии, т.к. 5-ая - такое себе) и Шарп одинаково приятные языки
Но минусы пыхи: - заточена только под веб. На шарпе же можно писать и компьютерное зрение, и мобилки, и игоры - дохуя всего. - если будешь искать работу на пыхе, то некоторые галеры любят загрузить своих разрабов цмсками и ссанным Битриксом (но чем больше опыта будешь получать, тем меньше такого говна будет) - За бугром меньше вакансий, чем на Шарпе (и то почти все - фулстек)
Плюсы: - Опять же ок язык, и с него есть огромнейший шанс срыгнуть в Golang, не потеряв в зряплате (галеры сами предлагают сделать это)
А на каком фронтенд-фрейме пишешь, если не секрет? Если это Вуе - выбирай пыху. Если ангуляр или рякт - шарп. Т.к. это оч популярные фулстек-связки
>>2860042 >А нужно ли тебе оно - становиться фулкеком и работать за двоих? Или планируешь полный свитч в бекенд со временем? Полный свич, заебали эти пиксели + не чувствуется инжиниринга какого-то. А с базами прикольно работать, как и с логикой в целом.
>А на каком фронтенд-фрейме пишешь, если не секрет? Если это Вуе - выбирай пыху. Если ангуляр или рякт - шарп. Т.к. это оч популярные фулстек-связки В основном на рякте, но и вуе пробовал. Третья версия вуе это почти тот же рякт по философии и концепциям. Один хуй пизда, как говорится.
>Опять же ок язык, и с него есть огромнейший шанс срыгнуть в Golang, не потеряв в зряплате (галеры сами предлагают сделать это) Да, знаю что это выход из пхп-мира.
>заточена только под веб. На шарпе же можно писать и компьютерное зрение, и мобилки, и игоры - дохуя всего. Ну камон, я веб-макака, да ещё и бывший вкатун, начинал с фронтенда. Какой мне зрение, игоры? Мобилки вообще забей, я хз кто на ксамарине пишет. Ну может где-то и пишут, но явно не так много, как на альтернативах.
>- если будешь искать работу на пыхе, то некоторые галеры любят загрузить своих разрабов цмсками и ссанным Битриксом (но чем больше опыта будешь получать, тем меньше такого говна будет) А я планирую сразу в лару залететь, лол.
>>2860027 Лол, спасибо за ответ, улыбнуло то что под спойлером и дальше.
А теперь вопрос ко всем: как мне этот скачок совершить? Думаю пописывать на шарпах понемногу, в принципе несложно, много схожести с тайпскриптом (еще бы, и то и другое майки делали), набивать опыт в бекенде и паралельно пых учить? Это реально вообще?
Если метишь сразу в пыху, то скипай нахуй шарп и ищи ваки фулкека. Повезет - будет почти столько же бека, сколько фронта. Если нет - будешь 80% времени ковырять фронт.
А на чистых бек ваках тебя попустят на собесе (извини)
> А я планирую сразу в лару залететь, лол. Увы, бывает такое, что в тайтле ваки написано "PHP-разработчик (Laravel)". Переходишь по вкладке - а там еще в довесок требуют 1C-Битрикс:-)
>>2860085 >Если метишь сразу в пыху, то скипай нахуй шарп Не могу скипнуть, потому что работа + надо базы подтянуть, да и пыху в целом, немного окунуться так сказать.
>>2859967 >Но вот я метаюсь между пхп и шарпами, куда лучше, ваше мнение? Если хочешь попасть потом в серьезный бизнес или финтех и крутить там микросервисы, то всяко шарп (ну или жабу).
>>2860050 >Хехе Почему нет? Я когда заходил в шарп, чутка пофулстечил на реакте (и то там сводилось все к написанию мелких компонентов и доработок отдельных гридов), а потом ушел в чистый бэк. И уже года три фронта не касаюсь и дальше api с бэка не вылезаю.
>>2860210 >Люди вверху говорят, что вполне приятный язык, начиная с версии 7 Угу, про джаву тоже говорят, что она c 17-й версии пиздатая, только в большинстве случаев везде 8-ка до сих пор и так там и будет. Так же и с пыхой.
А в шарпе уже и на .net7 вакансии есть, а в начале следующего и на 8-й появятся. И в большинстве мест, даже с легаси, новых людей берут с прицелом перевода софта на новый стек. Плюс шарп и в предыдущих версиях вполне себе неплох был.
>>2860268 Технически XUnit пизже. Т.к. по умолчанию лучше изолирует тесты, что более подходит для большинства обычных тестовых сценариев. Если же есть необходимость пошарить контекст между тестами, то это там делается довольно просто. NUnit наоборот по умолчанию лепит общий контекст и чтобы добиться от него нормальной изоляции нужно поебаться (хотя я его давно не касался, а фреймворк развивается, так что может там это уже и не так неудобно).
Всем привет. Написал код, который должен отправлять видео по кусочкам, но он не работает. Загружает небольшой кусок видео, а потом всё. При этом выдаёт ошибки как на скрине. Помогите, пожалуйста, понять что тут не так. Код: https://pastebin.com/iFVSV3tr
>>2860210 потому что новые фичи не перекроют детские болезни ибо совместимость. пхп это как уродец в семье жавистов вроде похож на жаву но урод
фрактал плохого дизайна не устарел и не устареет.
представь язык где 500+ функций в глобальном пространстве, где полный раздолбай что функция принимает (а некоторым нужно передавать по ссылке), что возвращает. Исключение ни одна функция из этих тебе не кинет конечно - проверяй возврат функции и потом доставай код ошибки и сообщение вручную. Сверху еще накинь автокаст в число, отсуствие вменяемых структур (хочешь HashSet? а хер тебе. делай словарь с ключ тебе нужным и значением ну пусть bool (не дай бог не null ибо тогда получишь проблему с isset, которая какого то хера делает больше чем array_key_exists, но работает в 300 раз быстрее. Ну можешь взять Db/Set. но это pecl, то есть у тебя в дистре должен быть нужная dll с этим и включено в php.ini....) тайп хинтинг убогий до сих пор. на питон бы посмтрели.
>>2860359 > Исключение ни одна функция из этих тебе не кинет конечно - проверяй возврат функции и потом доставай код ошибки и сообщение вручную Гоферы недоумевают, глядя на это заявление.
>>2860380 ты сравниваешь несравнимое в пхп у тебя функция может вернуть -1, false, null или вообще ничего при этом у тебя в языке есть исключения и они используются, а значит ты будешь вручную доставать "что там за ошибка и превращать в исключения"
смягчает все это только то, что ты будешь писать в рамках какого то фреймворка или движка, то есть в основном оперировать более высокими абстракциями, а в остальном просто верить "я тут начал писать файл, значит он будет писаться, если не будет - ну получит пользователь варнинг в итоге, а fail fast никому не нужен. мне пох"
>>2860471 в жс много WTF с типами, но вот таких все равно нет. В частности работа с ошибками там унифицирована
Здравствуйте. Скажите пожалуйста, есть смысл осваивать Шарп только ради геймдева? Если говорить как есть, то я сначала выбрал Яву, чтобы потом мобильные приложения делать. Однако сомнения появились насколько это мне это интересно будет в дальнейшем. И вот я посмотрел в чем разработка мобильных игр ведётся, что используется и решил у вас спросить. Даже если не получится с юнити, то где ещё сишарп можно использовать?
Вообще, если говорить про тяготы выбора и неуверенность, то у меня второго шанса не будет, в том плане что возраст уже не будет позволять заново переучиваться.
>>2860785 >Скажите пожалуйста, есть смысл осваивать Шарп только ради геймдева? Геймдев, это вообще в первую очередь не про язык. >Даже если не получится с юнити, то где ещё сишарп можно использовать? Еще есть Godot, есть XNA (или во что оно там сейчас мутировало), есть еще куча всякой полудохлой мелочи и отдельных библиотек позволяющих без движка геймдевить. >в том плане что возраст уже не будет позволять заново переучиваться. И сколько тебе лет? Просто интересно во сколько люди себя уже хоронят?
Почему при использовании dynamic студия меня заебывает сообщением: Функция "Основные моменты документа" сейчас недоступна из-за внутренней ошибки. Показать трассировку стека
>>2860418 Спасибо за ответы. То есть у меня проблема в http заголовках, я правильно понял? А вариант через asp core я уже готовый нашёл, но я хочу сам сделать через TcpListener
Я что-то не так делаю? Когда я пишу конфигурацию сущности в OnModelCreating, всё работает. Когда я переношу её в IEntityTypeConfiguration, ничего не работает. Как можно проверить, применилась ли конфигурация? Метаданные у сущности какие-то получить?
>>2860904 >Я что-то не так делаю? Когда я пишу конфигурацию сущности в OnModelCreating, всё работает. Когда я переношу её в IEntityTypeConfiguration, ничего не работает. Так а в OnModelCreating ты как её апплаишь? Сама по себе она же не добавиться и не примениться.
Хм. Она применяется. Если я комментирую [EntityTypeConfiguration] или ApplyConfigurationsFromAssembly(), но оставляю остальной код в OnModelCreating, то всё работает. Если я ТОТ ЖЕ КОД, скопированный в IEntityTypeConfiguration, применяю как конфигурацию - запросы к базе превращаются в тыкву.
>>2860954 >ApplyConfigurationsFromAssembly() Ты можешь поставить точку останова после Apply и посмотреть в дебаггере, что попало в ModelBuilder при первом обращении к контексту и его построении. Либо в самих классах IEntityTypeConfiguration в Configure поставить точку останова и там посмотреть заходит ли вообще код туда при построении контекста. Ну и выше тебе правильно говорили - сгенерируй миграцию. Если конфигурация действительно не применяется ты увидишь в ней код, который дропает, то что ты вынес из OnModelCreating. --- Ну и опять же покажи код, как было и как стало, чтобы увидеть.
>>2860854 >зачем тебе вообще динамик. В конвертере, собсно скрин >>2860802 . Он умножает значение привязываемого свойства на значение ConverterParameter.
Но для разных типов (по подобию перегрузок) придется делать кучу конвертеров. А если учесть, что оператанд А и операнд Б могут иметь разные типы, то вообще ужас.
>>2860969 Хм. Дебаг чем-то помог. Я увидел странный FK с пометкой Shadow Required FK Index. То есть он мне создаёт теневое свойство, и создаёт его криво... но только если я не использую OnModelCreating.
Зачем в ValueConverter есть ConverterParameter? Если: 1) в конвертере можно создать свойство нужного типа, а не object, который провоцирует аллокации. 2) оно не является Bindable, к нему ничего не привязать даже — нужно из тех же ресурсов тащить значение, которое нужно еще и создать.
Ситуация: Есть NGINX как реверспрокси. Есть фронтенд на ангуляре, есть пяток микросервисов с web-api, среди которых - сервис авторизации.
Нужно. Сделать восстановление пароля. Решил по модному - приходит ссылка на почту. При клике - перекидывает на форму установки нового пароля.
Проблема. Как это правильно делать в ситуации выше?
Я просто чет не понимаю как связать Nginx с фронтендом с беком и апишкой в данном случае. Пока что я нафигачил говняк на MVC который поверх веб-апишного проекта исключительно для формы восстановления пароля. Но мне не нравится такое решение. Типа как-то оно чужеродно смотрится.
Вопрос. Вот допустим, я запилил свой диспечер сообщений на рефлексии. Проблема. Работает оно медленнее намного, чем если бы я просто свичом хуйнул. Удобство добавлять новые обработчики - это хорошо. Но вот как-бы так сделать, чтобы после того как приложуха собралась запустилась и просканила сборки - заменить эту вот динамическую диспечеризацию на этот самый свич? Кто-нибудь такое делал? Кто шарит?
Ну. Т.е. чтобы было понятно.
Вот у меня есть магический атрибут : Endpoint("Device/Ping", Auth.None); Вуду магией я делаю так, чтобы сообщение попало в этот эндпоинт.
Но хочу я, чтобы после того как просканировал сборку, было так:
switch(MessageType){ case "Device/Ping" : context.SetHandler(new PingHandler(...)); break; case "Device/Pong" : context.SetHandler(new PongHandler(...)); break; case "Device/DestroyBase" : if(context.Auth.Allow("DestroyBase")){ context.SatHandler(new DestryBaseHandler(...)); } else{ throw new AurhRequiredException(); } break; }
>>2863713 хз че за свитч. Просто сканишь сборку на аттрибуты, находишь что тебе нужно, разбираешь че как и создаешь caller- методы. и далее код который по нужной тебе строке найдет нужный caller и вызовет (возможно попутно сделав биндинг). И сделать такое ты можешь как и через рефлексию, так и новомодные соурс генераторы.
>>2863739 Ты не понял. То что ты предлагаешь - это и есть то что я назвал диспечеризацией через рефлексию. Но мне надо чтобы после того как я уже вытащил из сборки нужные обработичики и понял куда там собираются обращаться - генерировался новый класс, который бы вместо рефлексии содержал свич, который по замерам работает раз в 150-500 быстрее чем последующий поиск обработчиков и их вызов из делегатов.
>>2863760 это ты не понял. скорость поиска обработчика в любом случае будет одинаковая (если у тебя не кривые руки) - ведь свитч можно заменить поиском по словарю, а вся метаинфа для твоего if(allow лежит рядом с обработчиком и заранее приготовлена, так что тоже быстрое у тебя долгий вызов делегата - так сделай его быстрым
конечно ты можешь сделать и через кодогенерацию сгенерив любой класс по желанию. И в нем может быть гигантский свитч, но троллебус-буханка.жпг
>>2863770 > скорость поиска обработчика в любом случае будет одинаковая Ну не знаю. Вот что свичем нагенерировалось.
Program:Main(): push rbp mov rbp, rsp call [System.Console:ReadLine():System.String] test rax, rax je G_M27646_IG15 mov edi, dword ptr [rax+08H] cmp edi, 1 jne SHORT G_M27646_IG07 xor esi, esi cmp word ptr [rax+0CH], 49 sete sil test sil, sil je SHORT G_M27646_IG07 mov rdi, 0xD1FFAB1E ; string handle mov rdi, gword ptr [rdi] pop rbp tail.jmp [System.Console:WriteLine(System.String)] G_M27646_IG07: cmp edi, 1 jne SHORT G_M27646_IG11 xor esi, esi cmp word ptr [rax+0CH], 50 sete sil test sil, sil je SHORT G_M27646_IG11 mov rdi, 0xD1FFAB1E ; string handle mov rdi, gword ptr [rdi] pop rbp tail.jmp [System.Console:WriteLine(System.String)] G_M27646_IG11: cmp edi, 1 jne SHORT G_M27646_IG15 xor edi, edi cmp word ptr [rax+0CH], 51 sete dil test dil, dil je SHORT G_M27646_IG15 mov rdi, 0xD1FFAB1E ; string handle mov rdi, gword ptr [rdi] pop rbp tail.jmp [System.Console:WriteLine(System.String)] G_M27646_IG15: mov rdi, 0xD1FFAB1E ; string handle mov rdi, gword ptr [rdi] pop rbp tail.jmp [System.Console:WriteLine(System.String)]
>>2863804 Сервер где моя приложуха стоит - не соответствует минимальным требованиям, и меня ебут, дескать я говно сделал. Я говорю, блядь, у вас сервер 2004 года, какой неткор последний. Мне говорят - не ебет, делай чтобы летало, а то на мороз отправим. (((
На мороз не хочу. Только родители перестали ебать мозги, что денег в дом не приношу. Так что надо на всем экономить...
>>2863808 >Мне говорят - не ебет, делай чтобы летало, а то на мороз отправим. 1) На тоненького пытаются взять. Более мощный сервак будет всяко дешевле, чем все головняки связнные с твоим увольнением и наймом кого-нибудь другого. 2) Я бы в любом случае съебал из такой конторы и нашел другую работу.
>>2863808 Алсо, если же все-таки за забор не вариант, то я бы на твоем месте просто хардкодил, забыв на время про удобство и забив хуй на поддерживаемость.
>>2864152 >Более мощный сервак будет всяко дешевле, чем все головняки связнные с твоим увольнением и наймом кого-нибудь другого. Ты явно не сталкивался с ру бизнесом где похер на деньги, это дело принципа, чел пойдет на мороз даже если проект пойдет по пи... особенно если ИТ это не основная деятельность компании а все потому что по аналитике роста в РФ по ИТ нет и не будет, тупо нет рынка кому этот ИТ может быть нужен, а значит можно диктовать свои условия
>Я бы в любом случае съебал из такой конторы и нашел другую работу. А есть варианты? Просто рынок максимально ужался для спецов за норм деньги, кредитно-ипотечные хомяки готовы за половину своей цены работать и радоваться что могут это делать у меня вот резюме висит под минимальный мой прайс (30 баксов в час), так все меня хотят за 10-20, что смешно потому что я работал в компании где мне платили 80 баксов в час и радовались, потому что аутсорс решение моих задач им выходили в эти 80 - 150 бачей в час с более худшим результатом
так что чуваку профилировщик в руки и пусть смотрит вначале на то что дрючит его GC и оптимизирует там... а так же изучает как оптимизировать работу так чтобы вообще память на стеке выделять чтобы GC вообще сервак не трогал, потому что по моему опыту большая часть работы это GC
Суть в чем. В Таблице пользователей - есть 3 колонки. Num1 - идентификатор используемый сторонней системой для вытаскивания инфы о юзерах, по соглашению - это должно быть число от 0 до 2^32-1, дырок быть не должно, система обращается ко мне и с 0 до первого -1 "читает". Num2 - аналогично Num1 но для другой системы. Slot - число от 0 до 2^64-1 - уже мой идентификатор для того чтобы сервер "общался" с юзерами. Тоже дырок быть не должно.
Собственно методы GetNextUserNumber1, GetNextUserNumber2 и GetFreeSlot - лезут в базу, ищут "дырки"(ака gap). Если находят - смещают номера пока дырок не останется. Потом - регистрируется пользователь.
И да. Вроде ебануто. Но все как-бы работало нормально. До недавнего времени. Недавно внезапно возрасла нагрузка и этих пользователей стало разом регистрироваться по 10к в день. А метод RegisterUser выполняется целую секунду. Думаю понимаете, какой пиздец наступает, если разом хотя бы 1к решает зарегаться.
Вот и мне интересно. А как какать мне что-то сделать с этой вот хуйней? Медленность этого дела - меня тревожит и раздражает. А как сделать чтобы быстро было и те вот требования с отсутствием дырок - так же остались выполнены.
>>2865326 >А как сделать чтобы быстро было и те вот требования с отсутствием дырок - так же остались выполнены. 1) Может стоит сначала разобраться откуда эти дыры там берутся и заполнять их конкретно в те самые моменты, а не когда регается новый ползователь? 2) Как вариант батчить регистрацию пользователей. Т.е. закрывать дыры не при регистрации каждого пользователя, а сначала закрыть гэпы, а потом сразу пачкой регать всех кто пришел за определенный интервал времени. 3) Зачем вообще нужны такие ебанутые правила для идентификаторов?
>>2865740 >как? ручками можно что угодно. Никто подход "работаем как в винформс" не отменял. Можно спокойно создать вьюху какую угодно, потом смотреть есть ли у объекта проперти нужного типа, и, если есть, то вывести эту вьюху. Далее вручную ловить изменения INPC (или еще как отслеживать) и обновлять вьюху как угодно, аналогично ловить изменения вьюхи и обновлять source как угодно. Биндинги делают то же самое, просто они стандартный и весьма ограниченный путь.
>Предположим, что конвертер обрабатывает Thickness.Top. в конвертер может притопать и весь объект даже, а там уже разрулить на месте кто кому (это легко, можно создать 4 конвертера или же 1 и в конвертерпараметер указать что там за значение ходит). Также вьюха может выставить наружу одно депенденси свойство Thickness которое само будет разруливать все преобразования, а внутри контрола старые добрые события Text = и TextChanged
внутри кастомных изолированных контролов может быть до 100% code-behind и это нормально.
>>2865751 думаешь на винформсах есть система биндингов нормальная (ну щас то что то есть но не знаю что)? А пропертигриды были всегда
>>2865758 >Также вьюха может выставить наружу одно депенденси свойство Thickness В моем случае не может. Я должен это разрулить в DataTemplate, который находится в словаре ресурсов. Грубо говоря, в таблицу DataGrid приходит итем типа Thickness, далее DataTemplateSelector подбирает нужный DataTemplate, в котором я должен забиндиться к свойствам Thickness.
>в конвертер может притопать и весь объект даже У тебя в ConverterBack приходят данные с условного тексбокса, где юзер ввел число 30. Схуев туда "может" придти весь объект? Непорочным зачатием он там появится? Всё, данные утеряны на этапе конвертации из вьюмодели в текст бокс.
>думаешь на винформсах есть система биндингов нормальная Я не верю, что вижуал студия не решила этот момент цивилизованным путем. Неужели не придумали до сих пор никаких провайдеров, реверсивных мультиконвертеров?
Мне приходила в мысль создать UIElement в качестве посредника, но это костыль какой-то.
>>2865819 >В моем случае не может Надо меньше пачкаться. И вообще, некоторые языком умываются (c) В твоем DataTemplate находится вьюха, которая царь во дворца - у нее свой code-behind, доступны атачедпроперти (это свои code behind-ы), то есть полная свобода и наличие/отсутствие DataTemplate вообще не причем.
>Непорочным зачатием он там появится подозреваю, это я тебе показывал как в конвертере использовать dp наследованием от фризабле. Ну как бы - вот. Передаешь в такой конвертер объект (хоть дата контекст) и конвертпараметром уточняешь что конкретно ты хочешь конвертить. Как маркупрасширение не выйдет, но обычным путем через "конвертер в ресурсах" все работает (только не в ресурсах дататемплате, а то биндинг там не виден, а уровнем чуть пониже)
>Я не верю, что вижуал студия не решила этот момент цивилизованным путем вьюха выставляющая наружу свойство и внутри себя уже пофиг как - вполне себе нормальный путь. И обычно все пропертигрид разруливаются в коде, а ему нет проблем решить проблему "что-то там не биндится"
>>2865819 похоже у тебя болезнь "code-behind злющее зло и когда я использую code-behind, то бог убивает котенка"
Не нужно с таким упорством пытаться разрулить все декларативщиной. Она не всесильна. С ней бы я до сих по бы парился как забиндить SelectedItem. К тому же атачепропы это чистый code-behind и норма же.
>>2865963 >подозреваю, это я тебе показывал как в конвертере использовать dp наследованием от фризабле. Ну как бы - вот.
Я пытался такое провернуть. Если я начну биндиться из ресурсов, то у меня происходит странная хрень — изменения привносит только первый объект в списке похожих. Все остальные как будто бы не биндятся. Это при том, что ресурс я инициализировал локально в DataTemplate.
>>2865655 > 1) Может стоит сначала разобраться откуда эти дыры там берутся и заполнять их конкретно в те самые моменты, а не когда регается новый ползователь? Эти дыры могут взяться, если 1. Импортить пользователей. 2. Удалить пользователя руками.
> Как вариант батчить регистрацию пользователей. Т.е. закрывать дыры не при регистрации каждого пользователя, а сначала закрыть гэпы, а потом сразу пачкой регать всех кто пришел за определенный интервал времени. Пробовал. Тогда начинается свистопляска с тем, что идентификаторы надо каждый раз из базы достать, потом хранить последний выданный в самом ПО. А чтобы все работало как надо - надо лок накидывать и тогда вообще гроб-пизда. Если в очередь выставить - то тот кто последний регается - может по таймауту отвалиться, что неприятно.
> Зачем вообще нужны такие ебанутые правила для идентификаторов? Требования интеграции со сторонним ПО + требования к самому ПО, чтобы уже родное ПО - могло просто в цикле от 0 до n пройтись и чет там с пользователями сделать. Т.е. просто - один запрос - дай мне данные этого пользователя - нету, все, закончили. Если тут дырки - нужно более сложный протокол придумывать, в духе: А дай мне спиосок всех пользователей, а дай мне айДи следующего и прочее, что нагрузка на сеть и вообще не оч хорошо.
А вот еще одна загадка. Есть DataGrid и ItemsControl. Оба в качестве итемс соурс используют один источник данных. Когда нажимаю на хидер для сортировки столбца DataGrid, за каким-то фигом еще и сортируется список в ItemsControl.
Разве сортировка столбцов не должна осуществляться где-то внутри таблицы не затрагивая источник?
А вообще если CollectionViewsource.GetDefaultview примнить к источнику то он к нему и цепляется, а не проксирует. Видимо датагрид это делает внутри себя
Как нищук купил себе бумажный справочник c# 6.0 албахари с рук, сильно ли устарел или потом можно добрать знаний из современного? Изучаю для себя чтобы потом в юнити делать игорь.
Здаров, обшарпанные! Есть вопрос по асп. Нужно что бы контроллер получал в запросе данные, передавал их дальше в отработку и не дожидаясь окончания обработки отвечал Ok() понял принял получил занимаюсь. Сейчас у меня сделана как-то так: public class Controller { HandlerService _handlerService;
Но в таком варианте при обращении к _dbContext в методе Handle вылетает эксепшен дескать контекст уже задиспожен и не существует. В принципе я даже знаю как это можно обойти создать переменную контекста внутри метода хэндл, но подозреваю что и переменную моворксервиса тоже нужно будет создавать внутри метода но хочу узнать какие ещё есть варианты и лучшие практики для такой задачи
>>2868004 Ладно, кажется я тупой но это не точно Кажется можно сразу в контроллере делать вызов _handlerService.Handle(data) и не эвейтить его и будет норм но все равно хочу почитать как ещё решается такая задача
>>2865963 >подозреваю, это я тебе показывал как в конвертере использовать dp наследованием от фризабле. Ну как бы - вот.
Короче я понял почему, точнее кто виноват - DataGrid. Очень мутный контрол.
Для ListBox, ListView, ItemsControl отработал ValueConverter, причем без всяких там фризабле и привязок. Дело в том,что метод Convert отрабатывает при любом изменении свойства вьюмодели, соответственно я в этом методе сохраняю в локальное поле конвертера входящее значение value. А ConvertBack я это значение меняю и возращаю обратно свойству вьюмоедли. Никаких привязок не нужно.
Что делать с DataGrid так и не понял. Очень капризный. С ним не работают ни этот ValueConverter, ни DataTemplate. Удалось передать текст из текстбокса только в режиме UpdateSourceTrigger=PropertyChanged. Сбрасывает DataTemplate при сортировке.
ListView тоже тот еще кадр, пришлось попотеть с восстановлением полноценного стиля с поддержкой GridViewRowPresenter и ContentPresenter.
>>2868278 >Удалось передать текст из текстбокса только в режиме UpdateSourceTrigger=PropertyChanged. ну если у тебя режим редактирования (для которого конечно свой шаблон), то конечно шаблон исчезает ничего не передав. Не то чтобы это нормально, это просто вот
>>2868278 >Что делать с DataGrid так и не понял. Ты всё правильно понял, эта параша состоит целиком из магии, пока не узнаешь - не узнаешь. Так что советую с такими проблемами обращаться к нейросетям, они как раз хорошо вытаскивают магическую инфу из помойки которую вручную не разгрести никогда.
Вводные: ef + mssql + вагон миграций Задача: перенести все это говно на postresql
Кто-нибудь делал такое или может подскажет? Просто взять и дропнуть старые миграции и скриптом перетащить данные из базы в базу нельзя, нужно чтоб работали откаты.
>>2869323 Миграции специфичные для t-sql. Я хз можно ли их как-то подружить с провайдером postgre. > захотим - базу сменим за секунду Я тоже так думал и частично думаю, просто что-то не учел. Уверенный меняю провайдера, делаю первую миграцию на постгре, получаю шмат говна про несовместимость с mssql провайдером вперемешку с npe. Убрал mssql из нугетов, уже в файлах старых миграций ругается, что нет провайдера. Если дропнуть старые миграции, то все работает без танцев с бубном
Если кому интересно про >>2865326 Решил ебанутым методом. В фоне - в тихую - заполняю пул нужных мне данных. Потом при регистрации - достаю из пула - и сразу ставлю таску на добавить в пулл новое значение. Таким макаром - если интенсивно нагрузка резко возрастает - это начинает быть заметно только при оч больших нагрузках, а в большинстве случаев - работает быстро. Костыль, но хз че еще придумать было.
У кого-нибудь было такое, что visual studio багается на копировании? Т.е невозможно скопировать ничего из кода. Замечал на крупных-средних проектах с кучей зависимостей. Наверное анализатор какой-нибудь дохнет и тянет за собой этот баг. Рестарт студии, удаление .vs не помогает. Помогает только убийство всех процессов связанных с ней. Есть какие-нибудь другие варианты это пофиксить? inb4: райдер
>>2868004 Когда приходит запрос в контроллер он скидывает его в какую-нибудь очередь обработки, пуляет ОК и все. А хендлер сервис у тебя крутится в качестве бэкграунд сервиса и мониторит эту очередь. Когда там что-то появляется, он это обрабатывает.
>>2869247 Я делал. Старые миграции дропать однозначно. Перед этим предварительно нужно их все пересмотреть, если там есть ручные доработки, то перенести все это в код сервиса (параллельно переебав тому кто лезет своими грязными руками в генереный код) Если есть какие-нибудь встройки или типы, то переписывать. БД у тебя разные, поэтому откаты у на те миграции которые были на mssql не будут работать. И в принципе, новая СУБД - новая БД, нехуй тащить за собой хвосты. Если нужны данные из старой БД, то смотришь, что там за данные. Если это справочники, то их вносишь в код+конфиги (json, csv) и в миграции через .HasData. Если какие-то регулярные рабочие данные, то переносишь скриптами через ODBC или экспорт-импорт.
>>2869323 >ведь ef как раз и нужен чтобы базы менять >мне так постоянно внушали, мол, захотим - базу сменим за секунду. >dapper-кун Да, но только если изначально нормально проектируешь приложение. Если нормально делаешь, не лезешь в миграции и БД руками. Тогда все работает просто, в три шага: меняешь провайдера, -> сносишь старые миграции -> генеришь новые. Все. Если у тебя там кал говна, с кучей raw sql в миграциях и данными добавлеными в БД в обход ORM - тогда ебись.
>>2871552 >на бумаге в теории работает просто, в три шага: раз, -> два -> три. Все. >если у тебя реальный рабочий проект - тогда ебись. Перевел на человеческий язык.
>>2871582 >>если у тебя реальный рабочий проект - тогда ебись Не, ну если ты мазохист и тебе охота в говне копаться, то пожалуйста. Но если делать нормально и бить по рукам пидарасов которые делают не нормально, то будет заебись.
>>2871471 если только твой класс их сам создал и не получил их через конструктор. Тогда подписка удерживает связь компонент-ты, а ты удерживаешь связь ты-компонент. И никто внешний.
>>2871595 в реальности менять бд нужно 0.000001 раз. мы ж не убер а вот время старта EF это кабздец просто. Что они там делают блин. почему результат этого нельзя закешировать. Для сервера ладно (хотя для разработки все равно ахтунг), но десктопы - дорого давать секунды на хрень
>>2872300 >в реальности менять бд нужно 0.000001 раз. мы ж не убер Мне за два года 5 раз пришлось уже с одной БД на другую переходить. >а вот время старта EF это кабздец просто. Что они там делают блин. почему результат этого нельзя закешировать. Там основное время на старте (вернее даже на первом запросе) уходит на построение контекста. Есть несколько разных трюков как ускорить загрузку. Плюс современный EFCore сам по себе довольно хорошо оптимизирован по сравнению с предыдущими версиями. Так что сейчас "долгое время загрузки" не такое уж и долгое. Многие десктопные приложухи и без EF дохуя долго стартуют, лишние пару секунд погоды не сделают. Ну и если ты делаешь, что-то легковесное что должно стартовать максимально быстро, то EF там собственно нахуй не нужен, достаточно даппера или еще какой-нибудь мелкой хуйни.
>>2872438 >сходить бы тебе к психологу. издеваются над ты Ну что поделать если меня зовут как раз на проекты где нужно разгрести старое дерьмо, выкинуть все ненужное и перевести все на новые рельсы. Проблема была только один раз на втором проекте когда нужно было переходить с MS на PG. Там было нагажено в миграциях руками и пришлось повозиться, чтобы привести все в порядок. Потом там же понадобилось вернуться обратно на MS, а потом еще раз обратно на PG (издержки выкатывания релизов и не было возможности просто откатить версию) - и это делалось простым переключением провайдера и перегенерированием миграций. >>2872438 >например, взять не EF Можно, только на моей памяти прям вот, чтобы были проблемы со скоростью был только один раз и то там дело было не в EF, а в плохом проектировании БД и ебанутых интеграциях, когда приходилось попусту перекачивать данные из одной БД в другие туда-сюда без какого-либо результата. Во всех остальных случаях все спокойно укладывалось в SLA с многократным запасом и вопрос использования какой-либо другой ORM даже не поднимался.
Остро видящие, а что вообще такое application pool на иис? Зачем там разделение на пул и сайт? Почему на других серверах обходятся без этого? Где можно конкретнее почитать про пулы, если есть подозрение, что одно легаси приложение на нетфреймверке переодически падает в аутофиемори именно из-за пула
>>2873010 >что вообще такое application pool на иис По сути песочница. >есть подозрение, что одно легаси приложение на нетфреймверке переодически падает в аутофиемори именно из-за пула Вряд ли. Для этого у тебя должен быть максимально дохлый сервер, либо что более вероятно - лютый говнокод. Но, технически, там есть квоты на память, только я х.з. как их менеджить, т.к. никогда не возникало такой необходимости. Попробуй ПКМ на нужный пул и выбери "Recycing..." там есть настройки памяти.
Мне с фронта приходит реквест что-то вроде StartNewTestDto, я присваиваю ему guid(один на тест) и шлю с ним что-то типа формы для вопроса из теста. Потом юзер проходит вопрос, я в другом методе получаю его ответ и в зависимости от него формирую следующий и так пока тест не закончится. Структура теста не линейная и это все без аутентификации. Нужно отличать пользователей и забывать их если тест пройден. Вопрос. Как мне лучше всего запоминать юзеров, эти guid. Хранить какой-нибудь словарь прямо в контроллере? Может редисом кешировать guid? Или копать в сторону сессий? Без баз данных, наверное даже какой-нибудь ef inmemory тут лишний. С другой стороны юзер может хоть год открытым держать тест и все должно работать, то есть айди нельзя удалять со временем? А если пользователь закроет браузер, как понять что айди нужно удалить? Доступа к фронту у меня нет и не будет. Я что то запутался как лучше сделать, не хочу по ебалу потом отхватить.
>>2874091 > Хранить какой-нибудь словарь прямо в контроллере? Это точно хуйня идея, я не знаю как современный нормальный дотнет, но старый дотнет периодически отваливается нахуй с хрустом с ликвидацией всего что было в памяти. У нас короче он автоматом реанимируется (даже если ничего не делать специально то его будет реанимировать обвязка служб сервера), но при этом всё что было в памяти ку-ку. До того как я внутренности поправил валилось примерно каждые 2-3 часа теперь валится два раза в сутки, но шансы попасть на отвал неиллюзорные. > Без баз данных Собственно тут хрестоматийный пример когда именно база данных и нужна. Чистить скопившийся хлам можно без проблем по крону, на масштабах десятков-сотен тысяч записей канает даже махровый быдлокод, у нас в кроне например есть каждые несколько минут DECLARE @MIN_DATE DATETIME SET @MIN_DATE = DATEADD(DAY, -3, GETDATE()) DELETE FROM SOME_LOG(READPAST) WHERE LOG_DATE > @MINDATE И за такое ничего не было, вполне норм работает. Если у тебя типа десяток запросов на тест в секунду или даже сотня то скорее всего никто не заметит, максимум будет ощущаться как небольшой пролаг.
Редис наверное проканает, но я не вижу преимуществ перед васянкой, тем более она у тебя наверняка уже есть для других целей типа хранения вопросов и.т.п. Закрытый браузер без фронта точно не отловить.
>>2873010 > легаси приложение на нетфреймверке переодически падает в аутофиемори Проверь код на предмет new Thread(), спам такой штукой вызывает неожиданные OOM даже если детектится расход памяти типа 150-200 мегабайт.
>>2874101 Может лучше будет использовать сессии? Типа хранить в них guid'ы. Только я не помню, нужно ли там на фронте что-то с ними настроить или оно в любом случае уже работает. > Собственно тут хрестоматийный пример когда именно база данных и нужна. Могу наверное заюзать sqlite, с очисткой по крону не должно возникнуть проблем. Но мне кажется, что конкретно под эту задачу оверхед.
>>2874176 >Но мне кажется, что конкретно под эту задачу оверхед. Почему? Скулайт как раз и создан для того, чтобы по быстрому и компактно хранить всякое говно для которого лень использовать нормальную СУБД. Собственно, почти вся мобильная разработка на ней держится. Вообще охуенная штука. >Могу наверное заюзать sqlite, с очисткой по крону не должно возникнуть проблем. Там можно даже тупо не заморачиваться и просто грохать сам файл БД когда данные уже не нужны и пересоздавать его заново.
>>2874326 только не стоит забывать про лок всей базы данных при записи, и особенность работы с этим в шарпе
Если у вас 10 потоков постоянно пишут в базу по 1 записи, то будет вам database locked. Первый поток локнет базу и начнет писать. Второй поток увидит, что база заблокирована и возьмет паузу. За это время первый поток освободит базу и отдаст 3-му потоку. 2ой поток проснется и увидит что база снова заблокирована. И так через получите таймаут database locked
простой семафор решит проблему, но это же уже костыли.
>>2874786 >только не стоит забывать про лок всей базы данных при записи, и особенность работы с этим в шарпе Бля, у него там юзеры тестики проходят, прям пиздец какой high-load, чтобы о блокировках думать.
>>2874326 > Почему? Хз, тогда казалось, что можно тупо в сессии хранить. Щас думаю сделаю так: в сессии буду хранить guid пользователя, а стейт теста в базе с ключем этим guid. Фронт мне никакой информации о пользователе не шлёт, только данные по конкретному вопросу, т.е его ответ. Я думаю тут кроме сессий или куки никак не идентифицировать его, с бэка я могу только сессии чекать.
>>2875122 >Параллельные тесты на одной физ базе могут дать тот же эффект Там время на запись будет - доли секунды. Они у тебя даже не пересекутся ни разу. А даже если у тебя там такие уникумы тесты проходят, что хуячат ответы сотнями одновременнно - ну обернешь в транзакции и все.
>>2875447 не пересекутся да ибо таймаут долгкий транзакции вообще не причем - если база стала в лок и пришла запись с другого потока, то она не станет в очередь типа ридврайтлок на файл, а "попробую через время".
Блин, учу значит сишарп и вижу что какая то новая фишка языка у меня не работает, смотрю версию а у меня 7.3 оказывается. Соответственно вопрос к вам, ставить последнюю и заниматься именно на ней?
Во-первых в WPF нет ThemeResource, из-за чего я решил попробовать так <Setter Property="Background" Value="{StaticResource ButtonBackground}" /> Но выглядит словно какой-то бред. А как мне прилинковать статический ресурс? Мне понравилось, что автор его использует как некий аллокатор между базовой кистью и свойством контрола. Я тоже так хочу! Мои решения через StaticResourceExtension создают кромешный ад.
Как именовать разные модели для одной и той же сущности? К примеру есть UserEntity и LessonEntity, находятся они в проекте с контекстом дб, связываются друг с другом посредством третьей таблицы и не содержат ничего кроме свойств, нужных для создания базы данных. Работать с такими классами неудобно, хочется иметь класс UserModel, который бы уже содержал необходимую логику, методы и тд. Как его обозвать?
>>2876256 Ну у тебя должна быть общая модель, которая содержит коллекции UserEntities и LessonEntities (если я правильно понял), к примеру ClassRoomModel. Эта модель может быть внутри общей вьюмодели SchoolViewModel. Такая вот матрешка. ClassRoom может быть и вьюмоделью, кстати.
Твоя задача в мейн контрол передать мейн вьюмодель. А внутренние контролы разбирают внутренности вьюмодели на составляющие и берут нужную инфу. Суб-контрол принимает ClassRoomModel, внутри которого суб-суб-контрол берет UserEntities. И так по цепочке вглубь.
>Как его обозвать? Это ты должен знать — зависит от контекста твоего приложения.
1. Как делали деды на заре ООП. Вся твоя логика - лежит в том же классе который ты назвал сущностью. Плюс такого подхода - логика не распидорашена между проектами, файлами, намного ниже вероятность, что ты просто забыл что ты уже что-то сделал, и повторно одно и то же написал 10 раз. Вообще, все джуны будут бояться твоего кода, деды - будут уважать. Минус. Твой класс будет ОГРОМНЫМ. Не. Он будет просто ОГОРОМНЕЙШИМ. В определенный момент чтобы работать с ним, придется делать его partial. Еще минус - в том, что такой класс скорее всего будет непереносим между проектами, потому что куча специфики, вся хуйня.
2. Делать сервисы для работы с твоей анемичной моделью. Вариант который является типа современным. Ты выделяешь области и на их основе создаешь сервисы. В твоем варианте - вот у тебя есть пользователи. Для работы с ними - ты выделяешь 2 класса: UserRepository и UserService, первый - дает доступ к тому где оно лежит, второй - именно всякую логику выполняет. Плюсы подхода - у тебя все "по полочкам". Минусы - был один класс, теперь их 3.
>>2877006 глупости говоришь есть просто рич модел и анемик модел. С рич модел типа "Данные вместе с методами что эти данные обрабатывают то есть типа тру", а анемик лишен проблемы "а если нужно посчитать вот этак вы что будете делать, а*, но часто вырождается в чистые гет/сет, но просто проще и практичнее в реальной разработке. и заря ооп не причем
У каждого подхода свои плюсы и недостатки. Вернее одно и то же каждый считает либо достоинством, либо недостатком
Можно пытаться сидеть и на каждой половинке стула, если ORM не мешает.
>>2877006 Ток ты так и не пояснил, как во втором случае две сущности впихнуть в один дата контекст, о чем анон спрашивал.
Т.е. тебе в любом случае нужно делать общий контейнер для них.
>Минусы - был один класс, теперь их 3. В первом случае тоже будет три. Отличие только в том, что сервис можно заменить на другой, а в первом классы будут жестко связаны (хотя можно через интерфейс впихнуть).
Сервисы это про организацию большого количества модулей, каждый из которых требует какой-то еще модуль.
>>2876186 >>2876193 Чеееерт. Нихрена не получается. Оказывается, что StaticResource это непредставимая хтонь. Она работает, когда рядом есть что-то, что на нее ссылается.
Но совершенно не работает как отдельный элемент в отдельном словаре ресурсов: <ResourceDictionary> . . . <StaticResource x:Key="ButtonBackground" ResourceKey="AccentColorBrush" /> </ResourceDictionary>
У меня даже собраться проект не может, сообщает, что >MC1000 Неизвестная ошибка сборки, "Индекс за пределами диапазона. >Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции. Т.е. Словарь абсолютно пуст. Все насмарку. Возвращаемся к адовым городам со StaticResourceExtension чтобы редиректить ресурсы: <Thickness x:Key="Button.Static.BorderThickness" . . . . . . . . Left="{ui:StaticResourceThicknessSide Static.BorderThickness, Side=Left}" . . . . . . . . Top="{ui:StaticResourceThicknessSide Static.BorderThickness, Side=Top}" . . . . . . . . Right="{ui:StaticResourceThicknessSide Static.BorderThickness, Side=Right}" . . . . . . . . Bottom="{ui:StaticResourceThicknessSide Static.BorderThickness, Side=Bottom}" />
Хм. А вот тут - затык. Почему-то слушающий сокет не реагирует на то что клацнули отмену и ждет пока кто-то таки подключится. Мда. Может быть не надо было тредупл использовать. ХЗ короче.
Блин. Думал до часа справлюсь. В общем. Да. Что мы получили. Мы получили хрень какую-то. Которая неприменима ИРЛ. Ну. Типа блин. Не варит голова. Фигня получается. Сорян. Пойду плакать от своей бесполезности.
>>2874786 >database locked. Это фишка sqlite что ли, что он всю базу лочит, лол? Какой-то кал, если честно. >>2877006 >Вариант который является типа современным. Да я бы сказал наоборот сейчас форсят DDD с толстыми моделями.
>>2878623 ну а как ты хотел, мед и ложкой? sqlite он встраиваемая бд и значит для одного пользователя. Как говорится, походи по базару - и ничего не найдешь встраиваемого легковесного.
Альтернатива ему - firebird, который тоже умеет в встраиваемость. Но там уже размер файла пустой побольше и менее удобно админить левой пяткой. Также непонятно с процессорами. Но зато это уже полноценная версионная база данных. В sqlite иногда не хватает функций, но там обычно такой объем данных, что проще поднять в память и сделать че надо.
>>2874786 А еще проблему без проблем решит фассад, которй получает очередь, и сам пишет в базу. Мне кажется я даже встречал нагет реализации. Минусы есть, но если ты нормально разделил записи и чтения, то прям проблем быть не должно.
>>2879049 Конкурентные очереди, стеки, каналы, миллионы других способов не париться и просто писать куда надо. Но ты выбираешь городить семафоры. Молодец! Так держать. Умеешь. Могешь.
>>2879053 Да могу. И могу обосновать легко выбор того или иного инструмента. Вернее я обычно использую ридврайтлок конечно (раз уж либа работы с базой это сама не умеет - стандартная точно не умеет, а та что от мелких - не проверял), а не семафор. но могу обосновать что угодно.
>>2879049 Или отдельный агент обрабатывающий очередь в один поток без семафоров. Решений конкурентой записи миллион, и однопоточность sqlite, или любого другого инструмента это просто небольшая сложность, а не "пиздец это говно нельзя испозовать всё пропало"
>>2879309 Да хоьть дохулеард Это всё ЗАВИСИТ либо ты сразу все сделал с учетом склайт либо нет.(в надежде что это не нужно как в миллионе обычных приложений) И когда во ВТОРОМ случае у тебя (через годы разработаи) вылезает датабаселокед то не так просто это разрулить
>>2875576 > что будет если будут нужны логи более чем за 3 дня? Логов в опердени - вафлить не перевафлить. Во-первых есть текстовый лог в NLog, там огромный список логгеров на каждую нужду и у каждого есть свои сроки давности и свой порядок архивирования, по общему правилу туда пишется вообще любой чих и пердёж. Например открытие и закрытие окон, любое обращение во внешнюю интеграцию с ответом и любое исключение которое было поймано при операции и для которого нет специального продуманного обработчика. Это почти трассировка, там только всякие внутренние циклы не детализированы. При любом кипише логи сразу же снимаются и отправляются на анализ. Значимые с точки зрения бизнеса действия (которые означают какое-то принятое решение) срутся напрямую в логи в базе с обязательным анальным зондированием залоггированного пользователя. Их оттуда уже не выковырять в попытке скрыть подлог например удалением логов или порчей компьютера. Такие логи хранятся долго, пару лет где-то. А есть логи автоматики всякой внутри базы. Она в файлы-то писать не может. Например каждая хранимка которая есть в опердени ловит свои ошибки и срёт ими в специальный лог. Если время работы хранимки вышло за регламент то тоже появляется оповещение об этом в специальном логе. В логах хранятся например переназначения идентификаторов запроса во внешнюю систему или попытки восстановиться от ошибки которая могла быть вызвана дедлоком или сбоем Интернета - такое тоже пишется в логи автоматики. Вот эти логи автоматики и чистятся автоматически, какие-то по количеству записей, а какие-то по дате. > вернее вопрос в другом - у кого жопа будет болеть?))))) У системного аналитика. Мне лично вообще поебать, я винтик в огромной безжалостной корпоративной машине.
>>2875576 >что будет если будут нужны логи более чем за 3 дня? Делаешь новый файл с датой. Новый день — новый файл. Проблемс? Есть даже ограничение по размеру файла.
>>2880527 Ну как нинужно Вот я всегда рад когда годные вещи перенимают с других языков Но в котлине я как шаопист к этому (рахмазано объявление переменных между конструкторм и телом класса) привыкал. И там же есть инит так чио ждешь такое
>>2880580 >typeof() ченетак? >new[] и тут че? >методы с большой буквы фломастеры >убогий вид окна кода из 2006 пиз....брехня то есть. >проперти начинающиеся с _ еще один явный пиз... >as тут то чего >= default и? я бы понял еще default!, но жавист не понимает разницу >Поч? что поч? поч ты жавист? пот говноед, вот поч
Аноны. Тема - WPF. При группировке лист бокса, виртуализация накрывается пиздой. Точнее при задании стиля для заголовка группы.
Рассмотрим визуальное дерево без стиля для заголовка (пикрилейтед 1). Создается VirtualizingStackPanel, внутри которого находятся итемы. Все нормас - 152 элемента.
А теперь добавляем стиль заголовка для группы (пикрилейтед 2). И тут хуякс и тот же список выдает уже 1042 элемента. Мы видим, что VirtualizingStackPanel создается для каждой группы(Border - это сам заголовок). Во-первых, нет никакого контроля по количеству групп, их может быть 100500, а значит 100500 VirtualizingStackPanel. Во-вторых, каждая из этих панелей не очень-то виртуализирует — можно заметить одну панель, которая вмещает аж 547 элементов.
Шо не так? У меня такое было, когда я решил впихнуть ListBox в ScrollViewer, из-за чего листбокс растягивался на максимум своего списка и VirtualizingStackPanel был бесполезен. Предполагаю, что здесь что-то подобное, но по отношению к встроенному скрол вьюверу листбокса. Как это фиксить — хрен знает.
>>2881957 От "Питер" перевод норм. Только читать его стоит когда уже есть база и какой-то опыт. Причем база не только шарпа а Computer Science вообще. Если ты не шаришь нормально в типах данных, нет понимания работы памяти и т.д., то только зря потратишь время.
Господи вот если серьезно. То как я заебался переопределять всю эту мутатень, чтобы использовать свои объекты как ключи словаря. Вот вы бы знали. Особенно бесит в случае когда какая-то коллекция - тоже должна быть значением. И тута я узнал, что оказывается, шарп под капотом - автомато умеет анонимным типам всю эту муру делать. Так вот. Вопрос-то вот в чем. Проблема анонимных типов в том, что наружу они хуево достаются. Будет object который какой-то там Anoymus_T228<>. Но мне хотелось бы в таком случае, раз уже за меня все сделали - чтобы я потом мог использовать данные которые лежат в ключе. Собственно. Какие варианты, кроме dynamic или своей обертки, которая анонимный тип обернет в интерфейс есть-то?
>>2851505 За весь тред и месяц никто мне не ответил. Я уже забил на эти метаданные и просто разбираюсь особенности шарпа, но бля что не так то я хуйню споросил или никто не шарит за это?
Добрый вечер, аноны. Просветите, пожалуйста, насчёт бэка на шарпе. Можно ли сделать так: написать бэк на asp.net, разместить его на сервере (мб на нём же и базу, или на другом), и использовать его для мобильного приложения на андройде?
>>2883827 нельзя. Если пользователь приложения узнает что бэк на шарпе, то бросит приложение, станет жавистом и напишет свой бэк. Тебе бы этого хотелось? то то же.
>>2883657 >Странный вопрос. Не, серьезно. Приведи кейс. Я вот чет ни разу не пихал в словари в качестве ключей, объекты разных типов, да еще и вперемешку с коллекциями. И даже не могу придумать зачем это нужно.
Внимательно вглядитесь в пикрилейтед. Что вы там видите? Свойство "Background" стиля для кнопки обращается к статическому ресурсу "ButtonBackground", который в свою очередь обращается к кисти "RedColorBrush".
Вопрос: какого цвета будет кнопка, если ей назначить данный стиль? Ответ: синяя - цвета "BlueColorBrush". Берется ближайший ресурс, а не тот, что указан в ResourceKey.
>>2884089 А вот это работать не будет, если перед статическим ресурсом нет ничего. Т.е. проект даже не соберется: >ОшибкаMC1000 Неизвестная ошибка сборки, "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Вы можете сказать, что тут нет искомой для статического ресурса кисти. А вот хуй, дальше покажу, что проблема не в этом.
>>2884106 Больше всего бесит, что ответа порой нет вообще. Проект может просто не компилироваться, особенно если это какая нибудь библиотека. И никаких внешних признаков ни в окне ошибок, ни в окне интерпретации. Проект молча не собирается просто потому, что какой-то ресурс где-то не смог что-то там найти.
>>2883332 Почему разных типов. У тебя может сложный объект использоваться как ключ для группировки и внутри себя содержать массивы и при этом не обладать ссылочным равенством.
>>2851295 (OP) Какую бесплатную либу сейчас принято юзать для работы с вордом/экселем. Ворд для генерации таблиц, эксель тоже + простые формулы между колонками.
Вот есть у меня метод с парой публичных методов и сложной логикой в приватных. Логика кроме этого класса нигде нахуй не нужна и выносить ее отдельно не понятно зачем. Как быть?
Пока что получается как с ТДД - на примере с калькулятором красиво, а ИРЛ неприменимо
>>2885931 Это как? Публичному методу недоступен приватный. Не засирать же им класс, к тором находится приватный метод? В чем тогда смысл приватности метода?
Тут только делать приватный метод с доступом internal, но это не выглядит как хорошая затея.
>>2885931 несколько похожих методов { достать_хуйню_из_базы_с_учетом_параметров вызвать_йоба_метод смапить_в_дто }
Возвращаемое значение разное, из базы тоже немного разные вещи достают, но йоба_метод один и тот же у них. По сути чистая функция- с логикой и без зависимостей, вроде как раз то что надо юнитами обкладывать.
Сам этот приватный метод используется только несколькими методами в классе (не всеми) и больше нигде в приложении не нужен.
>>2885924 Писать тесты в том же классе, в котором ты тестируешь. Доставать рефлексией. Как мужик - делать все публичным, прятать что-то это по бабски. Сделать internal и указать что тестовая сборка может подглядывать.
Да куча способов.
Другое дело - нахуя? У тебя есть публичный метод. Ты его тестируешь - автоматом тестируешь хуйню, которую он использует.
Сверху. Если там реально какая-то СЛОЖНАЯ ЛОГИКА в этих приватных методах, то ты должен был выделить класс. Судя по другому комменту: DbSearcher, YobaHandler, Mapper. В них ессно - это будет публичным, а потому тестируй сколько хочешь и не придумывай ничего.
В сatch-блоке у меня написано Debug.Writeline. По идее приложение должно вывести сообщение и работать дальше — со всеми остальными исключениями так и происходит. При XamlParseException студия прыгает в точку возникновения исключения.
А почему на петушарпе надо делать постоянно бесконечные проверки на нулл, а в джаве уже давно есть нулл сейфти из ломбока и скоро будет из коробки с нулл-рестриктед тайпс?
>>2886691 потому что ты не показал код перехвата, а XamlParseException там не один, может ты не тот ловишь.
>>2886760 ну в шарпе 12 который вот будут эти конструкторы. но это очень спорная фича. Типа она должна снижать визуальный шум. Но лично для меня это, наоборот, хуже делает в плане читабельности ибо размазывает структуру класса. И это при том, что я обожаю котлин, где такая фича изначально искаропки.
>>2886770 о. опять этот ДЕБИЛ с ломбоком, которые не является жавой для ДЕБИЛА напомню - для желающих переписывать в компильтайм есть фоди. И уж там эти проверки на нулл вплетать код проверки с исключениями можно несколько лет. Другое дело - зачем. При правильно написанном коде эти проверки тупо будут отнимать процессорное время и не сработают и не смогут сработать НИКОГДА.
>>2886817 >о. опять этот ДЕБИЛ с ломбоком, которые не является жавой >ниииееет, ты ни можишь пользоваться фичами потому что на петушарпе нет адекватного аналога ломбока нииееет!!!! Пынямаю.
Как же я проигрываю с этого мелкобуквенного копротивленца за шарпоговно. Каждый раз ему ссут на ебальник, и каждый раз он продолжает высирать нинужно и копротивляться за свою кучку говна. Один в треде остался такой непробиваемый.
>>2886824 я уже 1000раз говорил что ты долбоеб ломбок - НЕ ЖАВА. Это сторонная тулза позволяющая что то там в шарпе та же самая ситуация - с помощью сторонней тулзы можно вообще что угодно
>>2886830 ну ПРИЯТНО ЖАВИСТА говном накормить. все же видят что он высирает говно, которое потом ему же в рот запихивают. Иногда у меня подходящее настроение запихать дерьма в его ротешник по полной. Потом утомляет. Потом опять скучно и приятно накормить. Но по факту - жавист срет и жрет то что насрал. Странный жавист. Все на него смотрят, а он продолжает жрать говно.
>>2886838 какая? дебил, какой поддержки ты ждешь. Можно понять ГОВНОжаву где нет свойств и поэтому НУЖНО указать IDE что "вот такой синтаксис не ошибка".
Просто нечего студии знать для того чтобы все работало. Но даже в этом случае тулза может самостоятельно 1 добавить анализаторы 2 добавить кодогенерацию чтобы студия знала о чем то новом что рождает эта тулза. 3 сделать автодополнение даже если нет никакого кода в 2 (после автодополнения он сгенерится)
взять ту же генерацию проверок на нулл. как по твоему мнению ЖАВАДЕБИЛА студия должна поддерживать эту фичу? Рисовать какие то картинки или что? плагину указывается кодом где нужна генерация, где нет. аттрибуты или ? а студии что нужно знать? вот ты пишешь что нет поддержки в IDE. Так поясни мне ЧТО ДОЛЖНО БЫТЬ В СТУДИИ чтобы проверки на нулл вплетались более правильно что ли.Отдельная менюшка? значки? писк хрюшки как в каспере? или что?
И то это все на любителя ибо если в жае без ломбока НИКУДА, то в шарпе это выбор нужна ли дополнительная магия и собственно зачем она.
>>2886864 на твоих скринах ты ловишь throw. я конечно верю, что дальше оно идет типа мимо, но из скринов это не следует.
>>2886880 Найс рвонькнул, ну уж точно не потому что у шарпододика разрыв шаблона. Допустим поддержка нотнулла в среде и правда нинужна. Что скажешь насчёт популярности твоего поделия в сравнении с ломбоком? Ломбок есть на каждом проекте, у него 12к звёзд на гитхабе, а где есть каловроти с 600 звёздами?
И ведь что иронично, про неподдерживаемость расширений языка визжали изначально шарпошлюхи, а как оно оказалось на самом деле ожидаемо.
>>2886896 я тебе уже сказал ломбок в жаве - НЕОБХОДИМОСТЬ в силу НЕВЕРОЯТНОЙ ВЫРАЗИТЕЛЬНОЙ УБОГОСТИ жавы и родился проект ломбок чтобы добавить сахара другими способами, раз уж жава такое говно и поскольку жава ОТКРОВЕННОЕ ГОВНИЩЕ в выразительном плане, то нашлось и МНОГО желающих отведать сахара. Поэтому проект вырос и получил столько одобрения (для тупых поясняю - если миллионы говорят "нам не хватает выразительности", значит сам язык ГОВНО), что это даже в IDE интегрировали. То есть это следствие ЛЮТОЙ ГОВНИСТОСТИ языка, потому что язык говно (и жависты говноеды, раз жрут, хотя даже жависты признали что язык говно и им надоело его жрать и появился ломбок как сахар на это говно. вот только теперь ДЕБИЛЫ жависты приписывают достоинства СТОРОННЕЙ САХАРНИЦЫ самому языку. Ну ДЕБИЛЫ хуле.)
Шарп и любой другой нормальный язык куда богаче, поэтому необходимость "нам не хватает сахара" намного ниже и желающих маговать намного меньше, остальные не понимают "зачем" поэтому под тот же котлин (который внезапно JVM) нет никакого ломбока и никогда не появится ибо даже если появится, то его поддержат 3.5 человека, а остальные скажут "и нахера оно"
>>2886909 Мне оправдания твои не нужны, как так получилось, что джава выебала петушарп. На вопрос отвечай.
>Что скажешь насчёт популярности твоего поделия в сравнении с ломбоком? Ломбок есть на каждом проекте, у него 12к звёзд на гитхабе, а где есть каловроти с 600 звёздами?
>>2886880 >на твоих скринах ты ловишь throw. я конечно верю, что дальше оно идет типа мимо, но из скринов это не следует. Оно НЕ идет мимо. Оно остановилось в блоке try не дойдя до catch. Вот в чем проблема.
Вот если я напишу перед вызовом метода throw new Exception("бла бла бла"); вот тогда оно попадет ожидаемо в catch, выведет строку и пойдет дальше.
Короче, я не хочу, чтобы студия останавливала приложение и прыгало в точку вызова эксепшона в коде. Это некритичная ошибка, и у меня уже есть защита от этого, если бы эта залупа там не останавливалась за каким-то хером не смотря на try.
>>2886958 >мне нечего ответить, быстро перегруппировываемся от нападения на джаву до попытки представить дискуссию как обоюдное кидание говном в друг друга, чтобы не дай бог не подумали, что я обосрался
>>2886948 >Короче, я не хочу, чтобы студия останавливала приложение и прыгало в точку вызова эксепшона в коде так это совсем другая проблема. не хочешь - выключи. зачем включил? в окошке исключений сбрось на дефолт и включай там "ловить все" по необходимости. Жаль там нет профилей, но студия увы кака.
>>2886958 ты проспорил. Лично я там не сижу. Впрочем, я и в жава тред не лезу. Просто меня жависты достали своей тупостью в реальной жизни, а в ней сложнее кормить говном, а тут забегает говноед. Но все равно наши срачи занимают малый процент треда, ведь жаводебил не может ответить аргументированно, а сразу начинает тупить и на этом заканчивается.
>>2886993 ты долбоеб эпохальный. тебе не просто ответили, даже раскрыли суть.
Количество звезд на гитхабе определяется количеством пользователей. Но это не показатель качества продукта. Это показатель количества пользователей. Это не значит что продукт крут, это значит что нужен многим (а вот причины нужности и есть самая мякотка)
В шарпе 99% того, что дает ломбок, просто НЕ НУЖНО, поэтому и пользователей кому что-то подобное нужно, намного меньше. Да и не все ставят звезды. Не для всех гитхаб "соцсеть где нужно лайкать репы".
>>2887012 Маня называет меня долбоёбом, но сама в который раз высирает стену оправданий, почему джава выебала петушарп, хотя от него требовалось выдавить ответ на вопрос.
>>2887567 вы только посмотрите как жавист, как та собака, поевшая говна, на всех кидается ) У него даже не возникло вопросов почему его бы его собеседник назвал лахтой, если до этого всячески намекал на говноедство )))
А теперь по делу. Пришел тут жавадебич и начал толкать свое "смотрите ломбок может расставлять проверки на нулл". Как будто это нечто такое "прямо ух".
Он даже не понимает что такие проверки это прошлый век. Потому что они все равно происходят В РАНТАЙМЕ, то есть все равно выбросят NRE, только раньше. (этакий fail fast) И что правильный путь - статический нуллчекинг (fail fast на этапе компиляции), который позволяет избежать этой расстановки везде везде проверок на null.
Конечно шарп не котлин, где это было изначально, но в шарпе эти проверки часть языка. И можно даже включить ThreatWarningAsError и получить невозможность скомпилировать с нуллабле траблами. Ну а если пишешь либы и очень хочется тотальные проверки в рантайме, то можно пригласить фоди - он напишет. Хотя и IDE отлично поможет сгенерить и в общем то этого всем хватает.
А что там в жава с нуллсафети? аннотации нуллабле и в IDEA, то есть на уровне конкретной IDE или же свои в фреймворках (тот же спринг имеет свои аннотации нуллабле))))? убожество.
иди в свой тред и там вместе кушайте свое говно (где у вас СТОРОННИЙ тулз десятилетиями чинит убожество языка), а к нам его не несите.
>>2887619 Да ладно, что ты хочешь от убогих. В джаву только в этом году паттерн матчинг и интерполяцию строк завезли (и то в превью), так они уже ссутся от радости и объявили, что у них эти фичи самые лучшие.
>>2887619 >И что правильный путь - статический нуллчекинг (fail fast на этапе компиляции), который позволяет избежать этой расстановки везде везде проверок на null.
>>2886972 >тут нет нескольких одинаковых XamlParseException. Господи, это еще хуже. У вас че, нельзя называть одинаково классы в разных неймспейсах? Потому что я горю на этапе, когда надо придумать хороший нейминг, чтобы он не конфликтовал с уже существующими и не был длинным как сопля первоклашки.
>>2887637 и никак не понять твою проблему - исключение не ловится (то есть не вызывается catch) - студия останавливается на исключении
>>2887639 Расставляй если хочется. Код он разный. Да и легаси полно. Если ты пишешь в нуллсафети парадигме, то откуда у тебя будет NRE в твоем коде. Даже если ты пишешь публичную библиотеку - ну на входе проверил и в нужных местах, а везде зачем. Конечно можно огородиться лишними проверками (если не доверяешь чужим либам, хотя они тестами обычно покрыты и нулл никогда не возвращали), но это будут в основном не проверки параметров, а проверки инвариантов.
>>2887648 >нельзя называть одинаково классы в разных неймспейсах? жавадебил. они потому и называются одинаково XamlParseException, потому что лежат в разных неймспейсах.
Нужен ваш совет по работе с несколькими пользователями в десктопной апе. Сейчас логика такова, что приложение хранит в текстовом файле айдишник текущего пользователя, и при запуске приложения подгружает его профиль из БД, который затем хранится в синглтон классе настроек. И тут возникает проблема с тем, что при переходе на страницу выбора пользователя происходит ещё одно обращение к базе данных, чтобы получить список всех пользователей. И тут то я ловлю краш связанный с тем, что ef core трекает два разных экземпляра одной сущности. Как быть?
>>2888874 Не трекай запрос, лол. Делай детач после того как получил сущность. А по хорошему - сделай дополнительный слой из ДТОшек, которые тебе нужны. И используй в своем синглтоне - эти дтошки, а не сырые модели которые ефом используются.
Вообще. Если быть честным - ЕФ та еще говнина. Слишком много с ней ебли, учитывая, что основное назначение для меня, как клиента - маппинг результата запроса в объектики. Ну и как потенциальное - возможность сменить провайдера для работы с БД. Но сколько же с этой говниной подводных камней. Я ебал. И я даже не говорю про скорость, которая тоже говном становится из-за вот этого всего. Нет. Просто блядь. То что я бы на голом SQL написал бы и забыл, ЕФом приводит к просто охуитительным историям, когда вот тут - нельзя, вот тут - допиши как мне это сделать, вот тут - пиши свой запрос, а то я не понимаю, вот там - мы не можем в несколько тредов. Вот тут - провайдер не умеет в то, что умеет сама СУБД, а потому - фишечки полезные - опять же запихни себе поглубже. Короче. Да. ЕФ - говнина. Не советую никому пользоваться, если вы на нее не сели в начале, и теперь уже слезть сложно. Для любых новых проектов - что угодно будет лучше чем EF.
>>2888939 > А по хорошему - сделай дополнительный слой из ДТОшек, которые тебе нужны. И используй в своем синглтоне - эти дтошки, а не сырые модели которые ефом используются. Тогда получится уже 3 класса на сущность, сейчас у меня и так на каждую сущность есть вью моделька, принимающая эту сущность в конструкторе.
>>2888947 Почему не можешь сделать так: var user = db.Users.AsNoTracking().FirstOrDefault(x=>x.Id = ConfigFile.UserId); MyApplicationContext.Instance.CurrentUser = user;
>>2888939 Люто двачаю. EF - говнина для индусов, куча ненужных фич, типа changes tracking, которые усложняют программы. Есть linq2db, dapper и другие, которые просто конвертеры между C#/SQL, без кучи говна под капотом. Если вижу EF в вакансии, понимаю, что эти люди с базой никогда серьезно не работали. Про такие вещи, как булк операции, мерджи и рекурсивные запросы они наверно даже не слышали, ведь у этого говно из коробки этого нет (могу ошибаться, и что-то могли уже завести).
>>2888939 >То что я бы на голом SQL написал бы и забыл Если ты в соло работаешь, ну так и делай. В команде же, ебал я в рот чужие sql-ные писульки разбирать. ОРМ как раз и нужна, чтобы можно было работать с объектами не касаясь неотлаживаемого эскуэльного говна. >>2888976 >Если вижу EF в вакансии, понимаю Я наоборот дропаю вакансии, где используют raw-sql в коде и встройки в БД.
>>2887619 Ебать обоссаный копротивленец за кучку говна бахнул. И ведь юмор в том, что я прочитал весь его бах, только ни йоты смысла не нашёл. Обтекай. Может быть, когда-нибудь, петушарп и дорастёт до рантаймовых проверок, когда в джаве уже 10 лет как будут компайл-тайм проверки.
>>2887648 Можно, но это не отменяет, что у нас нет шизы с несколькими одинаковыми XamlParseException.
>>2889025 и ведь ему не стыдно было писать этот пост )))) Я бы после такого поста из профы на завод бы ушел от стыда, а он даже не замечает какую дичь несет )))
>>2889024 >где используют raw-sql в коде и встройки в БД как будто "если не EF то значит сырой SQL без вариантов" Есть тот же LINQ2DB (и похожие на него). И даже в даппер можно пихать запрос сгенерив его с помощью LINQ.
Так что тут стоит вопрос - любитель ли вы всякого трекинга и абстрактности (от чего получаете некоторые плюшки и выгребаете тонны дерьма) или же вы предпочитаете работать на более низком уровне "достали/положили", где вам никто палки не вставляет (и не в колеса, а в другое место))), но всякие там кеши и прочее делаете сами.
>>2889024 >raw-sql в коде Так и я против такого. Отсутствие EF - не значит отсутствие C# to SQL, я дропаю оба типа вакансий: в одних сидят пориджи, которые с базой работать не умеют, в других деды 40+, которые не могут осилить LINQ, с базой работать умеют, а вот шарп не осилили, речь про большие проекты.
>>2889024 Так проблема же в том, что сам EF как орм - то еще добро. Особенно, если работаешь не с MSSQL, а каким-нибудь MySql или Postgres, где разработчики провайдеров - тоже те еще чудаки на букву 'м'.
Ну и всякие его приколы, типа - это я зачем-то буду на клиенте выполнять, потому держи в ебало миллион объектов, которые я еще и затрекал, и у тебя приложуха с OUM падает.
Конечно, если простые вещи делать, без всяких анализов там, расчетов, а просто достать из базы, чет поменять, положить обратно - EF нормально справляется.
>>2889176 >Ну и всякие его приколы, типа - это я зачем-то буду на клиенте выполнять Ну если по урокам с метанита приложения писать, то конечно там сплошная магия будет. А так-то, наверное, стоит доки нормально прочесть, чтобы понимать в каких случаях server, а в каких client evaluation делается? >>2889176 >а просто достать из базы, чет поменять, положить обратно Можно подумать БД зачем-то еще нужны. Шучу конечно, но...
>>2889289 Ой. Не не надо тут начинать. Всякие запросы с Contains - EF в куче случаев - на клиенте хочет выполнять, хотя по документации - может и на сервере. А выбор того на сервере или на клиенте - зависит зачастую от хрен пойми чего. Особенно в контексте того, что в EF который на фреймворке был - оно нормально выполнялось, а в Core - до сих пор какая-то хрень происходит. При этом - руками вполне изи пишится SQL-запрос, который СУБД поймет и сделает. Но если ты на EF - тебе приходится либо страдать хуйней и лезть под капот, шаманя с составителями запросов и всей этой хуйней с экспрешинами, либо забивать на всю эту ORM и писать тот же SQL запрос. И опять же, я сверху уже писал, про то что писатели провайдеров - тоже те еще чудики. Решили они, что теперь не хотят DataTime в обычном виде использовать - иди как дебил и переписывай все DateTime.Now на DateTime.UtcNow, потому что - ну пиздец как надо было сломать, чтобы все думали не о том, как фичи делать, а ублажать шизу разработчиков провайдера. Короче. Хрен знает чего ты пытаешься ЕФ защищать. Ну реально же - капризная как хуй пойми что хуйня, особенно в контексте того, что она якобы должна была упросить работу с БД и заставить разработчика думать не о БД, а о логике приложения. В результате - ты теперь и о БД думаешь, и о том чтобы ЕФ не выебывался, и о том, что там разработчики провайдеров думают о том как надо, а фичи пилить чтобы к сроку успеть - та не ебет, ты же выбрал этот инструмент, радуйся тому, как жизнь проще стала.
>>2887677 >и никак не понять твою проблему >- исключение не ловится (то есть не вызывается catch) >- студия останавливается на исключении
А как это блять назвать? Возьмем этот пример : try { . . . throw new Exception("бла бла бла"); } catch(Exception ex) { . . . Debug.WriteLine($"Исключение: {ex}") } Что здесь произойдет? Студия НЕ ОСТАНОВИТСЯ на строке throw new Exception("бла бла бла"); Я НЕ ПОЛУЧУ вот такого окна, как на пикрил >>2886864 Что здесь непонятного?
Почему когда выскакивает исключение XamlParseException, программа останавливается на строке, где исключение возникло, как будто там нет блока try catch?
>>2889054 Тише, не гори, if (var != null) throw new NullPointerException() не так уж и плох. В конце концов, так на джаве очень долго делали и никто не ныл.
>>2889580 Наличие блока catch вообще ни на что не влияет. Где студия остановится, а где нет - задается в настройках исключений, где есть какой то дефолт. И если ты поставишь дефолт и откроешь список, то увидишь вот такую картиру (пик)
Почему такой дефолт? а хз. Такая же трабла была и с asp.net. Они подгружали ресурсы через try...catch, что вызывало постоянные стопы на старте отладки. И не видели в этом ничего плохого, пока волна говна в их сторону не достигла размера которая все таки пояснила им что мешает банально разработке в студии.
>>2889763 А ему по прежнему не стыдно Он даже не понимает какую дичайшую чушь он пишет. Возможно (и даже очень вероятно) -он вообще не программист, а дворник что видел обложку книжки по шарпу, а у самого футболка с надписью жава
>>2889337 >Особенно в контексте того, что в EF который на фреймворке был - оно нормально выполнялось, а в Core - до сих пор какая-то хрень происходит. Потому что в большинестве случаев на фреймворке (да и на core тоже до 2.1 включительно) все это на клиенте выполнялось, но просто молча. А потом майки сказали "нахуй магию из шарпа" и начали кидать на это дело исключение, заставляя кодеров чуть больше думать мозгами.
>>2889337 >Решили они, что теперь не хотят DataTime в обычном виде использовать - иди как дебил и переписывай все DateTime.Now на DateTime.UtcNow,
Тут на самом деле проблема намного глубже чем хотелки провайдеров. Их переделки это только следствие всей этой возни с временем и временными зонами. Алсо, в npgsql это решается букавально одной строкой в конфигурировании AppContext-а.
>>2889337 >Короче. Хрен знает чего ты пытаешься ЕФ защищать. Ну наверное, потому что для меня это нормальный инструмент, с которым я работаю далеко не первый год и мне норм. И мне нахуй не уперлось работать с кодом где будут вещи вроде: >руками вполне изи пишится SQL-запрос, который СУБД поймет и сделает. Я лучше с экспрешенами "пострадаю".
>>2890161 >потому что для меня это нормальный инструмент поддержку твоего оппонента. Если для тебя польза от еф перевешивают необходимость уживаться в его парадигме, то тебе конечно нормально.
>Я лучше с экспрешенами "пострадаю". одно не заменяет другое. Пиши своим LINQ в linq2db или в repodb или в dapper том же. 100% LINQ, просто меньше магии и "а у нас вот так надо" (это я про те дбконтексты с их особенностями работы"). Про потребление памяти вообще помолчу
>>2890474 нисколько, ведь она присутствует. Это ж не говножава с ее "у нас лобок генерит рантайм проверки". В шарпе есть полноценный статический анализ в компильтайм. Ну разве что проблема если нужно поддерживать старые версии дотнета. А зачем это нужно? ВЕРНО, не нужно.
А значит никакие проверки на if(...=null) попросту не нужны.
Но жавадебил этого не поймет. Он же дворник с футболкой и фантазиями "эээх когда нибудь такое (на деле НИКОГДА) будет и в жаве"
Как же блядь ссут в ебальник косолобому копротивленцу, пиздец просто. И ведь раз за разом его обоссывают, а он продолжает визжать "рррря, врёти!" и "ррррря, нинужно!".
>>2890487 не нравится правда? ну так не заходи в наш тред, жавист. тем более с такими тупыми аргументами
у шарпа есть стат анализ на нулл, и есть возможность не просто варнинг, а запрещать компил. И приходит тут говноед и начинает вещать "ой как хорошо в жаве - там лобок генерит за нас рантайм проверки". На него смотрят как на дебила, поясняют, но он же дворник с фуболкой и не понимает.
>>2890491 Это она самая и есть. Изучи матчасть что ли. Проверки на нулл этим не являются. Этим является различие в языке нулл типов и не-нулл типов и стат анализ этого самого.
>>2890495 прими 2 факта 1 в шарпе есть стат анализ, который позволяет не писать проверки на нулл (ни самим, ни кодогеном, ни с божьей помощью) 2 в жаве этого нет. там есть лишь лобок, который позволяет написать эти проверки за IDE (хотя иде прекрасно их генерит) и получить РАНТАЙМ проверку
знаешь что такое РАНТАЙМ проверка? а это когда получаешь NRE и.... просто не знаешь что с ним делать ибо его быть не должно в принципе в нормальном языке
>>2890499 ты думаешь ты зашел в детсад где такие подходы работают? лол, ты на дваче. ты поел говна и твои попытки перефорса не работают. Больше на твои аргументы в подобном стиле отвечать не буду (нехрен тупому жависту шарпортред засирать)
Тут нужно писать то, что полезно шарпистам. например то, что ReadOnlySpan<byte> = new {} как поле класса не вызовет аллокаций ибо рослин сделает так.
А не идиотов говном кормить (это приятно, но...надоедает тоже)
>>2890508 Ясно, манюня опять получила говна за шиворот и в харчках убежала плакать. Каково тебе быть слитым по фактам и опущенным в целом в твоём собственном треде?
>>2890552 Если уж и размышлять, какое влияние оказало моё нахождение в этом треде на шарпоблядей, то уж точно не отвергающее джаву. Шарпоскотина это в первую очередь социоблядь, выбор петушарпа у которой произошёл вследствии соответствия антуража петушарпа антуражу их личности (если перейти на конкретику, терпильная быдлосоя выбрала терпильный быдлосоевый язык). Моё явное обоссывание твоего ебала авторитета в глазах соевого быдла тебе не добавляет, а соответственно прибавляет твоему оппоненту, то есть мне, и джаве, которую я защищаю.
>>2890562 Выбрал шарп, потому что лет в 12 попалась книжка по Net 3.5, в которой был диск со студией и примеры программ, которые можно было тыкать. Хуй знает при чем тут соя. Просто на фоне того же паскаля - это было небо и земля. Никаких бесящих begin, end, никаких :=, требований хуячить переменные в начале функции, никаких тупых разбиений на процедуры и функциихотя вот тут, именно сейчас я бы на самом деле прям на уровень языка засунул такое разбиение, и запретил в функции мутировать стейт в принципе, но это мои фантазии, так что похуй. Просто бери и пиши. И при этом в отличии плюсов, про которые тоже позже узнал - у тебя ВСЕ ЕСТЬ для жизни прямо вот, тута. Хочешь сайт - пожалуйста, хочешь графики - да вот они формочки, хочешь на лоулевел - да никто не запрещает. А потом еще и закрепилось тем, что в вузе был выбор, джава-плюсы-шарп, для того чтобы ООП осваивать, и ессно я выбрал шарп, пока долбоебы-однокурсники ебались с плюсами. Короче. К чему. К тому что не понял, хули ты до шарпа доебался. Не нравится - ну, так зачем в тред заходишь? Нравится - так не токси, тред невозможно читать из-за того сколько добра ты и прочие джава-неняши высераете.
как правильно провернуть dictionary?.TryGetValue(key, out var foo), посоны? компилятор говорит не знаю что у тебя там за out такой, unassigned local variable, а инициализировать foo чуть выше хоть и прокатывает но как-то убого смотрится. сейчас у меня вот так: if(bar?.Dictionary != null && bar.Dictionary.TryGetValue(key, out var foo))
>>2889271 Гений, если читать про всё подряд то хуй что изучишь Мне нужна книга которая позволит укрепить и систематизировать более продвинутые техники языка
Теперь напишем наши обработчики, метод их вызова и проверим что все работает как задумано.
Собственно - все. Мы написали свой каркас для CLI приложения. Далее - надо более правильный парсер аргументов использовать, добавить DI, ну и написать нужные нам обработчики.
Хочу ~2k$, есть чуть больше 2х лет работы, однако чувство будто нихуя не знаю Или действительно нихуя не знаю, потому что на местах работы использовал шарп максимально примитивно (ибо не было необходимости выдрачивать что либо еще) Вот например, как часто вы делегаты используете в работе? Знакомые на го и жаваскрипте уже по 4-7к$ делают, хотя вроде и не дрочат литкоды ебаные, сидят по вечерам со мной в дискорде и играют в доту
Почему по тому же реакту куча туториалов на ютубе от модных молодежных зумеров, а по razor pages фиг чего годного найдешь, да и то половина материалов от индусов? Нашел Флёнова, он как, котируется? На офф сайте майкрософт какие-то макакинговые туториалы, тупо повторяй, ткни сюда, нажми здесь, в итоге сайт готов, а что, зачем, почему, ни хера не понятно. В шапке треда материалы не особо свежие. Какая сейчас самая модная молодежная литература для вката в asp и razor pages в частности?
Ещё раз убеждаюсь, что петушарп не просто убогий клон джавы, а это просто какой-то фарс на манер так любимых нашими чиновниками обвалившихся деревянных халуп, закрытыми полотнами с нарисованными нормальными домами.
>>2892657 То что ты потом заебешься отлаживать код, в котором кто угодно - где угодно нахуевертил. Это как минимум. Ну срсли. Вот в коде где-то в дебрях
Как избавиться от того, что мой код на 80% состояит из классов вида Handler, Context, Dispatcher, Evaluator?
А половина методов Invoke, On<T>, Start, Stop, Run?
Просто как-то мне кажется, что это нифига не правильно. Но с другой стороны - 90% моего кода - это не бизнес логика, а инфраструктурный код. Но все равно.
>>2892244 ты выбрал мертвый стек, братан. Пока молодые шутливые гоферы на втором году выходят на 200к, клепая круды, у шарпера на эту же сумму будут спрашивать глубокие кишочки, знание реакта, знакомство с кубером и настройку CI/CD
>>2893077 >Почему вы не хотите ревьюить мой код? Чел, я даже на работе на код-ревью хуй кладу. Просто ставлю аппрув и все. Так что можешь считать, что твой код - норм. Но да - я даже не смотрел его.
Нахуя и зачем везде дрочат на ПрИнЦиПы ООП, если еблухины не могут даже определиться с этими принципами? Да они даже не могут определиться с количеством этих принципов, то абстракцию считаем, то не считаем. Причем, какую бы статью или видос ты не открыл и что бы там не высрал автор (причем высирают, зачастую, диаметрально противоположные вещи), половина комментов обязательно будет состоять из вот такого: >Хорошо рассказываете, уверенно. Прошу указать ссылки на литературу, ведущие к определениям "инкапсуляции" и "чистого ооп", или это лично ваши определения, полученные после реального кодинга? Или других вспуков, в которых будет ясно даваться понять, что автор, вообще-то, долбоеб и сказал неправду, но как правильно - хуй его знает. Такое ощущение, что эту ебалу высрали и спрашивают на каждой вакансии специально, чтобы каждый у себя в черепушке придумал личное определение, а потом с ебалом пикрил смотрел на тех, кто выдумал другое определение. готовлюсь обосраться на собесах
>>2894669 Чтобы траллить лалок на собесах. Если кандидат назовёт абстракцию, то говорим, что нихуя, а если не назовёт, тогда говорим, что он забыл её упомянуть.
>>2895166 Не, это плоды моего воображения пишут статьи, в которых одни и те же примеры выступают то реализацией абстракции, то полиморфизма, то "лол, у вас че, абстракция это отдельный принцип?))0", то "хех, мда, у них сокрытие это инкапсуляция)))))0". Я это выдумал, разумеется, а если ты откроешь любую статью или видимокролик, то там, конечно, будет все одинаково объяснено.
Почему компилятор ругается >""Binding" невозможно задать в свойстве "DataContext" типа "ObservableResourceTemplates". "Binding" можно задать только в параметре DependencyProperty объекта DependencyObject."
Хотя оба класса, свойства которых связываются, реализуют INotifyPropertyChanged. Почему требуется именно DependencyProperty?
>>2895255 Ну вот такая вот дефолтная реализация. Она реализует паттерн "приспособленец" и как то вот так вот. DependencyProperty очевидно используется как ключ, поэтому он и задается как статическое поле.
Вообще хз как она под капотом работает Если ты свяжешь dp <-> dp <-> INPC (по логике 2 канала связи) то хрен ты можешь потом прервать связь между dp <-> INPC. У тебя есть только ClearBinding который разрушает вообще всё.
Почему нет для INPC? ну тогда там не получится использовать "приспособленец", а это будет уже другая реализация для таких случаев. И видимо решили не усложнять себе жизнь.
>>2894669 > лично ваши определения, полученные после реального кодинга? Лично по моим ощущениям ООП состоит из: 1. У нас есть объектные типы данных, далее просто типы. 2. Для типов существует процедура конструирования экземпляра типа. 3. У типов есть атрибуты ака члены, значения или контекст которых принадлежат сконструированному экземпляру. Всё. Процедура деконструкции экземпляра уже не входит в этот список, потому что уже опциональна. Наследование уже не входит в этот список, потому что опционально и является не принципом, а паттерном. Много лет я считаю эти 3 пункта самодостаточным определением ООП, а все остальные инкапсуляции с полиморфизмами - это наносное. Это можно делать не только с объектами, не только в ООП. Например, инкапсуляция (in-capsule) - код отдельного модуля программы самодостаточен и независим внутри модуля. Где тут ООП? или например сокрытие. Права доступа к переменным и функциям. Это могут быть атрибуты объекта, м аогут быть просто функции беООПного языка. Или полиморфизм. Его можно достичь через наследование классов в ООП, а можно через наследование текстовых модулей без ООП. Не вижу непреодолимых причин, чтобы так сделать, и в седые 80 так и делали при помощи инструкций компилятора. #IF FOO INCLUDE bar.inc ELSE INCLUDE baz.inc #ENDIF Чем не полиморфизм? >>2894680 > Если кандидат назовёт абстракцию Ну и как абстракция может принадлежать ООП если абстракция существовала до ООП, прямо в тот момент, как с перфокарт на ассемблер пересели и появился первый слой абстракции.
>>2895273 Вот я литературно об этом и говорю. Все носятся с каким-то "принципами" и считается, что это такое "общее знание", которое всем доступно и у всех одинаково (примерно как "что такое int"), а на деле каждый придумывает для себя собственную поебень, которая не имеет ничего общего с поебенью в голове другого человека. В итоге люди говорят об абсолютно разных сущностях, по какой-то нелепой причине называя их одинаково. В чем смысл абстрактных "принципов", если общие у пользователей только названия этих принципов, а то, что под этими названиями понимается, индивидуально. Это как если бы у каждого в голове было свое кардинально иное понимание, что такое "хлеб", один бы говорил, что это пончики, другой говорил, что это батон, а третий был бы уверен, что его в кастрюле нужно отваривать и вилкой жрать. Вроде как что-то общее есть, но нахуя тогда понятие "хлеб" нужно - непонятно.
>>2895288 ИМХО, реально знать и учить следует SOLID и паттерны. Вот они должны быть в наших головах абсолютно идентичны и соответствовать тому, что наизобретали в банде четырёх.
>>2895298 >Вот они должны быть в наших головах абсолютно идентичны и соответствовать тому, что наизобретали в банде четырёх. но это глупость. 1 паттерны изобретались для си. На других языках они могут быть выражены иначе или не нужны вовсе 2 паттерны НЕ НУЖНО реализовывать дословно. Нужно идти к паттерну и остановиться когда задача решена.
>>2895299 > паттерны изобретались для си На си, но не для си. > На других языках они могут быть выражены иначе или не нужны вовсе Ложь. > паттерны НЕ НУЖНО реализовывать дословно Паттерны это алгоритмы. > Нужно идти к {алгоритму} и остановиться когда задача решена. Ну как бы да, но из-за каши в голове ты пишешь чушь.
>>2895304 >>2895299 Так стапэ, погоди ругаться. Я тебе так скажу. До изобретения "паттернов" начинающим программистам рекомендовали учить типичные общие алгоритмы. Потом кто-то придумал "дизайн паттерны", а потом "SOLID", и эти понятия подменили алгоритмы как синоним. Суть осталась та же. Общие алгоритмы. Они не зависят от языка. Да, на разных языках они будут синтаксически реализовываться по разному, но вычисляться будет одинаковый результат, решаться будет одинаковая задача. Понимаешь?
>>2895304 >не для си. ДЛЯ си посмотри реализации паттернов этих на других языках у увидишь что все иначе >Ложь. сколько языков изучал? ) ты темой точно не интересовался >Паттерны это алгоритмы. нет. это ОБЩИЕ РЕШЕНИЯ. какие то задачи люди решают и приходят к похожим решениям. Вот эти решения обобщили и выдают как паттерны, чтобы была унификация. Польза от паттернов это коммуникация, а не само решение. Само решение - оно и так приходит. >но из-за каши в голове ты пишешь чушь. это не моя мысль. эту мысль задвигает Джошуа Кериевски: Рефакторинг с использованием шаблонов и я с ним полностью согласен.
>>2895310 паттерны и SOLID это разные принципы вообще. первое это КОНКРЕТНЫЕ архитектурные решения, а второе - общие рекомендации на тему чистого кода. И никогда они не были синонимами.
>>2895315 > общие рекомендации на тему Алгоритм это и есть общая рекомендация на тему кода. Алгоритм не предписывает, каким словом следует описать например, цикл, алгоритм просто говорит "возьми вот эти данные и в цикле умножай каждый элемент на 2" и всё. А уже в языке сишник сделает так, а фортранщик сделает эдак.
Поэтому я остаюсь при своём. 1. В алгоритмах есть конкретика решения задачи. 2. В алгоритмах нет конкретики языковых инструкций. 3. Принципы SOLID - это алгоритмы. 4. Дизайн паттерны - это алгоритмы.
Мнения зумеров с умными ебалами на этот счёт меня не интересуют.
>>2895288 >Все носятся с каким-то "принципами" Может быть у тебя в голове носятся, либо насмотрелся роликов с ютуба. Сам миллион раз шел своим путем, пока не упирался в тупик. Возможно есть клоунские паттерны, а возможно ты еще не встретил ситуации, где эти паттерны тебе пригодились бы. И пока тебе это нахрен не нужно, ты смотришь на них как на абстрактное ненужное говно.
Если ты из тех долбоебов, которые сперва учат паттерны, а потом находят для них причину, то тут можно выразить только сочувствие.
>>2895388 Тогда тебе следует сперва сделать какой нибудь пет-проект, чтобы уткнуться носом в несостоятельность собственных убеждений. Иначе никак.
Банально сделай какой нибудь свой проводник, чтобы у тебя на множестве окон синхронизировались данные, чтобы эти данные имели разное визуальное представление, чтобы эти окошки могли как угодно стакаться. Я посмотрю как ты обойдешься без единого паттерна.
>>2895324 >Я из тех долбоебов, что хотят на РАБотку устроиться, а так уж получилось, что собесы не обходятся без принципов ооп А ты задвигай на собесах еще побольше дичи вроде такой: >3. Принципы SOLID - это алгоритмы. >4. Дизайн паттерны - это алгоритмы. Тогда ты еще долго не сможешь устроится.
Ты похож на долбоеба практиканта, который пришел на завод. Ему говорят "Подай вон те пассатижи", а он начинает выебываться на тему "Это не пассатижи, а плоскогубцы" и задвигает лекцию на полчаса в чем их отличие, вместо того, чтобы сделать то, о чем его просят. Естественно его закономерно считать душнилой и шлют нахуй.
>>2895420 О какой "несостоятельности убеждений" речь? У меня нет никаких убеждений, я просто хочу прочитать про общепринятые понятия, а оказывается, что они нихуя не общепринятые и это какая-то шиза, которую каждый для себя выдумывает. Жопа у меня сгорела не от того, что в моем голове понятия другие, а от того, что гаврики не могут к какому-то консенсусу прийти, чтобы разные штуки одним и тем же словом не называть.
>>2895882 Так не интересно, няша. Типа блин. Ну, я могу и взять тот же кестрел и использовать его как TCP-сервер, просто добавив туда коннекшон-хендлер. Но так же нефига не интересно. Плюс - в процессе учишься новому, узнаешь нюансы и все это вот. Типа не знаю. Я все равно, считаю, что есть разница, между тем - ты представляешь в голове как это сделать, и ты на практике делал и все грабли собрал. Короче. Не знаю. Да. Вот. Да.
А что мешает-то, лул? Другое дело, что кестрелл - заточен под этот ваш HTTP и там слишком много всего под него, а если будешь пытаться наворачивать какой-нибудь IRC или что-то в этом духе - просто залюбишься до смерти.
>>2895928 Ну и да. Сверху - не факт, что вот это вот апи - оставят для публичного пользования. Хотя оно еще в 3.0 появилось и пока не убрали, но занаем же майков и что они иногда могут решить, что не нужно. А бедрок, который на базе кестрелла делали - давно не подает признаков жизни что-то, как был экспериментальным, так и остался. Печаль-беда.
Привет всем. Подскажите, пожалуйста, чем вы пользуетесь в своих asp проектах для авторизации? Мне нужно уметь создавать пользователей, логины/пароли, и прописывать методам апи в контроллерах разделение по ролям. Пользовался внутренней системой(был отдельный сервис общий для всех авторизаций и пакет нугета локальный, делающий это в 5 строк), но щас сказали пилить именно независимую от внутренней свою.
>>2895996 Просто придется возиться с тем, чтобы прокинуть ему все его офигенные зависимости. Фактории слушателей, опции, сервисы, лимиты, фактории логгера, и вот это все вот остальное. Дальше - server.StartAsync(MyApplication, cancellationToken). Веб-хост то что делает. Он всю эту хреноту вместе собирает, потом - берет и из мидлваров и прочего добра билдит IWebApplicatio, потом всем серверам в StartAsync прокидывает этот IWebApplication. С кестрелом-то ничего не прячут, пока что - все апи, практически, public, и если хочется - можно поиграться. Я это к чему? К тому что ну, можно без веб хоста, просто придется то же самое, что он делает - делать руками. Это не сложно, просто тогда бы листинг раздулся, хотя суть бы не поменялась.
>>2896099 А, ну и да. Я тут вижу, что вроде как в последних версиях - поменяли вроде апи кестрела слегка. Раньше он вообще без IWebApplication вроде как нормально работал, по крайней мере я так помню, хотя это было давно, я могу уже путать. Потому что опять - я на нем - делал в свое время свой чатик поверх TCP, но слишком много возни было из-за того что много лишнего для меня было, и решил уже переключиться как человек на сокеты.
Есть ли список действительно сложных вопросов на мидла и сеньора которые задают на собеседовании? Гуглинг постоянно высирает сотни одних и тех же вопросов для джунов
>>2896181 Просто потому что сенек спрашивают ровно то же самое. Отличие лишь в том, что у джуна это будет растянуто почти на весь собес, а у сеньки это будет максимум половина. Вторую половину он будет пояснять про свой личный опыт и работу с конкретными технологиями. Ну и у сеньера еще есть читерская опция для ответов на вопросы по теории "я уже давно с этим не работал, не помню".
>>2895436 >О какой "несостоятельности убеждений" речь? вот от этой >это какая-то шиза
>к какому-то консенсусу прийти Потому что нельзя одну сову натянуть на десять глобусов. Поэтому возникают интерпретации и вариации.
>разные штуки одним и тем же словом не называть Еще раз, пока ты не столкнулся с проблемой, тебе все будет казаться одним и тем же, потому что твой моск не обращает внимание на нюансы. Хули тут пиздеть, бывало анон ИТТ употребит одно слово, которое меняет ВООБЩЕ ВСЁ, но пока ты не знаешь что это — для тебя это пустота и ничего не значит.
Какие подводные в создании оберток для асинхронных методов такого типа: public string ReadTextFile(string filename){ IAsyncOperation operation = File.ReadAsync(filename); while(operation.State != complete){ Thread.Sleep(10); } return operation.Result; }
>>2896806 Дедлок, самое простое. При этом - ты его хуй отловишь. Второе - неэффективное использование ресурсов процессора. Твой тред - проставивает хуй пойми для чего. Третье - тима будет считать, что ты долбоеб, и на первом ревью - отправят на мороз.
По ddd весь домен должен быть изолированным, то есть интерфейсы репозиториев и сервисов нельзя хранить в domain слое? Но как тогда внедрять репозитории, если это требуется инвариантом?
>>2897017 По DDD - уровень домена - может пользоваться интерфейсами инфраструктуры, но не должен знать про детали реализации этой самой инфраструктуры. И соотвтетственно пользоваться этим. Т.е. ты можешь слинковать сборку MyApplication.Domain с MyApplication.Infrastructure.Abstractions, где лежат интерфейсики сервисов, репозиториев и т.д.. Но уже на уровне приложения - ты пропишешь домену, какие конкретно реализации этих абстракций надо использовать.
>>2897017 Про то, ложить ли интерфейсы рядом с доменом. А зачем? Что тебе полезного это даст? Если тебе эти интерфейсы нужны где-то еще, хочешь, чтобы потребитель - имел доступ ко всем этим интерфейсам? Ну, т.е. ты можешь так сделать, и прямо это DDD не нарушит, если у тебя микросервисная архитектура, и сервисы твои разбиты так, что не возникает пересечений - можешь в той же сборке хранить.
Можно как-то повлиять на порядок биндинга к DependencyProperties? Я не понимаю по какому принципу идет этот порядок.
К примеру пикрил (на названия свойств не обращайте внимание). Но как бы я не менял порядок, у меня первым делом идет привязка свойств Key, Value, MainViewModel.
>>2896806 Пиздец проиграл с помойного петушарпа. В джаве эта задача выполняется созданием одного Future. Добавлю это в свой список попуска шарподаунов и буду им каждый раз при втрече в ебало тыкать тем, что у них в языке нет возможности подождать выполнение задачи из одного потока в другом. Как вы вообще живёте блядь?
>>2852022 >Шарпаны, что думаете от чистоте крови функции? Не слушай этих кретинов, которые тебе отвечали. Во-первых, подели все свои классы на классы данных и сервисы.
Первые должны быть простыми без всякой бизнес логики (можно чуть-чуть в виде рид-онли свойств типа площади прямоугольника). В идеале они должны быть immutable, но в реальности это часто может проводить к большим накладным расходам.
Вторые должны не содержать никакого состояния. Они могут иметь другие сервисы в виде полей, или даже инжектированные неизменяющиеся данные (например, конфигурацию приложения), но не более того.
Таким образом, методы получаются чистые, код становится значительно проще, пропадает всякая неведомая магия, ну и тесты становится писать очень легко.
>>2897223 Ты, вероятно, совсем долбоёб. Асинхронность в шарпе есть, и она значительнл лучше, чем в джаве. Вообще, в джаве есть только одна фишка, которой не хватает шарпу: анонимные реализации интерфейсов. Все остальное в шарпе на голову выше. А код, на который ты ссылаешься, это как раз пример того, как делать не надо.
>>2897263 > Вторые должны не содержать никакого состояния. Они могут иметь другие сервисы в виде полей, или даже инжектированные неизменяющиеся данные (например, конфигурацию приложения), но не более того. А как же контекст бд?
>>2897381 Нахуя тебе в конструкторе, блядь, асинхронный метод вызывать? Ну серьезно. Если чтобы проинициализировать объект вот такая хуйня нужна, то лучше факторию или билдер уже мутить, а в конструктор ложить результаты выполнения. Потому что я так думаю, потому что единственный кейс где я вижу надобность асинхронного выполнения в конструкторе - это если тебе в базу зачем-то лезть надо, с диска читать, вот это вот, а если это надо, то ну рил, ты хуйню придумал, делай нормально, нормально будет.
Блин. Пацаны. Как же я хочу, чтобы конструктор в шарпах так и назывался: constructor. Почему надо было делать конструктор с именем класса-то? В чем сакральный смысл такого мува-то?
>>2897387 >это если тебе в базу зачем-то лезть надо Какой дурак лезет в базу при создании нового экземпляра? Это вредительство какое-то. Время, когда экземпляр создается, редко совпадает со временем, когда этот файл используется.
Вот, банальная ситуация у меня щас. Пилю темы для UI. Каждая тема — это класс с Uri на файл с ресурсами. Но чтение с диска идет ровно тогда, когда я эту тему собираюсь применить или отредактировать. Потому что этих тем может быть 100500, но не все будут использованы. Я просто не представляю, чтобы при заполнении коллекции этих 100500 тем, каждое из этих говен незамедлительно читало бы все содержимое файлов.
Единственный вариант — это чтение конфигурации, данные которых по сути и являются данными для инициализации. Но даже это тупость, это должно идти второй строкой.
Вам в капче когда нибудь попадалась задачка с нулем? Например 45 + ... = 45
>>2897478 Когда с бейсика переходил, тож сложно было въехать. Даже сейчас всегда подписываю ctor, иначе хрен найдешь. В бейсике в конструкторе стоит New вместо названия класса и это совпадает с New() при объявлении.
А еще бесило, что тип элемента идет впереди названия, хотя все ищут по имени, а тип — второстепенная информация. К тому же список полей и свойств всегда выглядит как ебаная лесенка из-за разной длины типов. Но зато каргокультно и уважаемо, как и ";"
>>2897482 Ну. Меня это бесит потому что когда у тебя разрастается количество классов в проекте - IntelliSence с ума сходит. А я по сути без него и не могу уже кодить.
Типа вот у меня есть уже есть класс CalculateMonthSalaryJob, а я добавляю новый CalculateMonthSalaryBonusJob. И автоподсказка - будет настойчиво мне пропихивать первый, а потом красным все выделять, что это же метод, значит надо возвращать значение. А ебанутая автоподстановка в последних версиях - вынуждает меня - после того как хуйню IntelliSence предложил - клацать Backspace и вводить правильно. А был бы просто constructor - такая хрень вообще никогда бы не возникла.
Опять же - более редкие кейсы - я добавляю в базовый класс новый параметр конструктора. Теперь надо пройтись по всем дочерним и проставить его там, хотя у них у всех - одинаковая сигнатурка. Был-бы просто constructor - я бы мог в папке Find-Replace сделать и жить нормально. Но тут я уже наученный опытом этой хуйни - давно сразу базовому классу делаю класс BaseClassSettings и если в нем чет добавляю, потому и говорю, что более редкий сценарий.
>>2897512 Я сниппеты выпилил по той же причине. Ебанутость интелли-сенса, когда я хочу переменную назвать cw - а эта хуйня мне Console.WriteLine пишет. Да и неудобно нихуя.
>>2897527 Я просто хочу чтобы студия не подставляла за меня ничего сама. Что такого в этом желании-то? Типа мне нравится как было в notepad++ в те времена, когда я в нем кодил. Подсказаочки есть, но ты должен явно сделать действие, чтобы оно применялось. А в студии последних версий - подстановка ебанутой стала иногда. Я пишу слово - оно дописывает неправильно, приходится исправлять не себя, а то что оно предложило и зачем-то вставило.
А с конструкторами - ну, я постепенно из-за этих приколов студии - решил что надо искать другие инструменты, даже вим настроить умудрился. И вот с такими вот инструментами как вим, у которых LSP отваливается раз в полчаса - понимаешь, что было бы пиздец как удобно, если бы конструктор везде назывался constructor, сразу бы просто миллион проблем решилось.
>>2897532 >Я просто хочу чтобы студия не подставляла за меня ничего сама. Так она и не подставляет, если ты сам не дашь на это согласие при нажатии Enter или Tab.
>>2897554 На работе - почему-то подставляет. ХЗ. Наверное надо переустановить студию и почистить все настройки. Чи еще что-то. Дома сейчас попробовал - действительно все в принципе - нормально и как должно быть. А на работе, я думаю это из-за какой-то хуютки безопасника, который следит, там еще периодически - Ctrl+C-Ctrl+V отваливается, нахуй, перевод на новую строку происходит, какие-то символы невидимые вставляются. ХЗ короче.
Не могу себе представить ебальник хуесоса, который сначала в петушарп-треде зашищает свою потешную асинхронность, а потом идёт на реальную галеру и 10 часов в день пишет бесконечные циклы с конструкторами.
>>2897682 Че повторить? В том коде чел какую-то фигню творит. В шарпе - нормальная асинхронность из коробки, никаких циклов и прочего - ждрать не надо. И не нужно как в жавовских фучерсах всякие get вызывать, чтобы подождать результата, просто пишешь await, если результат подождать надо. Не надо - не пишешь.
>>2897290 >>асинхронность есть и лучше яскозал! >>чтобы подождать выполнение задачи нужно вставать в бесконечный цикл >))))))))) >>2897291 >>в ответ на аргументы повторяет мантру >Чем ты болеешь? Семён, загугли async/await и больше не пиши сюда.
>>2897706 да забей ты на этого жава имбецила. ему просто скучно я тоже могу пойти в жава тред и заявить
я написал на жаве Thread.sleep(10000000000000000000) и моя программа зависла говно эта ваша тупая жава
просто я не имбецил и потому нечего мне в жава тредах делать а вот этому жависту не зазорно показать свою примитивность мышления и отсутствие базовых знаний
>>2897495 >Опять же - более редкие кейсы - я добавляю в базовый класс новый параметр конструктора. Теперь надо пройтись по всем дочерним и проставить его там, хотя у них у всех - одинаковая сигнатурка. Надо просто не использовать наследование.
>>2897770 >так нет вакансий. >Насколько варик пиздеть про опыт? Насколько вообще парятся на вакансиях, где требуют от 1 года опыта Вакансии от 1 года - это и есть вакансии для джунов. В нормальном состоянии, в любой шараге за 3...4 года, если ты не еблан, то спокойно к концу обучения наберешь этот самый год опыта на практике или подработках (у преподов, знакомых или на фрилансе). И как раз будешь к этому моменту в стадии личинки-джуна. Стажировки есть, но на них обычно сами ищут кандидатов и в открытый доступ не выкидывают. И там тоже отбор и н ужно тестовые делать. Заведи себе близкое знакомство с какой-нибудь опытной херочкой из какого-нибудь аутсорса и тогда у тебя будет самая актуальная информация о вакансиях на рынке.
Спиздеть про опыт ты конечно сможешь, но это тебе максимум поможет пройти hr-фильтр. Дальше на тех. собесе тебя развалят и поставят в базе отметку "нохаир". Вариант так проскочить только куда-нибудь на завод где сдох старый сишарпер и нужен новый, чтобы поддерживать их говно мамонта. Там обычно уровень собеседующих настолько низок, что можно им в уши, что угодно ссать.
меня одного напрягает то что есть разный синтаксис который делает почти одно и то же (второй менее функционален)? int[] arr1 = [1, 2, 3] vs int[] arr2 = { 1, 2, 3 }
>>2898038 Синтаксис с квадратными скобками - только появился. Даже в 7м нете его нет. А нужен он буквально из-за другой новой фишки с объединением коллекций. Типа [..arr1, 1,2.3, ...arr2];
Вообще. По хорошему - я за единообразие, а потому предпочел бы, чтобы в фигурные впилили поддержку этого. Но видимо чтобы было явно видно, что это только для коллекций хуйня - решили так сделать.
>>2898049 >чтобы было явно видно, что это только для коллекций хуйня Поверил бы, если бы можно было написать var data = { lol = "kek" }, но надо обязательно new добавить перед скобками
Как в ValueConverter сообщить, что вводимые параметры имеют неверный формат?
Я понимаю, что для этого есть валидаторы, но меня волнуют не вводимые пользователем данные, а то что я пытаюсь сбиндить. Я не хочу каждый раз лезть в исходный код и смотреть почему не работает конвертер.
Если я верну ArgumentException, то там можно написать сообщение с пояснением что не так, и в режиме дизайна это сообщение удобненько выводится. Но в рантайме это может вызвать критическую ошибку с завершением всего приложения. А я этого говна не хочу. Хотя меня чет напрягает XamlReader, который плюет критическими ошибками, не слишком ли это?
>>2898192 Почему валидные с точки зрения юзера данные не должны сконвертироваться дальше, при этом приложение должно продолжить работу? Это как раз критическая ошибка, потому что у пользователя нет возможности исправить это, ведь это не зависит от его ввода.
>>2898192 Ладно, это было помутнение. Можно просто писать в лог или на крайняк печатать Debug.WriteLine.
>>2898208 >Это как раз критическая ошибка Неа. Запрещено для конвертера выдавать исключения. Возвращается либо DependencyProperty.UnsetValue, либо Binding.DoNothing. В определенных случаях допускается возврат null.
А конкретно пользовательский ввод должен контролировать валидатор, стоящий перед конвертером. Но я не про пользовательский ввод, а про себя как разраба, который открыл конвертер спустя год и не помнит че туда пихать надо. Речь идет о специфических конвертерах.
>критическая ошибка Я про ту ошибку, когда выскакивает необработанное исключение. Причем странная штука. Я сделал отлов этих исключений в App (пикрил) по примеру из SO и в результате исключения, вместо одного месседжбокса выскакивает подряд куча, затем приложение фризится и вылетает.
Получается, так, что конвертер привязан как итему списка, и каждый итем списка по сути провоцирует исключения, вызывая шквал окон. Надо какую-то защиту поставить от подобной фигни, хотя я не видел примеров, как будто у других такой проблемы возникнуть не может.
>>2898208 >при этом приложение должно продолжить работу? Да. Конвертер просто не вносит изменения в свойство, и там остается последнее валидное значение.
>ведь это не зависит от его ввода Ну я решил подобное писать в лог. А DependencyProperty.UnsetValue подсветит рамку красным, сигнализируя, что что-то не так.
>>2898192 Опять ты Вечно стреляешь себп по ногам. Ты себя ненавидишь?
Записывай 1 поле ввода не должно позволить вводить бред 2 конвертер просто конвертирует. И НЕ ЗНАЕТ о логике. А раз нельзя ввести бред то и конверт пройдет всегда 3 значение уходит в стейт (вьюмодель например) и вот он ЗНАЕТ что котики лучшие существа на свете валидное значение или нет. А дальше сообщает о своем невалидном состоянии
>>2898304 Ты пишешь не прочитав, что я написал? Я написал ровно тоже самое.
Но речь вообще не об этом. Блять, вы как яндекс алиса — ей пишешь одно, а эта дура акцентирует внимание на другом и пишет хуйню, которая меня не интересует (может я невнятно объясняю). Нет, блять, уже второй мне начинает расписывать как чекать ввод от юзера.
Но я тебе распишу пример. Есть мультиковневртер, у которого n биндингов. Какое именно количество — хуй знает. А еще один итем может быть коллекцией, а второй строкой. Как это прочекать когда ты импортнул конвертер спустя год — хуй знает. Именно об этом была речь, но я сам решил уже проблему.
>>2898341 я прекрасно понял о чем ты. и еще раз повторю >Какое именно количество — хуй знает. А еще один итем может быть коллекцией, а второй строкой. и что? дело конвертера - КОНВЕРТИТЬ (и выдавать дефолт если сконвертить не удалось) а не заниматься валидацией. пусть контрол занимается валидацией левых значений
>>2898347 У меня комбобокс должен отобразить итем списка по его ключу. Поэтому я запилил мультиконвертер, где параметр values[0] - это коллекция с итемами, а values[1] - это итем, в котором хранится ключ. Конвертер проходит по коллекции, ищет нужный итем и пуляет его комбобоксу, который устанавливает его как SelectedItem.
Ты пойми, что я хочу донести. Представь, что я этот конвертер отложил в дальний ящик и спустя долгое время хочу заюзать снова. Я не помню, что надо биндить в values[0], а что в values[1]. Но специфика конвертера такова, что порядок итемов, их количество и тип играют большую роль. И конвертер мне об этом не скажет, и комбобокс не скажет. В комбобокс придет DependencyProperty.UnsetValue, и мне придется лезть в исходник и смотреть как же там устроен этот конвертер.
Вот я о чем. В случае эксепшена я могу подать сообщение, что ты, разработчик, вместо коллекции в values[0] засунул какую-то залупу. Но в конвертерах эксепшены использовать запрещено.
>>2898381 увы впф не идеален поэтому я так ссу кипиятком от жетпак композе, но приходится впф он проглотит твое исключение если ты не позаботишься
и я понимаю что тебе хочется идеала, но этого не будет потому прими факт конвертеры - конвертят. если что - то в дефолтное значение (которое юзер конечно сразу увидит и поймет что он ввел что то не то)
>>2898385 Да я уже решил кроме DependencyProperty.UnsetValue еще и печатать Debug.WriteLine или logger.Error, так что на этапе дебага я увижу сообщение о неверных данных.
>>2898394 это не тру в оутпут пишется много чего и окно это убогое в студии так что не тру
ну да, весь впф не тру он мощный - факт но сам факт что он хмл и отделен от кода - его беда лучше бы он был кодом.
я не знаю что там мауи придумали но дизайн как код (а не хмл) это годнота, ведь иде просто проверяет что где сама А без этого....вот решарпер через туеву хучу лет не может вывести тип списка чтобы не ругаться зато я ругаюсь...
>>2898154 async был добавлен чтобы как раз не было await в не-асинк функции.
в старом коде может быть await как имя переменной. И все эвристики "отличаем переменную от ключевого слова дешево, без смс и регистрации" не выдержали критику и поэтому был введен async как "его раньше не было, значит легко отличим старый код от нового молодежного"
зы: как по мне эвристика бы справилась, но авторы языка посчитали что оно того не стоит и обошлись простым методом.
>>2900869 В современном мире - лучше бери MSDN, открывай гитхаб и смотри кишочки дотнета. Книги - хуйня, пока они дойдут до тебя - там 100500 раз поменяется все.
Что делать если ты работал на довольно примитивных проектах? 2.5 года опыта, но по сути это low-code платформа, мелкие сервисы на .NET и немного SQL Начинать заново искать работу джуном как то не хочется, ибо успели поднять зарплату, а зп джуна уже не хватает А сейчас везде требуют еще и брокеры сообщений, докеры всякие, CI/CD, еще и жаваскрипт Я на всем этом работать бы и рад, но без коммерческого опыта на этих технологиях никто всерьез не возьмет, а самому учить-дрочить это... ну не знаю, теорию еще да, ну может мелкий пет-проект чтобы потыкать-посмотреть, но не более
>>2901414 >а самому учить-дрочить это... ну не знаю, теорию еще да, ну может мелкий пет-проект чтобы потыкать-посмотреть, но не более Конечно, чел. Ни в коем случае не нужно все это 'учить-дрочить', просто сиди на жопе ровно и однажды все эти знания и навыки сами чудесным образом появятся у тебя в голове.
>>2902629 >А если в вузе Тогда это хуйня из под коня, а не ВУЗ. Узнавай в деканате, корешись с секретаршей или методистами и выясняй у них с какими конторами у ВУЗа есть договор или связи. Ищи по знакомым. Узнавай у других студентов, как они этот вопрос решают. Если совсем тухло, пробуй опенсорс. Находи какие-нибудь общеизвестные репы по своему стеку и пробуй туда свои пулреквесты пропихнуть, ну или форк сделай. Собирай друзяшек и пишите какое-нибудь приложение, которое решает какую-нибудь конкретную проблему. Вот тебе и практика.
Хм. У меня идея. В общем. Я вот что придумал. Приложение, которое должно обеспечивать квази-стабильный канал связи между девайсами. Суть в чем. Есть прокси-сервер. Есть клиент. Клиент и этот прокси-сервер по своему протоколу общаются. Есть устройство. Оно шлет свои пакеты через клиента. Клиент - запаковывает в специальный пакет и отдает серверу. Сервер, накапливает пакеты - отдает другим клиентам, которые ждут посылки. Клиент на той стороне - получив от сервера - если физически связь есть - отправляет внутреннюю часть устройству которое подключено к клиенту, если нет - сохраняет до следующего сеанса связи и потом отдает устройству, после того как связь будет установлена.
Собственно такая-то смесь с одной стороны - очередей сообщений, с другой - wireguard. Для систем, где хуевая связь, но возможны долгие сеансы. Протокол устройств - не важен, любой протокол - будет обернут в обертку, а затем развернут прозрачно для клиента.
Ну. И у меня вопросы. 1. Насколько тупой идеей будет делать это на шарпе? 2. Насколько сама по себе идея тупая? Просто ИРЛ - я могу представить, когда это надо, допустим какие-то датчики на солнечных батареях, они раз в сутки - могут выйти на связь, пару минут пожить и обратно отрубиться, но было бы хорошо, чтобы им дошло сообщение которое вчера еще отправили, и они данные - так же отправили куда надо, чтобы сервер с этих датчиков данные схоронил. Но ебаться просто ради себя и проверки концепции - как-то не оч хочется.
>>2902746 >То есть можно годик себе нарисовать, если ты программировал на опенсурсе? Если ты сможешь пояснить, что ты там делал, какие задачи решал, с какими проблемами столкнулся и как их затащил. Тогда да. Возьми например какой-нибудь ASP.NET проект на .NetCore 2.1 c EF и переведи его на .Net6/7 - ты в процессе как раз сможешь и опыта набрать и на кучу подводных наткнуться, так что сможешь толково рассказать и пояснить. Правда выдать это именно за "коммерческий" опыт ты вряд ли сможешь если у тебя его действительно не было, но можно на удаче съехать на то, что делал это в команде на каком-нибудь аутсорсе или по заказу. Главное про фриланс не упоминай, во многих конторах это как стоп-слово при рассмотрении резюме.
>>2902998 Ну. Тему что для устройства это должно выглядеть, будто оно просто в свой сетевой интерфейс что-то отправило, что-то получило из него. Знать ни про какие брокеры-очереди не знает.
>>2902974 Слушай, ну, в принципе прикольно. Надеюсь, сделаешь. С дивана дам совет небольшой. На случай, когда сообщение большое, то посылай его кусками. То есть реализуй потоковую загрузку от клиента серверу(когда ты 50 мбайт файл или сообщение режешь кусками по 1 кбайту). И будет как бы гуд найс, вэри найс.
>>2902991 Разве пруфов не будут требовать? Название организации, должность, документы какие-нибудь? Раз организация существует, то также попробуют с ними связаться, там тебя попробуют поймать на вранье. А если не существует, то и пошлют тебя куда подальше. Звучит так, будто это такая же попытка пиздежа на софт-скиллычах нарисовать себе года, только с учётом участия на опенсурсе.
>>2903194 >Разве пруфов не будут требовать? Пруфов чего? Выполненной работы? Ну так покажешь им репозитории со своими наработками. Можешь где-нибудь прикупить дешевую vps-ку и развернуть свой сервис там в открытом доступе. Заодно деплою научишься. >>2903194 >Название организации, должность, документы какие-нибудь? Скажешь, что в душе не ебешь, т.к. работал по гпх на своего братюню, а он уже непосредственно с заказчиком общался и выдавал тебе задания. Или вообще на общественных началах или в серую.
>Раз организация существует, то также попробуют с ними связаться, там тебя попробуют поймать на вранье. Там им скажут, что "не охуели ли вы ребята тут вопросы о наших проектах и сотрудниках задавать" и пошлют куда подальше. Сейчас только совсем отбитые конторы звонят без спроса на предыдущие места работы. А те из нормальных кому это еще интересно, сначала разрешения спрашивают и контакты, где ты всегда можешь съехать, что не можешь выдавать им телефоны, т.к. не было такой договоренности. Я в банк устраивался, в анкете на вопросы, можно ли им позвонить текущему или бывшим работодателям за рекомендацией, написал "нет" и ничего взяли, даже слова не сказали. Сейчас гораздо проще проверить кандидата по разным hr базам в которых напротив твоей фамилии будет написано "пьет на работе и врет об умерших родственниках в оправдании прогула" (реальный случай, знакомая херочка при мне такого кандидата чекала).
Ну и опять же поинт был не в том, чтобы совсем напиздеть о не существующем опыте, а в том, чтобы заиметь реальный опыт хоть каким-то образом. Если у тебя нет возможности пройти практику во время учебы от ВУЗа, то находишь её сам. Один из способов я тебе показал, взять попенсорсный проект и улучшить/переделать его. Ты заимеешь тот самый опыт, у тебя будет результат который можно предъявить и ты можешь слегка приукрасить, что делал его не просто для себя, а с какой-то целью (возможно даже коммерческой). Может у тебя друган или девушка какой-то общественной нагрузкой занимается и попросила замутить портал с каким-нибудь функционалом вроде бронирования или электронной очереди, я х.з. сам придумай. Прояви фантазию короче.
>>2903375 Спасибо за информацию, но все равно кажется, что с учётом огромной конкуренции среди джунов их будут проверять на пиздеж. Хотя я конечно могу многие отговорки придумать, но у меня вариантов то других и нет.
Почему HttpListener так странно спроектирован, что нужно перебирать ожидания запросов вызовом BeginGetContext, а если придет другой запрос пока обрабатываешь первый? Обычно же просто подписываешься на события и всё.
>>2903530 >их будут проверять на пиздеж Ты либо засыпешься и с тобой попрощаются. Либо разберешься в теме настолько, чтобы убедить собеседующего в правдивости своего пиздежа и пройдешь дальше. Просто чтобы о некоторых вещах убедительно врать, нужно достаточно хорошо разбираться в теме, чего уже может быть достаточно для работы на уровне джуна.
Да тебя будет в большинстве случаев проверять СБ, но их больше интересует насколько ты чист перед законом, свободен от долгов, у тебя нет крупных финансовых проебов и совсем уж явных публичных косяков на предыдущих местах работы (т.е. таких инфа о которых выходит за пределы конторы). Тебе больше стоит беспокоится о том, что тебя не возьмут из-за того, что у тебя паспорт или военник неправильно оформлены или кто-нибудь из близких родственников банкрот или лудоман.
>>2903634 Почему, если ты можешь нормально сформулировать вопрос и ответ на него не выскакивает на первой странице выдачи поисковика, то вполне можешь спрашивать.
>>2903630 так он же древний как говно мамонта. Тогда не было всяких там асинков
>Обычно же просто подписываешься на события и всё. а какая разница если по существу. К тому же эти BeginХХХ имеют асинхронную семантику по природе, а события нет.
>>2903845 А что из простого юзать? Мне надо (для тестов) просто сохранять все запросы http и ничего не пропустить, заморачиваться с мощными фреймворками вроде asp.net не охота.
> какая разница если по существу.К тому же эти BeginХХХ имеют асинхронную семантику по природе, а события нет.
Таккая асинхронность как beginInvloke точно поможет? Теоретически же можно пропустить запрос пока работает служебный код по её организации и пусть даже очень быстрой обработке запроса т.к. пока не вызовешь EndGetContext другие запросы не принимаются.
Я дажне не события в смысле event в C# имел ввиду, а типа подписки но что бы гарантированно было оповещение при каждом запросе.
>>2903906 >пока не вызовешь EndGetContext другие запросы не принимаются. Ты че там за код пишешь В этом и есть смысл асинхронности "принимать запросы пока первый обрабатывается"
Из простого листенера хватит Просто всё руками разгребать же
>>2903978 Я пока на примеры кода HttpListener смотрю, там надо самому прокачивать цикл приёма данных, т.е. пришел асинхронный запрос, ты его обрабатываешь, потом сам должен повторно вызвать ожидание следующего запроса. В этот промежуток пока ты разгребал если другой запрос придет ты его не увидишь как я понял. Нормальная асинхронность это когда записываешь свой коллбэк и он уже вызывается на каждый запрос, пусть даже с наложениями.
>>2904018 Везде нужно прокачивать. Где то явно, где то под капотом Весь мир построен на очередях. (кроме драйвера sqlite в дотнет, ну они рукожопы). Так что ничего ты не потеряешь. Просто не задерживай прокачку очереди.
>потом сам должен повторно вызвать ожидание следующего запроса Какой еще потом. Получил завпрос, поставил его в обработку, получаешь следующий, а первый продолжает обрабатываться
>>2904018 >кроме драйвера sqlite в дотнет, ну они рукожопы ну ладно не рукожопы. так то если файл занят, то нужно стать в очередь на эксклюзивную блокировку, но.....это же уже на уровень системы опускаться и можно повиснуть там, а с отменами там хз как
>>2903906 >А что из простого юзать? > просто сохранять все запросы http и ничего не пропустить
Task RunHTTP(int port){
var listener = new TcpListener(port); listener.Start(); while(true){ var client= await listener.AcceptTcpClientAsync (); _ = RunConnection(client); } }
Task RunConnection(TcpClient client){ try{ using var ns = connection.GetStream (); using var sr = new StreamReader(ns);
var request = await ParseRequest(sr); var headers = await ParesHeaders(sr); Stream body = null; if(headers.Contains("Content-Length")){ body = CreateBody(sr, headers.Get<int>("Content-Length")); }
>>2903906 >заморачиваться с мощными фреймворками вроде asp.net не охота. Зато сидеть велосипед городить решая кучу уже решенных проблем - охота. Пиздец как продуктивно.
>>2905081 Ну. Справедливости ради. Жрет оно дофига, если ты просто используешь дефолтную конфигурацию. Если чуть посидеть, подзаебаться, оставить только нужное(дефолтный HTTP-хендлер и пару нужных для тестов мидлваров), то там будет все оч скромно.
Смотрите. У нас на проекте я протолкнул идею - использовать MD+Mkdocs для того чтобы вести дев-документацию, потому что бегать по свагерам и смотреть че там у кого с апишками - задолбало. Плюс, всякие сервисы вообще свагера не имеют, а через год - вспомнить, че они там делают и зачем нужны - бывает сложновато. Все вроде были довольны. Настолько довольны, что решили, что теперь мы и пользовательскую документацию так же вести будем. И в приложении появилось /help который то что Mkdocs генерировал отдавал. Круто. Удобно, легко поддерживать, легко развертывать, еще и гит для доков работает. Отлично корче. И все было заебись. Пока внезапно кто-то из менеджеров не сказал, что надо PDF'ную версию делать, чтобы на странице с продуктом - можно было загрузить эту PDF'ку.
Понимаю, что вопрос не совсем шарповской тематики, но мне, как разрабу, показалось, что должно же быть что-то на шарпе, чтобы вот то что сгенерировал Mkdocs - загнать в апишку и чтобы она на выходе дала PDF со всеми стилями, отступами и всем таким.
Пока что мой гуглинг показал, что PDF - самый мерзкий формат что существует. Почти все что я нашел, денег просит(что не подходит по ряду причин, о которых лучше в политаче поговорить), либо кривое, либо под старый дотнет.
Да. У Mkdocs - есть плагин, чтобы выгрузить PDF, но он какой-то слишком замудреный и кривоватый, надо лезть в него и руками допиливать, чтобы как надо сделал и вообще.
>>2906009 Что это вообще? Если это сравнение перформанса, то непонятно, каким фигом С - не в топе. С - буквально ассемблер для людей. А значит в принципе не может быть кейса, в котором хорошо написанный на С код будет медленнее чего угодно. А тут - если судить, что меньше-лучше, выходит каким-то хуем жава впереди. Это в принципе невозможно ну никак. Так что отвечая на вопрос - потому что сравнение некорректно.
>>2906042 Так реально. Объясни, каким образом нативный код - может в принципе быть медленнее байткода, который жавамашина переводит в рантайме в машинный? Понятно, что жит - может лишние проверки убрать, чет переставить, чтобы пооптимальнее было. Но это все еще будет байткод, который в рантайме в машинный переводится. Он в принципе не может быть быстрее ОПТИМАЛЬНОГО кода, написанного нативно.
>>2906048 Да, будет байткод. Очень сложный и запутанный байткод (чего стоит один только инвокдинамик), который своей сложностью ставит крест на реализацию точной копии этого на сишке (то, что решается на джаве в две строки придётся там расписывать по каждой инструкции на несколько страниц). Именно поэтому раст и обошёл джаву, потому что в нём также происходит раскрытие короткого высокоуровнего кода в пиздец, но быстрый пиздец, но не в рантайме, как у джавы, а в компайл-тайме.
>>2906186 >идентичный код на языках идентичного назначения идентичной структуры с идентичным принципом запуска (на виртуальной машине) с идентичной типизацией >ррррряя, низя сравнивать!!! и вообще 132 миллисекунды нормально, ваши 5 мс нинужны!
>>2906193 при том сравниваются разные вещи я не ебу что это сравнение и даже гуглить не буду Но знаю что при прочих равных жава сожрет больше памяти и я охуею от того как много она жрет и да - мне придется сидеть и тюнить jvm и быть мастером в этом.
Так что не все упирается в скорость...собственно даже не знаю чего, ибо не гуглил что конкретно этот график измеряет
и да - ведь как бы скала и котлин тоже jvm - а чего ж они так, выходит жава рантайм говно что ли? Ну все понели, а кто не понел - ну пусть жрет говно.
>>2906204 >при том сравниваются разные вещи >я не ебу что это сравнение и даже гуглить не буду >Но знаю что при прочих равных жава сожрет больше памяти и я охуею от того как много она жрет >и да - мне придется сидеть и тюнить jvm и быть мастером в этом. >Так что не все упирается в скорость...собственно даже не знаю чего, ибо не гуглил что конкретно этот график измеряет >яскозал! )
>и да - ведь как бы скала и котлин тоже jvm - а чего ж они так, выходит жава рантайм говно что ли? Ну все понели, а кто не понел - ну пусть жрет говно. Петухлин не просто так по три года на каждую новую версию джавы поддержку пилит. Он анально вгрызается в работу jvm, ломая оптимизации + везде добавляет свои ухудшения производительности, как с корутинами, которые код в 10 раз замедляют. Скала просто тупо серет new Object() на каждый пук.
Только вот даже если бы не было адекватного объяснения медленности скалы и петухлина, то это бы не отменяло 5 мс в джаве и урину на ебальник обоссаного шарпопетуха с 132 мс. Это бы просто ставило интересный вопрос, как так удалось испортить производительность. Спорить с этим тестом это как если бы Ньютон после падения ему яблока на бошку заявил "а хули бог мою бошку не защитил? Должен был защитить! Значит яблоко не упало! Шах и мат, аметисты!".
>>2906278 просто тут у нас пациент из психбольницы сбежал отличается особыми признаками - труслив (поэтому притащил не ссылку, а картирнку, да такую что видео не нагуглишь), ведь иначе ему полон рот напихают - жрет говно (не жаваговно, а просто говно, просто говноед) - агрессивное - тупое
>>2906307 Перемешать результатами с видосика на Ютьюбе это сильно, конечно. Причем в котором нет инфы о том, какие где версии софта, с какими флагами собиралось/запускалось и т.д. Более объективные тесты показывают, что шарп, что java суть одна хуйня по скорости. В каких-то задачах Шарп быстрее, в каких-то жаба. Вот пример нормальных тестов. https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html
>>2906062 Чел. Блядь. Не тупи. Если это в конечном итоге будет превращено в нативный исполняемый код. То код без прослойки из байтоговна - будет работать быстрее чем код с этой прослойкой, ну хоть ты усрись. И да. Не существует такого кода, который бы нельзя было написать на сишке, потому что, блядь, еще раз - сишка это ассемблер для людей. Если сишка проигрывает хоть в одном сравнении по перформансу - значит тот кто писал код для теста - НЕ ЗНАЕТ СИ, вот и все. И не нужно тут хуйню придумывать, про хитрый байткод. Байткод - все равно будет интерпритирован в те же самые машинные инструкции. Короче. Если твой код на си медленнее чем код на джаве - ты просто хуевый программист - иди вон из профессии.
>>2906400 Что запускать то ебанат? Где указаны входные данные? Где шарповый проект с BenchmarkDotNet, который замеряет реальную производительность, а не колд паф с компиляцией jitом
>>2906396 Ну. Ок. Если для тебя сложно - валидный аргумент. Вот мне - было сложно вспомнить, как там у вас в жаве - словарь называется, чтобы мемоизацию делать.
Давай померяем и сравним код, который одну и ту же задачу решает, и удивимся, насколько же жава медленнее чем шарпы.
>>2906426 Я понимаю, что джавадебилу это тяжело осознать. Но производительность решений не замеряется циферками с сайта. Джавадебил, неужели у вас в джавапараше нет культуры бенчмаркинга? Ну это в целом объясняет ее тормознутость
>>2906441 Вытри рот от говна, джавадебил, и возвращайся с тестами, в которых указаны входные данные и предоставлены два проекта с бенчами на джаве и шарпе. Но лучше не надо, ведь мы оба знаем, что во всех кейсах жаба соснет. Как здесь https://github.com/jinyus/related_post_gen например. Джавадебил, а зачем ты в бессильной злобе срешь в тред? Просто переходи шарп и становись успешным и счастливым.
>>2906510 > На сях сложно писать нормально > Давай я напишу на шарпе нормально, на жаве - хуево, и это буду использовать как аргумент > Давай > Держи > Нахуя ты так сделал У жаводебилов стек такой маленький, что они не помнят что было буквально 20 минут назад?
>>2906515 Манюнь, отсутствие инвокдинамика и тысяч других оптимизаций, что придётся реализовывать заново на сишке и твой дебилизм и незнание структур данных в джаве это разные вещи. Мемоизация легко делается на джаве.
>>2906522 Я будто с чат-гпт говорю, ну серьезно. Еще раз. Нативный код - ВСЕГДА БУДЕТ БЫСТРЕЕ ЛЮБОГО КОДА С ПРОСЛОЙКАМИ. Если твой нативный код медленнее жавы, шарпа, питона - это значит, что у тебя руки не из того места растут. Все. Если в тесте перформанса - ассемблер или шарп проигрывают чему-то, значит тот кто писал код на этом языке - хуевый программист и ему надо идти на завод гайки крутить. Все. Блядь. И свой динамик инвок можешь засовывать прямо до гланд.
>>2906519 Я просто показал, как хуево звучит тезис про то что чет там сложно делать, если мы хотим сравнить перформанс языков. Типа блин, на ассемблере - тоже можно написать крайне хуево, настолько, что нормальный код на питоне будет быстрее. Только это говорит не о языке, а о проблемах с навыками программиста, который этот код выдал.
>>2906547 >бох бошку не защитил, значит яблоко не падало! Ты можешь сколько угодно пруфов блейзингфастовости петушарпа приводить, только суть в том, что ты так только опровергать их будешь об реальный тест.
Первое с чего стоит хрюкнуть, это с того, что джавдебил думает, что код на каком либо языке может работать МИЛЛИСЕКУНДЫ НАХУЙ над кейсом из 6 чисел. Джавадебил, ты....
Берем первый кейс и писаем на джавадебила. Вот такая вот вечерняя разминка шарпочане. Можно шлифануть SIMD'ом, хотя скорее всего жит это сам сделал на 8 дотнете.
>>2906552 Ты и сам видосом с ютуба перемогаешь вместо реальных тестов, чел.
Я свою гипотезу озвучил: в csproj сборки тестов с ютуба стоит максимум 6 дотнет. Переключи на 7 и получишь прирост производительности того же самого кода. Магия SIMD.
>>2906540 >Только это говорит не о языке, а о проблемах с навыками программиста, который этот код выдал. Мне это пояснять не нужно я всегда смотрю не скорость, а на баланс "удобство/скорость" Тот же LINQ никогда скоростью не отличался (и это известный факт) ибо упор в нем на удобство и сильно напирает на абстракцию IEnumerable.
И тут приходит жавадебич и начинает мне показывать " увас LINQ медленнее чем жава стримс (что еще спорно ибо векторизацию сделали)"
А я смотрю на него и думаю....да что я могу думать про дурачка который кроме жавы в глаза ничего не видел
>>2906567 смешно слышать это тот жависта у которого в жаве лямбды и И ПОДОБИЕ linq ввели чере хуеву тучу лет, а до этого эти дебилы орали "нинужна,энтерпрайз"
>>2906583 просто это факт у меня есть знакомые такие как долбоебы и вечно жава жава а я спрашивал "а хули у вас нет этого и того" знаешь что мне орали в ответ? "НИНУЖНА, энтерпрайз, обратная совместимость"
и теперь мамкин жавист обосратыш уверяет меня что это оказывается киллер фича лол
ты сколько языков то изучал неуч. мне просто интересно понятно что не все такие как я, что могут похвастаться больше десятка, но хотя бы 3 можешь озвучить?
>>2906603 последний раз говорю без нормального кода бенчмаркинга и набора данных можешь идти жрать говно дальше у меня код выпоняется за наносекунды те кто нашел там 112 мс пусть просто идут изучать матчасть.
>>2906618 Опять литкод в штаны шарпоблядям насрал! Да что ж такое-то! Самое главное джавистам не насрал, педалистам не насрал, растоблядям не насрал, даже жопаскриптерам не насрал, а шарпоблядям насрал!
Насколько тупым выглядит решение - все в одну таблицу с разными типами полей под разные сущности засунуть? Типа прикриплейда.
Просто суть-то в чем. Нужна древовидная структура с одной стороны, с другой - разные типы элементов этого дерева.
Конечно, можно сделать более изъебисто: Node, NodeType, NodeTypeAttrubute, NodeAttribute и вот так вот того же добиться. И вроде как правильнее будет. Но надо ли?
»2906625 Ебанат, ты программировал последний раз в дурке? Из которой ты нам и пишешь
Какие миллисекунды для массива из 6 элементов, джавадебил? Твой литкод несёт хуйню и срет тебе в штаны, маня. Бэк литкода, который эти тесты гоняет, писала такая же обезьяна как и ты.
Ладно. Раз джаву интереснее обсуждать. Решил таки изъебистым путем идти. Но вот че мне не нравится. Индексы по такой таблице будут фиговые, потому что куча значений - Null будут.
>>2906876 >еф научился с рекордами работать или нет Вся суть петушарпа. На джаве когда добавили рекорды сделали так, чтобы они превращались в обычные классы при конпеляции, и что угодно будет работать с рекордами.
>>2906901 Просто ЕФ - хочет гарантировать, что у тебя только один объект на контекст с тем же ключом существует. Рекорды - иммутабельны, потому, если ты используешь with - получаешь новый объект. В результате - ЕФу это не нравится по умолчанию. Они конечно могут либо забить на один объект на контекст, но тогда непонятно, что трекать, если человек все еще хочет чтобы изменения трекались.
>>2906986 В удобстве миграций. В трекинге изменений. В том, что у тебя не будет копий одного и того же объекта, если ты явно не захочешь этого. В том что не нужно писать кучу СКУЛЯ для тривиальных вещей на каждый чих. В том, что ты можешь тестировать код, без необходимости разворачивать под это дело реальную БД(тут с оговораками, но все равно) Сверху - тулзы для отладки, вшитые в студию. Тулзы для тестов.
Чёт проиграл с того, как шарпопетух изъёбывается, лишь бы не посмотреть правде в глаза.
>Я запускаю код, он выполняется у меня за наносекунду, а на литкоде за 132 миллисекунды. Какой из этого вывод? Нет, не я запускаю не то же, что на литкоде запускается, это яблоко не падало и литкод рандомные цифры выдаёт (или к чему он хочет подвести?)!
А еще вопрос. А то вы так часто отвечаете мне, что аж приятно. Почему вот так никто не делает? Ну, вернее я что-то не видел, чтобы вот так вот делали особо, а если кто-то так делает, то его на хабре ругают. Какие подводные камни-то, если надо админук, под разные сущности намутить, тупо с отображением таблицы и базовыми круд-операциями?
>>2906994 >>2907006 Ну мне просто очень интересно. Вот у меня опердень. В опердени есть проводки - это такие жирнющие транзакции в несколько тысяч строк кода с вызовом кучи хранимок и вручную расставленными хинтами блокировок в каждой строке. Как вы это в EF делаете? Без хинтов блокировок будет ОЧЕ МЕДЛЕННО и миллиарды дедлоков. Или EF прямо хорошо хинты сам расставляет? Это была бы технология круче чатгопоты. А ещё в этих хранимках очень много временных таблиц, мне их разумеется нельзя в память приложения забирать, клиент 100% обосрётся. На этих таблицах временных индексы часто висят, в целом типичная проводка вначале строит 5-6 временных таблиц, а потом начинает писить и какоть направо-налево в персистентные таблицы джойня их с времянками. Как такое сделать? Грузить в память такое это прямо суицид. Кроме того хотелось бы как-то реюзать код, например у меня уже есть какой-то кусок кода, который у меня будет воспроизводиться в хуевой туче похожих хранимок. Насколько я понимаю если я его в шарпе напишу, то я же опять залечу в память клиента?
Каково это вам понимать, что все ваши вскукареки про скорость петушарпа были жалким пиздежом, а джава оказалась быстрейшим языком на планете, после раста?
в общем напихиваю говна в харю жависту от души не поленился сделал бенчи (хотя я с жавой не работаю и как там бенчить пришлось гуглить) причем код измеряемого метода взял из леткода данные с потолка, но идентичны + некоторая защита от jit (который может вывести что массив не меняется и тупо захардкодить результат)
Пришлось знатно помучаться с идеа, которая в процессе наглухо умерла с непонятно чего вдруг (пик). ничего не помогло пришлось делать полный реинсталл.
В общем итог c# - 195мс говножава - 67 (если я верно понимаю выхлоп)
при этом тест на шарпе проходит очень быстро(мне влом настраивать), а на говножаве несколько минут гоняет и дает потенциальную возможность житу поработать. но не суть.
А теперь к самой конкретике
где же разница в 20 раз, а, говноед?
Почему шарп проиграл? ну LINQ никогда скоростью не отличался. Он расчитан на абстракцию IEnumerable, которая слишком широкая. Тот же Count под капотом честно обходит через foreach каждый элемент и вызывает для него предикат. То есть он не работает с ним как с массивом
В то же время в жава коде используется Arrays.stream(nums), который рождает IntStream и принимает как раз именно массив (а не абстрактный IEnumerable), а значит может применить под капотом кучу техник для оптимизации.
То есть по факту сравнение реализации для общей абстракции "что то перечислимое и у нас есть предикат (вызов которого не бесплатен" с конкретно заточенной реализацией "заранее известно что у нас а) массив б) массив интов в) фиксированного размера"
>>2907610 ну если ты долбоеб то ты и с пальца смеешься. С обосранного пальца, который ты сосешь.
А теперь по делу, то есть НАПИХИВАЕМ ГОВНОЕДАМ ГОВНО В ИХ РОТЕШНИКИ
Когда я переписал на прямую работу с массивами то получил 16мс, но это уже нечестно.
Тогда я написал свою реализацию Count (пик), то есть простую и банальную. И получил...63мс, то есть выходит ...жава обосралась со своими 67мс
Почему дефолтный Count так плохо работает? ну когда я в своем Count заменил int[] -> IEnumerable<int> то все сразу стало плохо
Так что факт - жава ЧИТЕРИТ выбирая КОНКРЕТНУЮ ПОД ИНТОВЫЙ МАССИВ реализацию
И когда я в шарпе сделал то же самое (причем примитив - просто заменил IEnumerable на int[]) - то жава ожидаемо отсосала
Ну да, LINQ слишком широко замахнулся на абстракции. в этом его недостаток, что влияет на скорость и память. Да и не для скорости его делали, а для удобства. А оптимизировать можно всегда. В общем то сила LINQ в другом - в том, чего у жавы никогда не будет, а именно LINQ Expressions
Жава же наплодила разных IntStream, DoubleStream принимающих массивы, что тоже разумно создавать оптимизированные версии чего либо, но у них свой путь - в жаве нет структур и жопа с женериками, потому у них всякие IntStream вместо Stream<int>
>>2907659 вернее это не жава читерит это ребята с леткоде зачитерили выбрав что они там выбрали Arrays.stream
(хотя может у них и выбора другого не было - я не знаю жавастримс вообще, я просто посмотрел реализацию их выбора)
конечно они даже не знают что зачитерили таким образом. Но это сравнение теплого с мягким, как 100 раз говорилось.
ну да, ребятам из мс нужно бы написать кучу узкозаточенных LINQ методов чтобы выбирался оптимизированный, а не IEnumerable. Может когда нибудь и напишу им иссуйку.
>>2907659 >LINQ Expressions Опиши в чем фича. Я прост на шарпе пишу и все хуею с решений. То у них в nested классах this нету, то null можно пропихнуть, если знак восклицания поставить. Делегаты в пайплайны не сделать нормально. Похоже я вообще не выкупаю ваш яп.
>>2907659 В шарпе, в принципе, можно не делать специальной реализации под каждый тип. Благодаря нормальным дженерикам int Count<TItem>(this TItem[] arr, Func<TItem, bool>() будет работать так же быстро, как и версия, написанная под массив конкретного типа.
Вместо компиляции функции в конректный исполняемый код происходит ее разбор и вшивание в IL дерева выражения.
Ну а дальше ты с ним можешь что то делать - сгенерить SQL например, вытянуть нужные тебе метаданные Если позволяет навык то менять и делать свои. Да и просто создавать методы на лету работая с понятным API, а не пердолясь в IL (что сложно ибо там работает стековая модель выполнения и мозг там вообще поплывет).
>>2907589 > Он расчитан на абстракцию IEnumerable, которая слишком широкая. Тот же Count под капотом честно обходит через foreach каждый элемент и вызывает для него предикат Нет, там есть оптимизация для классов, реализующих ICollection
>>2907707 >>2907713 и тем не менее, у меня 7 дотнет и, сам видишь, ничего оно само не нашло и не выбрало и не оптимизировало (хотя буду честным я не смотрел куда оно там шло под капотом, я смотрел на бенч и он хреновый - а судя по тому что цифры дефолтной реализации и моей с IEnumerable<int> примерно равны, то делаю вывод что так оно и работало.)
может добавив какой либо using оно бы подцепило другую реализацию, но 1 я не знаю какой без доп либ 2 я не считаю этот подход правильным. Да, есть либы которые имеют вот такие методы. Их добавляешь в референсы, добавляешь using и вуаля магия. Но кто этим будет заниматься.
>оптимизация ... реализующих ICollection небось это знание Count и не более.
>>2907713 Есть. Но опять же, ICollection тоже абстракция. С ней все так же никак не избежать виртуальных вызовов, которые катастрофически медленнее, чем прямое обращение к элементу массива по индексу.
>>2907717 >> небось это знание Count и не более. Знание count + использование индексатора для получения элемента. Но это, опять же, все те же виртуальные вызовы.
Я правильно понял, что для того, чтобы получить сходную с джавой производительность надо велосипедить свой аналог комбинации filter + count (и так для комбинаций, например, map, filter, count, map, filter, findFirst и т.д.), а в джаве всё нормально работает без таких выебонов без коробки, и шарподебил называет это читерством? Я всё правильно понял?
>>2907589 >при этом тест на шарпе проходит очень быстро(мне влом настраивать), а на говножаве несколько минут гоняет и дает потенциальную возможность житу поработать. но не суть. Сделай нормальные тесты. Че это за говно? Массив достаточно большой хуйни, с цифрами рандомными+-, цикл убери, чтобы тестрировалось именно один прогон, а не сотни. И нормально настрой шарповый тест, хули он один раз пробегает, а не сумму среднюю считает.
>>2907722 жава уже проиграла, успокойся. Тебе нужно - ты и переписывай, я жаву трогать лишний раз не хочу.
Даже изначальная разница показала что леткодовцы сделали тесты через жопу раз у них там в 20 раз разница, то есть тупо позволили джиту поработать и выбросить часть кода.
>>2907727 ну чет не использует. А может и использует и проблема все равно именно в тех же виртуальных вызовах. в общем вот
| Method | Mean | Error | StdDev | |------------ |----------:|---------:|---------:| | StupidTest | 192.31 ms | 0.640 ms | 0.534 ms | | StupidTest2 | 64.92 ms | 0.272 ms | 0.227 ms |
>>2907731 Технически да. Если для тебя это окажется узким местом (что сильно вряд ли на фоне остального) и захочется оптимизировать то можно подключить конкретные реализации а так да - имеем не самую оптимизированную реализацию LINQ
>>2907736 сам делай что хочешь. мне влом Я и так сделал больше чем нужно - доказал что шарп побыстрее жавы будет в той же задаче если убрать разницу в подходе
и с рэндомом бенчи сами по себе идиотизм. Бенчи должны быть идентичными. И нет причин делать массивы большими, это ничего не изменит.
мне некогда всей этой херней заниматься. я и так знаю что жава говно. Мой выбор - шарп и котлин
>>2907745 >жава уже проиграла, успокойся. — послышалось после 10 минутного ожидания написания шаблонного кода под нужную комбинацию операций над потоком данных
>>2907745 >Я и так сделал больше чем нужно - доказал что шарп побыстрее жавы будет в той же задаче если убрать разницу в подходе >написал огромный кусок кода, который подходит только для одной комбинации операций над одним типом данных >сравнил это с двумя строчками на джаве >НИТ РАЗНИЦЫ В ПАДХОДЕ ЯСКОЗАЛ!
>и с рэндомом бенчи сами по себе идиотизм. >Бенчи должны быть идентичными. Кто-то там кукарекал про культуру бенчмаркинга. И ведь опять отработала вторая теорема шарпана, и шарпоблядь оказалась не знакомой со законом больших чисел.
>И нет причин делать массивы большими, это ничего не изменит. >яскозал!
прошло 10 минут и 132 миллисекунды
>мне некогда всей этой херней заниматься. я и так знаю что жава говно. Мой выбор - шарп и котлин
>>2907748 да никто этим не занимается разница в несчастные 3 раза из за общего решения, в котором обычные виртуальные вызовы на частной задаче Да в любом коде таких вызовов миллионы. Ну родили для массивов в жаве конкретные реализации - ну молодцы. Где то сделали лучше и что? это никак не спасет от убожества жавы и ее рантайма.
Может и майки когда то сделают дефолтные такие для частных случаев. Ну заметит кто то что у него стало работать на пару наносекунд быстрее, а скорее всего не заметит вовсе.
>>2907759 Слив принят, 132-миллисекундный. Иди дальше пиши замену всем операциям своего аналога стримов, а я буду в две строчки получать производительность в 20 раз выше.
Да, это работает медленнее, так как для каждого типа коллекции нет отдельной, оптимальной, реализации для каждого операции, но зато, при добавлении новой операции над стримом тебе не придется добавлять метод для нее в этот интерфейс, а следовательно а каждую его реализацию. Достаточно просто написать один метод-расширение для IEnumerable. По итогу, джавовский подход быстрей, а шарповый сильно гибче. Джавистам теперь придется долго жить с этими 30 операциями над стримами, так как добавление новой в интерфейс будет ломать обратную совместимость. Шарпанам же уже из коробки доступно около 200 операций над IEnumerable и нет ничего (кроме здравого смысла), что ограничивало бы добавление новых.
>>2907823 Додик, как же ты серешь. Альтернатива АйЕнумерабля в джаве это Iterable. И, внезапно, его можно легко перевести в поток данных, как твой АйГиперкомпенсируюЕнумерабля. Только в джаве, почему-то, никто не платит за это, при этом пользуясь всеми преимуществами абстракции, а в петушарпе почему-то это оправдание его тормознутости. Иди жопу мой.
>>2907871 Ты считаешь, что если в интерфейс, который ты реализуешь, кто-то в новой версии добавит новый метод, то совместимость не пострадает? Или тебе таки придется этот метод реализовать, чтобы все на новой версии собралось? Я про это. Или в Java-мире не принято реализовывать стандартные интерфейсы, чтобы интегрировать свои классы с существующим библиотечным кодом? А стрим-таки быстрее шарпового ienumerable за счёт того, что в его интерфейсе больше методов-операций над стримом, которые можно сделать более оптимизированными (да хоть тот же метод из Collection в них дернуть). В шарповом интерфейсе же тупо один метод, который должен возвращать итератор. Все. А в итераторе максимум, что можно оптимизировать, так это перебор элементов. Зато благодаря такой простоте интерфейса, его легче реализовывать. И операции легче добавлять. Причем, их легче добавлять не только авторам языка, но и разрабам-пользователям. Я могу спокойно написать метод-расширение, который будет работать с любой реализацией интерфейса, и легко и красиво использовать его в цепочке вызовов для стрима, улучшая читаемость кода.
>>2907956 >Ты считаешь, что если в интерфейс, который ты реализуешь, кто-то в новой версии добавит новый метод, то совместимость не пострадает? Доброе утро. В джаве так уже лет 20 делают. Дегенерат.
Есть же реализации в которые вбиты вот такие "если массив, то работаем с ним", подключаешь либу, вписываешь using и компилятор подключает более конкретную реализацию
Почему этого нет в стандартной библиотеке? видимо считают что и так скорости достаточно. ведь так нужно на каждый тип по реализации, да еще куча операций - вот и не доходят руки, заняты "давайте уберем main"
>>2907956 стрим быстрее только для массивов где жава знает что это массив и юзает напрямую, а шарп все равно работает через ICollection. Если же данные не массив,а последовательность то читерить не выйдет, но жавист об этом умалчивает ибо послан нахуй.
Оптимизации, которые с лопаты скормили шарпочмоням — это оптимизации и мы с ними идём в джаватред срать. Оптимизации, которых в нашем говне нету — это читерство и вообще а что так можно было что ли?
У меня есть метод, который возвращает какой-то рандомный результат, но мне понадобилось обеспечить его воспроизводимость. Я решил эту проблему так - создал доп класс, который хранит необходимые данные для воспроизведения результата, и два метода, один принимает аргумент out с этим типом, и генерирует случайный результат, записывая в out объект нужную инфу, другой собственно принимает этот объект и на его основе выдает результат. Нормальная идея, или хуйня?
>>2908543 Нормальная хуйня. Но я бы подумал над реализацией с участием делегатов и замыканий. Гораздо же прикольнее когда код за тебя компилятор генерит.
Почему на шарпе околосистемщину не пишут, те же базы данных например? На джеве Neo4j и Cassandra есть, шарп вроде как похож на джаву плюс сахарок всякий удобный есть, но ничего такого не видно
>>2908813 Потому что пишут. Просто это все местячковая хуйня. Ну и плюс - управляемый код - всегда медленнее аналогичного натива. Майки вот пытались полностью управляемую ОС нахуярить. В результате - решили, что нахуй надо.
Почему шарпобляди ноют на тяжёлую идею, когда у самих среда разработки весит, на минуточку, 60 гигабайт (при 600 мб у идеи)? Опять вторая теорема шарпана?
>>2908922 >среда разработки весит, на минуточку, 60 гигабайт Ты ёбу дал, жабадебил? VS Code 600MB Android Studio 1.75GB Это при том, что в первой можно для всего подряд код писать, а во второй только для андроида. А теперь съеби в свой убогий тред.
>>2909057 Забей, у него всё что на джаве написано медленная и нинужная хуита, его даже разница в скорости джавы с петушарпом в 26 раз не пробила. Необучаемая порода, таких только пуля в лоб вылечит.
>>2909073 >переписал заново функцию из linq под свою конкретную задачу >сравнил это с двумя строчками джавы, работающими из коробки >ДЖАВА ОБОСРАЛАСЬ! А ЕЩЁ ДЖАВА ЧЕТИРИТ! )
>ДЖАВА ВЫЕБАЛА ПЕТУШАРП НЕ НА ШИШКУ, А НА ПОЛШИШЕЧКИ! ПЕРЕМОГА!!!
Самое главное, что этот обделённый слился, когда его попросили тестировать не массив из 10 элементов, а из большего количества (как изначально было на литкоде), и что вы думаете, он слился. Потому что если протестировать не скорость invokevirtual, а скорость работы всех элементов обработчика потока данных, то полшишечки превратятся в 10 шишек.
>>2909062 >Забей, у него всё что на джаве написано медленная и нинужная хуита, его даже разница в скорости джавы с петушарпом в 26 раз не пробила. Необучаемая порода, таких только пуля в лоб вылечит. Да вы заебали, как попугаи повторяете хуйню про 26 раз. Это не сравнение джавы и шарпа, а сравнение виртуалок литкода для джавы и для шарпа плюс методов измерения времени выполнения. Нам совершенно неизвестно, что там под капотом, поэтому делать какие-то выводы из этого вообще нельзя.
Бенчмарки должны выполняться в одинаковых условиях, причём не просто на одном железе, а ещё и желательно на одной ОС.
Я знаю, ты мне на это ответишь, что у меня бугурт, и что я порвался, потому что аргументов у тебя нет.
>>2909046 Потому что все есть. Просто так же - нахуй никому не надо. На шарпе, вон, был охуенный проект для работы с USB-стиками. Попенсорс, все дела. Ну, и чела просто заебало, что он пишет, китайцы - берут его код, тащат себе, закрывают, и только и делают, что срут ишью. А майкам - не уперся проект. Чела заебало за просто так делать - забил. Была охуеннейшая Нэнси(не околосистемный уровень, но топовая хуйня), которую в эмбеддед даже некоторые тащили, за легкость и удобство. Нахуй никому не упала среди крупных игроков эта Ненси, оно и померло. БД -так же делатся. Нахуй никому не нужны, по причинам - что это велосипед от хуй пойми кого. Есть нанофреймворк - куда уж системнее-то? Нахуй никому не нужен, людям проще с ардуино разобраться и им пользоваться. Потому что там считай свой шарп, свой набор стандартных либ и вообще - отъедать половину памяти ПЗУ под рантайм - такое.
>>2909115 >Я знаю, ты мне на это ответишь, что у меня бугурт, и что я порвался, потому что аргументов у тебя нет. Своё поведение проецируешь?
Вон выше шарпоблядун делал бенчмарки. На маленьких массивах, с разным временем прогона, неизвестно ещё, загружал ли он ПК дополнительно в момент тестирования джавы (например, сидением на сосаче), и вместе со всем этим... получил обоссывание джавой ебала петушарпа с разницей в 3 раза, и, ВНЕЗАПНО, объявил это великой перемогой, заявив, что джава слабо ебёт. Достичь уровня джавы удалось ему только через несколько часов пыженья и переписав заново (!) тестируемую функцию linq.
>>2909031 >>прокаченный блокнот >>по весу как полноценная IDE >) Десяток плагинов, и по функционалу vs code начинает превосходить ту же android studio, так что не надо тут про блокнот.
>>2909139 Я не понимаю, как шарподауны могут на полном серьёзе гордиться, что их выебали всего на полшишечки. Особенно когда эти полшишечки в наиудобнейших для них условиях, а требования провести нормальный тест, хотя бы на больших массивах, они игнорируют.
>>2909147 Ты какой-то странный. Когда vs code меньше весит, чем android studio, ты только выиграл, а когда vs больше, чем idea, ты опять только выиграл.
>>2909157 А что ты от меня хочешь? Я не знаю, как производительность жабы замерять, я последний раз проект на жабе запускал под виндой 15 лет назад в универе.
Тред не хочу читать, но вы запарили кормить обосранного и обоссаного много раз жавадебила с куском говна в руке, которое он облизывает не переставая
Примите и успокойтесь 1 леткодовцы обосрались со своими тестами получив разницу в 20 раз ибо тупо дали сожрать jit кусок кода. Разница всего в 3 раза за счет работы с итератором, а не напрямую массивом 2 Да, майки не сделали оптимизацию под массив. Для него "все есть список" (хотя в принципе и могли ибо они столько выкатывают для хайперфа, а про старое забыли) поэтому разница 3 раза на массивах и есть.
Велика ли эта разница? кому велика берет один из фастлинков и прописывает его юсинг (благо теперь есть глобалюсинг). Остальным же насрать - ибо этих виртуальных вызовов через интерфейс в обычном коде миллионы, а заниматься преждевременной оптимизацией зло
в ГОНОВОБОСРАННОЙжаве ура ура сделали оптимизацию для массивов. ну молодцы че. А вот гет сет делается через сторонний проект лобок. таков путь жавы как говна
Кому парит - запилите иссуйку на этот тред и спросите "доколе в стандартной имплементации не будет оптмизации под массивы" и может появится.
>>2909172 Это ты хочешь доказать, что там будет больше разница, вот ты и доказывай. А я утверждаю, что это синтетическая хуйня, потому что в реальной жизни с массивами целых чисел, тем более с огромными, ни в джаве, нив шарпе работать не приходится.
>>2909182 Я не говорю, что будет больше. Я говорю, что тест невалиден, так как в литкоде засовывались большие массивы (это прямо написано в constraits), а шарподебил тестировал на массиве в 10 элементов и даже так умудрился отсосать в 3 раза.
>>2909187 >VS функционала куда больше Чел не надо. Ты совершаешь ошибку, не лезь блять на идею. Ни один обсосанный копилот и прочие поделки рядом даже не стояли с ее возможностями.
>>2909207 Какие нахуй возможности? Идея даже собрать проект под ант не в состоянии без пердолинга, даже если все для сборки установлено. Половину GoToDefinition не работают на древних проектах и вообще. Для сравнения - студия, спокойно обновляет проект с 3,5 до последнего 4,8, тебе остается только то что деприкейтнуло было исправитьна более свежие аналоги.
>>2909215 >Идея даже собрать проект под ант не в состоянии без пердолинга, даже если все для сборки установлено. Блядь, ты хоть сам-то понял, что высрал?
>Половину GoToDefinition не работают на древних проектах и вообще. Всё прекрасно работает. Если у тебя что-то не работает то проблема в твоих клешнях, а не в идее.
>>2909215 >Идея даже собрать проект под ант не в состоянии без пердолинга Это ты тот шиз, что в тред залетал? Пользуйся мавеном, какой ант нахуй? Ты еще скажи, что а чому кобол не робит. >Половину GoToDefinition не работают Ты бы хоть показал на каких не робят. > с 3,5 до последнего 4,8, Че? >пик О, наконец шарписты догадались этот сайт принести. Судя по нему, гц жабы ебет. Также как и строки.
>>2909229 >Пользуйся мавеном, какой ант нахуй? Тут даже дело не в том, что ант это легаси, а в том, что идея никакого отношения к сборке не имеет и не должна иметь, так как система сборки на то и система сборки, чтобы быть независимой от окружения и сред разработки. Дегенерат похоже даже не знает, что собирать можно и через консольку.
>>2909240 Твои тесты доказали только то, что ты измерял не то же самое, что литкод. Высер про jit это твои маняфантазии. Претензии к качеству теста тоже были выше, будь добр поискать, хотя-бы в своей голове, потому что ты их уже видел, но ответил "ничивонипаминяитсяяскозал!".
>>2909225 > Кому парит - запилите иссуйку на этот тред и спросите "доколе в стандартной имплементации не будет оптмизации под массивы" и может появится. Я про свой реальный опыт использование идеи говорю. Вот, древний проект. Начали его еще в 2003м году. В 2016м(или 18м уже не помню) ушел последний чел, что занимался. Последние версии - писались в нетбинсе. Система сборки - ant Все что надо для сборки - есть на рабочей машине. Возникла задача по этому проекту. Жавистов нет, но шарп же почти жава. Кто смелый - го. Идея - просто не хочет собирать, еще и половину внешних зависимостей красным подчеркивает. Нетбинс - хотя бы собрал. Короче. Мой опыт - идея хрень, нетбинс - заебумба.
>>2909229 Да, это я залетал. И у меня не было времени, чтобы учиться вашим мавеном пользоваться. > Ты бы хоть показал на каких не робят Как я покажу закрытый код-то? Все под NDA. Я как-то запостил на дваче сниппет с рабочего проекта - так мне потом безопасник месяц мозги ебал, что я нарушаю NDA, что пиздец, сядешь, и я с тобой, что не углядел. Короче, нахуй и в пизду эту хуйню.
>>2909234 Я-то знаю, что собирать можно через консольку. Только меня вот тута убеждали, что ставишь идею, и все само собой, нихуя делать не надо, все скачает и вообще - это прям пиздец какая крутая иде, житбрейнсы какие молодцы. А в результате? А в результате - хрень какая-то, еще и всратая.
>>2909244 Для того, чтобы сказать, что виновата идея, ты должен
А) Успешно собрать через консоль Б) Показать, что этот же загруженный проект в идее с её правильными настройками (т.е. те же данные, что введены были в консоли, должны быть введены и в идею).
Если у тебя через консоль не собирается — виновата точно не идея (либо проект кривой, либо нетбинс как-то анально билдил так, что не понятно, как без него собрать). Если через консоль собирается, но в идею введено не всё из команды, которой собирал — виноваты твои клешни.
>>2909254 Почему я должен этой анальной эквилибристикой заниматься? Я похож на пердоликса? Я шарп-то выбрал в свое время, потому что можно из панельки инструментов было на форму кнопочки перетаскивать и получить графическое приложение с кнопочками, окошками, табличками...
>>2909265 >Почему я должен этой анальной эквилибристикой заниматься? Потому что ты хочешь доказать, что виновата идея. И это никакого отношения к джаве не имеет, это то, что нужно сделать для строгого доказательства.
Джавадебил, ты тут? Джавадебил, расскажи мне почему у твоего обоссанного литкода котлин отрабатывает за 228 миллисекунд, а у меня за 300 МИКРОСЕКУНД?
И это еще не нормальный замер через бенч либу с прогревом жита, а рабоче крестьянский. Но мне лень заморачиваться потому что система сборки и менеджмент либ в вашем джавадебильном мире это просто пиздец.
>>2909270 Ну а кто тогда виноват, если эксперимент буквально: Беру и вытягиваю проект из SVN в папочку. Открываю идеей, она говорит - заебумба, я все поняла, сейчас скачаю это-это-это, пожди. Жду. Чет качает. Потом - все красное и не собирается. Беру и вытягиваю заново проект в другую папочку. Открываю нетбинсом. Он чет думает какое-то время. Потом - все работает. По мне не надо плодить сущности.
>>2909274 Долбоебина, у меня в массиве 2000 упорядоченных чисел, с границами от -2000 до 2000. Это то что пихает в методы твой обоссаный литкод и твой обоссанный дурачок с ютуба с которым ты прибежал.
Я тебя, обезьяна, еще раз спрашиваю, какие могут быть МИЛЛИСЕКУНДЫ на таком объеме?
То есть если негативных больше - возвращаешь число негативных
У долбаеба в видео, с которым прибежал джавадебил, график построен на основе высера литкода, лол.
Я уже второй день ору, что существуют такие макаки. Причем у него в профиле гитхаба https://github.com/codereport указано что он работает Research Scientist в НВИДИИ.
>>2909324 >Во-первых не отменяет ничего из сказанного мной.
Может. Ты должен доказать, что ковырялся пальцами в жопе он, а не ты, проведя нормальные тесты. Иначе это высер и яскозал. Почему твои тесты ненормальные уже было сказано, до сих пор не предоставил нормальные сравнения джавы и петушарпа, зато на котлине и плюсах всё сделал, ведь за победу плюсов над петухлином не так страшно, да?
>>2909319 Как бороться с набуханием в штанах, когда я вижу плюсовый код? Это же не нормально. У меня есть няшный шарпик. Иногда - задачки по JS. Но стоит подумать о плюсах, как в штанах набухает, сразу воспоминание о вузе, и о том, как плюсы - ебали меня жестко без смазки, а на попытки понять что не так - иди нахуй, дебил. Ух. Бля. Самые сильные эмоции от кодинга - это ебля с плюсами. Как же мне этого почему-то не хватает.
А может пошел ты нахуй, дурачок со своей джавапарашей и со своим литкодом из треда?
Там всего три условия, обмудок. Если твой помойный литкод даже не может показать КАКИЕ данные он прогоняет и СКОЛЬКО РАЗ, то рожала его такая же тупорылая макака, как и тебя.
Все, попущен с четкими и твердыми цифрами, свободен.
>>2909327 я доказал. я проверил LINQ и Stream со своими данными (дополнительно защита от jit) и увидел разницу лишь в 3 раза, а не в 20. И я ни код ни данные ни результат не прятал как леткоде На картинках все видно Можешь изменить данные так чтобы разница стала в 20 (и не виноват был jit) - вперед. Иначе ты говноед без пруфоф который может только орать "ви все вретте, жава говно но вкусное"
>>2909343 где они не соответствуют? пруфы в студию?
впрочем даже если бы там был чистый рэндом - я говорю про ОТНОСИТЕЛЬНОЕ время итоговое время было бы другое, но отношение сохранилось бы. и оно было не в 20 раз лол.
>>2909340 >ви все вретте, жава говно но вкусное Так это же буквально ты. Получил результат джавы в 3 раза быстрее, но оправдываешь это какой-то абстракцией (которая и на джаве есть и производительности не мешает, но это тактично проигнорим).
>>2909346 >и оно было не в 20 раз лол Так надо было, чтобы джит пробежался и векторные инструкции вставил. Или вообще вырезал все циклы. Че ты как этот. Если в шарпе нет жита, это не повод говорить, аррррря читы
>>2909350 А ещё тут видно, кстати, что я с первого раза не заметил, совершенное незнание шарподауном основ бенчмаркинга и принципа blackhole и лишний += умноженный на миллион. Без него результаты бы совсем неинтересные получились для шарподебила.
>>2909348 >которая и на джаве есть как понять что жавист пиздит? он открыл рот НЕТ НЕТУ. в этом примере жава работает именно с int[], без асбтракций когда я сделал то же самое для шарпа - заставил работать с int[] - жава пук пук
>>2909357 откуда мне знать как в вашем говне делается бенч. я же сказал - я просто загуглил. но += ни на что не влияет дядя. он есть и там и там а консуме просто не позволяет сожрать житу измени код - я поменяю такое же на шарпе и ты снова обосрешься.
>>2909362 Не надо подменять тезисы. Ты говорил про пользу этой абстракции для разработчиков. Разработчики легко могут пользоваться интерфейсом Iterable и им не мешает какая-то конкретная реализация Arrays.stream().
А в шарпе как всегда смешали мух с котлетами и от абстракции-аналога Iterable страдает перевод массивов в поток данных. Чувствуется невидимая рука индусов, вспоминается как на шинде отваливается авторизация при попытке удалить библиотеку отвечающую за всплывающее после alt+shift окошко.
>>2909367 Тут в принципе только одно оправдание этого было, и оно было через абстракцию. Этого достаточно, но — примечательно — от человека со стилем письма крайне похожим на твой.
1. Пишем тоже самое на шарпе (для задачи можно на самом деле считерить и юзать на плюсах только lower_bound, о чем дурачок из НВИДИА видимо не знал, ну а хуле ему ученому)
2. Прогоняем бенч
3. Орем с 20 наносекунд и джавадебила
да, мне абсолютно нехуй делать на выходных, шарпаны
>>2909375 Ну так высри своё оправдание, раз уж не согласен с тем, что твоё альтер-эго вчера высирало про читы и абсракцию. И будь добр не игнорь вот это >>2909350.
>>2909379 я ответил на это говнодебил>>2909362 (часть 2) я жду от тебя кода на жаве с правильными блэкхолами. я сделаю такой же на шарпе и мы измерим и ты пожрешь говна.
>>2909386 что тебе не нравится в 16 элементах говножуй? я могу взять оригинальный массив с леткоде, но он слишком маленький поэтому я его нарастил в 2 раза.
>>2909390 изначально там его не было - и НИ НА ЧТО НЕ ВЛИЯЕТ >>2909391 я взял массив с леткоде и даже увеличил. к ним все претензии. они пальцем в жопе ковыряют.
>>2909392 Нет, джавадебил, мне просто легче было держать файлик с числами на рабочем столе. Расслабься, джавадебил, я все равно не смогу замерить джаву, после котлина мне уже больно от вашей уебищной системы сборки и менеджмента пакетов.
>>2909396 Уёбищные только твои клешни. Система сборки на джаве лучшая среди всех других языков (если ты конечно решил собирать мавеном, а не дегенерадлом).
>>2909397 меньше пустых слов выдай массив выдай код на жаве я измерю и жаву и шарп на одной машине и даже не буду в этот момент писать какой ты говножуй.
>>2909405 > Пользуйся только моей любимой системой сборки, тогда все будет классно!
Джавадебил, мне чтобы прогнать собрать любой современный дотнет проект требуется только выполнить dotnet build. А в вашем чудесном джавадебильном мире начинается виляние жопой для миллиарда одинаково уебщиных систем сборки, по итогу нихуя все равно не соберется.
Здесь самое смешное, джавадебил, что ты уже сам срешь бенчмарками шарпа, разобравшись с ними за пару минут ладно за пару часов, ведь ты обезьяна - это очередное доказательство дружелюбности няшного шарпика и инфраструктуры.
>>2909413 >А в вашем чудесном джава мире maven clean install.
>Здесь самое смешное, джавадебил, что ты уже сам срешь бенчмарками шарпа, разобравшись с ними за пару минут ладно за пару часов, ведь ты обезьяна - это очередное доказательство дружелюбности няшного шарпика и инфраструктуры. Лечись, шиз. Я как-то попытался один раз установить среду разработки для шарпоговна (как раз чтобы написать бенчмарк, но это было не сейчас, а где-то месяц назад), так охуел с 60 гигабайт и больше не притрагивался к этому.
И что самое главное шарподебил не зря упомянул про "современный" дотнет проект. Наверняка там такие же проблемы с обратной совместимостью, что и в джаве с дегенерадлом, и нужно ебаться с конкретными версиями системы сборки и потом видеть build failed. С мавеном ты один раз скачиваешь 15 мегабайт и ВСЁ. На следующие 10-15 лет ты забываешь про проблемы сборки.
>>2909424 и сколько раз в цикле это повторять? Без цикла оно будет мгновенным. ладно сделаю 1000 хотя я противник использования стат массивов как поле класса.
>>2909433 Один раз. JMH позволяет не пользоваться циклами и измерять хоть наносекунды. JMH сам будет это гонять в течении нескольких минут, чтобы имитировать реальную работу.
>>2909436 Я установил вижлу — увидел хуй. Непонятно, как создать проект и куда что писать. На джаве есть жирная кнопка "СОЗДАТЬ ПРОЕКТ" и когда её нажимаешь, то создаётся проект с Hello World и можно поменять код и писать что-то своё. То же самое было когда я пробовал плюсы в плюсовой иде. А на вижле что нашёл это предложение ставить какие-то модули по 5 гигабайт. Я загуглил, сколько вообще надо такого качать и мне выдало 60 гигов в гугле. Ну я и закрыл нахуй это ебаторию.
Напоминаю что большинство анончиков категорически против регулирования срачей в языковых тредах, поэтому шарпо/джаво/расто/джиэс/одинэс и.т.п. петухи, мухи, тараканы, дебилы, долобёбы и.т.п. никак не регулируются. Отстаивайте свою точку зрения в рамках общих правил и берегите нервы, они вам ещё понадобятся на дейлике.
Джавадебил, давай сразимся как мужчины, заливай проект с бенчмарком этой задачи на джавапараше куда-нибудь. Я записываю видос с прогонов бенча шарпа и джавы. С одинаковым кодом и одниаковыми идиомами?
>>2909472 Опрос несколько раз вбрасывался в МВП-тред и висел в шапках языковых тредов. Вроде в шапке МВП тоже висел. Всем поебать. Кому не поебать те против. Не нашлось ни одного человека за.
>>2909437 когда массив не изменяется, да еще стат поле джит может доказать что массив не изменяется и тогда вместо реального вычисления захардкодит результат.
Я с вас хуею. Развели какое-то говно на 300_ постов. И что одна сторона дегенераты, что другая. Один не может принять очевидную, блять, всем истину, что LINQ медленное говно на итераторах, за использование которого в действительно критичных к производительности участках кода на код-ревью в нормальных командах просто обоссут. Второй же пришёл в тред просто срать и набрасывать дерьмо на вентилятор. Если бы хотел что-то более-менее конструктивно обсудить, то принёс бы сразу ссылку на репозиторий с исходниками бенчей, чтобы достопочтенные аноны сами всё запустить и во всем убедиться.
P.S. Ещё более комичным этот срач делает то, что о производительности спорят адепты двух языков, в которых большинство разрабов в своих энтерпрайзных болотцах с проблемой недостаточной производительности кода, скорее всего, никогда не столкнутся, так как их код большую часть времени тупо ждет ответа от БД/других сервисов. А если и столкнутся, то бизнес скажет забить и просто оплатит дополнительные ресурсы, так как новые фичи нужны были ещё вчера.
>>2909450 >>2909467 >>2909469 Опрос говно. На самом деле все языкосрачи нужно вынести в отдельный закрепленный бесконечный тред (как в свое время сделали в gd с их "юнитидебилы vs все_остальные_дебилы" темой), а в остальных тредах банить за срачи. Причем в первую очередь тех, кто ведется и начинает отвечать на заведомо разжигающие посты.
>>2909488 А циклы-то как улучшат ситуацию? JMH, вроде, контроллирует JIT, чтобы ненужные оптимизации не производил, по крайней мере по моему опыту можно просто в @Setup написать генерацию и пользоваться этим.
>>2909506 Или можно ещё сделать второй тест, в котором сразу будет возвращаться захардкоженное значение, чтобы удостовериться, что jit ничего не переоптимизировал.
>>2909510 >в @Setup написать генерацию и пользоваться этим.
А вот этим кодом я генерировал массив
Random random = new Random(); List<Integer> list = new ArrayList<>(2000); int current = -2000; for (int i = 0; i < 2000; i++) { current = current + random.nextInt(0, 5); if (current >= 2000) break; list.add(current); } System.out.printf("new int[] {"+String.join(", ", list.stream().map(int_ -> Integer.toString(int_)).toList())+"}");
>>2909517 Да я таким же шарповым генерил, маня. Вопрос в том что он одинаковый должен быть для жавы и шарпа, поэтому читаем из файла. Ладно жди, почекаю как прочитать регуляркой
>>2909446 > Непонятно, как создать проект и куда что писать Серьезно? Давайте тредом поможем найти кнопку создать проект. > На джаве есть жирная кнопка "СОЗДАТЬ ПРОЕКТ" Действительно, жалко что в студии такой нет. Какая беда...
Микросекунда - это единица измерения времени, равная 0,000001 (одной миллионной) доле секунды (10 - 6) или 0,001 (одной тысячной) миллисекунды. Сокращенное русское обозначение: мкс, международное: µs. Слово «микросекунда» состоит из двух смысловых частей: «микро» - в переводе с древнегреческого языка означает «маленький» и «секунда» (сокращение словосочетания «pars minuta secunda») - «часть мелкая вторая» (часа).
>>2909545 Это дефолтная студия 2022, единственное я решарпер накатил. Я даже настройки не открывал, т.к. на этом компьютере 99% времени в 2012 студии сижу. Для 2022 студии у меня другой компьютер.
>>2909552 >>2909552 А для меня идея убого выглядит. Это вопрос привычки исключительно, я 2008 студию застал уже на работе, 2005 когда учился использовал. Мне все другие IDE кажутся до жути кривыми, тупыми и неудобными.
>>2909562 Ну если ты галочку "Разработка на C#" когда студию ставил, то сорямба, я олигофренопедагогикой бесплатно не занимаюсь, попробуй читать что в окнах написано. >>2909567 К сожалению все IDE после 2008 студии пиздец уродливые. Уже 2010 была блевотной, дальше было только хуже. Идея была рождена хуёвой. Я если что много какими IDE пользуюсь, т.к. халтуры гоняю и на жабе, и на плюсах, и в принципе на чём попросят, и датагрипом пользуюсь когда васянку приходится пилить. Идея просто меньшее из зол, у джавадебилов все IDE даунские. Подписка на все продукты жидбрейнс у меня очень древняя, с 2017 до окончания работы жидбрейнс в России им платил. >>2909572 > Даже с этой парашей? А смысл? Косячен сам design language жидбрейнсов, там в общем лечить особо нечего, надо выкидывать и заново делать.
>>2909591 >с 2017 до окончания работы жидбрейнс в России им платил А вообще пользуюсь очень давно, сколько пиратил уже не помню. В 2012 купил первую легальную на распродаже в честь конца света.
>>2909585 есть конечно. только мне некогда долго это гуглить короче, я заебался разбираться в незнакомой мне теме. как по мне идентичный код хоть и время выполнения в разы
жава - 1,967 микросекунды после 5 минут страданий шарп - 6,9 микросекунд после 13 секунд тестов.
исследование выяснило, что основное время жрет предикат (ну то есть вызов через делегат). жава отлично его встроила (если не вовсе выбросила), без делегата время шарпа 2.4 микросекунды
так что тут если я ничего не накосячил (а это легко), жава победила однако мы помним что любим шарп не за скорость, а уж за что обсираем жаву - напоминать не нужно.
ну и то что это битва джитов, ведь почему не встроился делегат как прямой вызов со временем? хз, может этого времени не хватило, ну сколько там было тех вызовов.
>>2909608 Я не знаю что это такое даже. >>2909609 Ну тогда скорее всего не догадался в поиск ввести название языка. В любом случае никаких проблем со студией нет, она и гораздо быстрее идеи, и гораздо удобнее. Говорю как человек который пердолится с обеими IDE уже больше десяти лет.
>>2909613 >однако мы помним что любим шарп не за скорость, а уж за что обсираем жаву - напоминать не нужно. Да вас уже во всём обоссали, осталось последнее "джава зато медленная!", и это обоссано было.
>>2909613 В среднем ультрасовременная джава лоб в лоб у меня на 30% быстрее ультрасовременного шарпа на корректных тестах при одинаковом коде (плюс-минус синтаксис). Хуй знает почему так. Толку от этого особого нет, стоит столкнуться со вводом-выводом как начинается джаваотсос и она делает изо всех сил вид что не тормозит, при этом шарп отлично переживает асинхронную параллельную грязь на шестидесятичетырёхпоточном процессоре. >>2909622 Не охота воображение включать. У меня вообще нет ни одной программы с риббонами кроме офиса. Офис кстати майковский охуенный, очень советую, куда лучше остальной дрисни.
>>2909631 >Да вас уже во всём обоссали Ты штаны забыл снять когда писил, джава это архаичная тупая дрисня, можно на си писать, тоже очень быстро будут даунские программы в виде laba1 работать. Или на голованге.
>>2909637 Он, вероятно, вообще не параллелил джава код, потому что асинк/авейт имеет огромный оверхед (в котлине вон там до x10 от обычного кода код с корутинами выполняется), и выигрывает только в сравнении с вообще нераспаралелленным кодом. Даже не на виртуальных потоках джава бы победила, если бы код был параллельным.
>>2909631 язык это не только рантайм. это и синтаксис и потребляемая память. В жаве с первым жопа - решает сторонний проект лобок, (да и не все решает. как он решает вопросы корутин (асинк/авайт))? а никак. со вторым ПОЛНАЯ жопа в принципе. Продукты на жаве требуют дохуища памяти.
тот же котлин обладает в разы лучшим синтаксимом и работает на том же jvm кстати. И там лобки никакие не нужны и корутины из коробки. на андроиде жаву задвинул в полную жопу. целую жаву. и никакие лобки не спасли
питон вон вообще медленный но чет вытеснил жаву из многих сфер. подумай почему.
смекаешь? почему в жаве до сих пор свойства пишут всякие лобки, а не родные средства жавы? разрабы жавы вас ненавидят? видимо да.
>>2909637 Я не пробовал виртуальные треды, но ожидаю что там при реализации "в лоб" будет просто комичный отсос потому что когда тасок больше сотни надо чётко очень им приоритет ставить. Если сделать 10000 тасок, каждой дать виртуальный тред и запустить их на выполнение то там просто пиздец будет. Жду в целом бенчей на реальных задачах. Переходить на джаву в производительных проектах не планирую. >>2909647 Обсуждали пару месяцев назад, предложили литкод изи решить на стрим апи. Джавадебилы не осилили. Какой-то хуесос всю ночь не мог успокоиться и визжал про ломбок, я аж устал его обоссывать. Потом он объявил что победил, никто с ним особо спорить не стал - он и так уже всех заебал. В целом спорить с джавадебилами невозможно даже если сам более или менее пишешь на джаве, т.к. мозг там напрочь атрофирован.
>>2909652 >(да и не все решает. как он решает вопросы корутин (асинк/авайт))? Кому нахуй нужен загрязнитель языка и дублятор методов? Асинк авейт это литералли компромисс за счёт синтаксиса, который шарпобляди за неимением альтернатив возносят из зрады в перемогу.
>потребляемая память Память стоит дёшево и масштабируется легко. А процессор мощнее мощнейшего не купишь. Тратить процессорное время в угоду памяти это дебилизм.
>>2909662>>2909665 В этом и проблема что нет никакого смысла делать поток (даже виртуальный) в котором описана вся логика. Нужно делать целую кучу маленьких тасочек-этапчиков, и у тебя должны тасочки-этапчики вылетать из очереди на выполнение и потом залетать обратно в очередь следующим этапчиком. В этом никак не помогут зелёные треды. Правда от асинк-эвейта тоже толку мало, он в другом месте нужен абсолтно и в моём понимании с зелёными тредами не конкурирует. С зелёными тредами конкурирует тредпул который есть во всех языках со времён палеозоя. И он сосёт.
Так, братишка джавадебил, не теряйся, я почти все настроил. Кстати, чо такое Arrays.stream? Просто с массивом нельзя работать? Чо это хуйня делает? На стек засовывает?
>>2909657 Кого ты там обоссал? Ты даже не смог ответить, как на петушарпе конструктор по параметрам сделать и не писать этот ебучий бойлерплейт каждый раз для каждого класса. Или как например повесить {get; set} на весь класс.
>>2909677 >В этом и проблема что нет никакого смысла делать поток (даже виртуальный) в котором описана вся логика. Нужно делать целую кучу маленьких тасочек-этапчиков, и у тебя должны тасочки-этапчики вылетать из очереди на выполнение и потом залетать обратно в очередь следующим этапчиком. Пруфы будут или потому что тыскозал?
>>2909661 >Кому нахуй нужен загрязнитель языка и дублятор методов хз о чем ты. есть базовые вещи типа того же гет сет. эти вещи элементарно было сделать сахаром, но ХЕР А так - код должен писать компилятор, а не программист или сторонняя тулза
>Асинк авейт это литералли компромисс за счёт синтаксиса так то то простая и удачная концепция которая ПОТОМ во многие языки перекочевала. И только жава в отстающих.
>Память стоит дёшево и масштабируется легко ага. а потом сидишь и тюнишь жвм с ее GC чтобы все это ворочалось ибо нагрузка на гц пиздец. С переменным успехом.
>>2909650 потому что асинк/авейт имеет огромный оверхед имеет, но не огромный поскольку не равен TPL с его тасками, а другая структура
>>2909695 >хз о чем ты. есть базовые вещи типа того же гет сет. эти вещи элементарно было сделать сахаром, но ХЕР >А так - код должен писать компилятор, а не программист или сторонняя тулза То есть ты на претензию к дебильности асинк/авейта отвечаешь уже давно решённой проблемой джавы с гетсетами? Умно, умно.
>ага. а потом сидишь и тюнишь жвм с ее GC чтобы все это ворочалось ибо нагрузка на гц пиздец. С переменным успехом. Проснись, ты серешь. ГЦ в джаве никто не тюнит, его тюнят разработчики самой джавы. Ты просто выбираешь, если у тебя куча меньше 16 гб, то стандартный, если больше, то generational shenandoah, который даже на кучах с 128 гб паузы меньше миллисекунды держит в в целом отъедает очень мало перформанса (конкретные цифры говорить не буду, так как не знаю их).
>>2909669 Я честно не вижу тут никакого асинк/эвейт. Дальше не вникал, мне вечером выходного дня лень. Неси тест асинк/эвейт про который ты говорил. >>2909686 Скорее всего тебя и обоссал. Я тебе довольно подробно описал почему нужно этот код писать (нажимая иногда Tab) и чем плоха неявная генерация, и почему ей никто в шарпе не пользуется. Мне сейчас лень с тобой сраться, я на x2 с тех пор ушёл, обустраиваю дунасинг на новых сотыгах и мне не до холиваров. >>2909691 Пруфов не будет, я наоборот заинтересован в том чтобы конкуренты писали дрисню на лум и делали сосамбу, мне платят за то чтобы были высокие конкретные интересные бизнесу метрики, а сравнивают эти метрики с конкурентами. Для моей задачи есть формальное математическое обоснование (которое я никому разумеется не показываю), если хочешь такое же то начни копать планировщики процессов в пакетных системах. Скорее всего чтобы удовлетворить любопытство тебе Таненбаума хватит, но я его читал невероятно давно и не помню там я про них впервые узнал или нет.
>>2909708 >решённой проблемой джавы с гетсетами? Умно, умно. решенную проблему? а ну покажи мне в спеке жавы что там с гет сетами. Ничего. значит нахуй СТОРОННИЕ вещи не предлагать. стороннего может быть чего угодно. стороннего я могу вообще котлин взять и хуять рядом с жавой.
>>2909708 >Проснись, ты серешь. ГЦ в джаве никто не тюнит, его тюнят разработчики самой джавы. да ты мне расскажи ага )))
>>2909709 Так ты тесты на котлин привёл. Конечно на JVM это хуёво работает, она не поддерживает потому что такое нативно. Если бы можно было сделать чтобы поддерживала нормально, то давно в жабе были бы асинх/эвэйт и это было бы сверхновой фичей и преимуществом жавы перед всем подряд.
>>2909714 > Я честно не вижу тут никакого асинк/эвейт. Дальше не вникал, мне вечером выходного дня лень. Неси тест асинк/эвейт про который ты говорил. Это петухлиновский асинк/авейт.
>Скорее всего тебя и обоссал. Я тебе довольно подробно описал почему нужно этот код писать (нажимая иногда Tab) и чем плоха неявная генерация, и почему ей никто в шарпе не пользуется. Мне сейчас лень с тобой сраться, я на x2 с тех пор ушёл, обустраиваю дунасинг на новых сотыгах и мне не до холиваров. Да, ты рассказал, что сидеть в классах с говном очень хорошо. Только если ты муха. Других аргументов ты не предоставил, просто повторяя раз за разом "ниявная генерация! магия! ниизкаропки!", и ни разу о том, чем это плохо.
>Пруфов не будет Слив принят. Дальнейшие оправдания, почему слился, не интересуют. Итог: джава выебала петушарп и в асинхронщине, а с виртуальными тредами разрыв стал ещё больше.
Не забываем про >Кому нахуй нужен загрязнитель языка и дублятор методов? Асинк авейт это литералли компромисс за счёт синтаксиса, который шарпобляди за неимением альтернатив возносят из зрады в перемогу. На который ответа не поступило.
Братэлло, утихомирься, тебя пиздец несёт уже. Давай, иди траву потрогай. >>2909724 > Слив принят Да ради бога, я даже не пытаюсь с тобой спорить, ты по 10-15 раз в день свою победу в споре объявляешь а потом опять влетаешь и опять споришь, видимо победа была не особо убедительной. >>2909730 Если вкрации, то поддержка кооперативной многозадачности. Асинхронный шарп это химера, в нём многозадачность одновременно работает и кооперативная и вытесняющая. Джава работает за счёт вытесняющей многозадачности. Это пытаются пофиксить лумом. Но это далеко не во всех задачах поможет, если поможет вообще. >>2909747 Чтобы понять почему так, тебе нужно понять как работает внутри асинк/эвейт. Это не недостаток синтаксиса, это требование механизма который лежит под этим механизмом языка.
>>2909762 >Да ради бога, я даже не пытаюсь с тобой спорить Так зачем ты отвечаешь мне тогда? Просто нравится урину на ебальник принимать?
>ты по 10-15 раз в день свою победу в споре объявляешь а потом опять влетаешь и опять споришь, видимо победа была не особо убедительной. Насколько я помню свои последние "слив принят", темы спора были разные. А если начинается повторение старой хуйни, как сейчас, я просто цитирую результаты предыдущих споров (по крайней мере, что запомнил от туда).
>Если вкрации, то поддержка кооперативной многозадачности. И каким образом кооперативная многозадачность фиксит отключённый инлайнинг в раздробленной функции, из-за которого и происходит падение перформанса в 5 раз (ещё в 2 раза из-за непосредственного таскания объектов continuation, как раз которые можно оптимизировать за счёт нативов)? Хуйню не неси.
>требование механизма который лежит под этим механизмом языка. Ну значит в петушарпе сделали не хуёвый асинк/авейт, а хуёвый механизм добавили, который вынудил добавить асинк/авейт. Лучше стало?
>>2909768 >>требование механизма который лежит под этим механизмом языка. >Ну значит в петушарпе сделали не хуёвый асинк/авейт, а хуёвый механизм добавили, который вынудил добавить асинк/авейт. Лучше стало? Раньше было всё на коллбеках как сейчас в жабе. Но потом майки поняли, что коллбеки -- это уёбищно и завернули в сахарок эвейта. А в жабе всё так и осталось на коллбеках.
>>2909777 Да какое откровение, код на коллбеках читать невозможно, спагетти длиннющие образуются. Особенно учитывая, что в большинстве случаев после асинхронной операции ничего не больше не делается, а весь дальнейший код уходит в коллбек. И тут у тебя либо бойлерплейт с создаваемым объектом, реализующим интерфейс, и методом в нём (и отступом на несколько шагов вглубь), либо вообще продолжение вынесено в другое место, что ещё хуже. К слову, в шарпе даже коллбеки, где ещё есть, делегатами делаются, а не объектами-обработчиками. Меньше кода, меньше отступов, проще читать.
>>2909822 и предъявляю. это не заслуга жавы, а заслугал ее УБОГОСТИ что появилась необходимость рождения сторонней тулзы и даже эта тулза просто добавляет НЕКОТОРЫЙ сахар а не решает фундаментальные проблемы
конечно щас жава наконец то немного взялась за ум, ну так какой год уже. так то и жс (который говно по своей сути) стал получше и даже пхп обрел зрелость какую никакую.
так что обоссали тебя, дебича, который заслугу СТОРОННЕГО ПЛАГИНА (дающего некоторый сахар, не более) приписывает к фичам самого языка
Вот, нашёл в гугле: request.execute(new AsyncHandler<Object>() { @Override public State onStatusReceived(HttpResponseStatus responseStatus) throws Exception { return null; }
@Override public State onHeadersReceived(HttpHeaders headers) throws Exception { return null; }
@Override public State onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception { return null; }
Это не коллбеки что ли? В шарпе это будет просто var result = await request.Execute(), а потом вся дальнейшая обработка ответа. Заворачиваем в try catch и ловим и обрабатываем ошибки в catch. Всё идёт подряд, код легко читается и в целом понятен. А в жабе глазами туда-сюда прыгать приходится; а если какой-то умник сделал не анонимный объект обработчик, а целый класс в отдельном файле, то совсем пиздец.
>>2909687 Ну что ты братишка джавадебил, как поживаешь? А то я чуть не умер разбираясь с вашим джаваговном. Что братишка, джавадебил, ты думал я не смогу залезть в доку и чекнуть зачем нужна черная дыратвоей мамаши?
Кстати, хорошая либа, братишка. Первый вармап быстрее чем все остальные, хотя должен быть сильно медленнее, как и у шарпа, ведь дам компайл. Ну да ладно, не буду придираться, джавадебил. Либу ведь тоже писал джавадебил.
идеа дает срать в консоль пока в нее срет процесс, бля...
>Даёт обёртку для работы с массивом как со стримом. Выполняется за константное и очень быстрое время.
То есть джавапараша со специальной оберткой (читай спецом написанным кодом небось прямо в джите) работает СТОЛЬКО ЖЕ сколько линк который просто ездит по энумераторам?
>>2909872 Ты че блять издеваешься? Консьюм цпу сжигает процессорное время. А все возвращаемое из теста и так попадет в блэкхол. Хуево чекнул. >То есть джавапараша со специальной оберткой У тебя бокс. Значит нет спец обертки. Короче вы друг друга стоите. Вам бы поебаться.
>>2909904 А, еще как варик это потестить. Так-то первая итерация, где не было бокса должна быть самой быстрой. С боксингом наиболее медленная, а это по середине, наверное. Но хз, как на самом деле, конечно.
Тред лучшего языка на планете!
1. Ресурсы:
— https://dotnet.microsoft.com/learn
— https://ru.stackoverflow.com/a/416585/422180
— https://metanit.com
— https://professorweb.ru
2. С# для веб
— https://docs.microsoft.com/ru-ru/aspnet/core
3. C# для десктопа
— https://docs.microsoft.com/ru-ru/dotnet/desktop
4. С# для игр
— https://ru.stackoverflow.com/a/609901/422180
5. С# для мобильной разработки
— https://docs.microsoft.com/ru-ru/dotnet/maui
6. Годные ютуб-каналы
— https://www.youtube.com/c/CODEBLOG
— https://www.youtube.com/c/AndreyShyrokoriadov
— https://www.youtube.com/c/DevJungles
— https://www.youtube.com/user/Shmachilin
Шапка: https://pastebin.com/HT7Hi6FD
Прошлый тред: