как нормально регистрировать зависимости абстракций и реализаций в нормальных приложениях? если, допустим, есть: ClientApp _BllCoreLib _BllImplLib __DalCoreLib __EfDalImplLib __RedisDalImplLib где, соответственно, Client не знает о Impl-ах, а работает только с интерфейсами Core-ов?
на моей памяти либо юзали XML-конфигурации, либо всю регистрацию впихивали в Shared-проект, откеда доступ был всему от всего. но нормальные ж люди как-то делают адекватно все это?
>>869574 возьмем самый простой пример: вебапп->проект бизнес-логики->проект доступа к бд. в каждом из них есть свои публичные интерфейсы, от которых зависит проект цепочкой выше, и конкретные реализации, которые зависят от 3-пати либ мне, для того, чтобы зарегистрировать irepository as myrepository надо: либо протянуть от вебапп к dal метод, который бы проводил регистрацию (что, по меньшей мере, чревато наличием в вебапп зависимостей от библиотек, которые использует ДАЛ, ну и доступ к интерфейсам этого проекта в придачу; либо вынести всереализации в четвертый шаред-проект и с помощью билд-ивэнтов или еще какого-нибудь шаманства, скопировать библиотеки в ин веб приложения (подход так се, не взирая ни на что). более адекватным решением я видел использование возможностей xml-регистрации зависимостей. но тут приходится зависеть от строковых значений, левых файлов и, вообще, не всякий инжектор так умеет.
самое нормальное решение, что я попробовал найти, это использование mef для поиска компонентов, осуществляющих регистрацию зависимостей. все-равно придется прибегать к шаред-проекту и устанавливать в нем зависимость от di-библиотеки. но хоть так
>>869110 По ощущениям это даже не огрызок окамла — это С# с лицом ML. Как фп язык это самый кривой огрызок потому что в первую очередь это ООП язык, вся инфа гуглится да и сам понять должен если работал раньше хоть раз с тем же окамлом. собственно цена за возможность полного интеропа с шарпом и остальным дотнетом, который в той же скале по обратным причинам очень кривой
Если же тебе нужен сшарп с почти полноценным выводом типов, паттернматчингом и кастрированным адт и возможностью писать дсл прям "на лету" как в скале — в целом неплохо. То же самое и по перформансу — именно код в функциональном стиле дотнет оптимизирует очень слабенько.
Шарпач, подскажи, есть ли достойная замена решарперу работающая в отдельном потоке? А то на моем некроноуте VS с решарпером постоянно подвисает и тормозит, чего без решарпера не происходит. Отказаться от его советов пока не могу, пишу нашарпах всего 3й месяц
>>870562 описанного у рихтера тебе недостаточно? может ты что-то конкретное хочешь узнать?
>>870529 что такого тебе постоянно подсказывает тебе решарпер, что ты не можешь отказаться от него? подобное говно приводит к привыканию, потом еще надо постараться написать полтора класса без указок использую решарпер, в основном, как навигатор + быстрый добавлятор usingов
>>869105 (OP) как выгрузить файл на гугл диск иди другое хранилище? Пробовал использовать WebClient.UploadFile(ссылка, которая успешно работала при загрузке файла с диска,путь к файлу); но нифига не вышло
На работе пишу на нем скрипты в linqpad, вместе с type providers ваще огонь для всяких одноразовых интеграционных задач. Сборка мелких проектов на FAKE - там относительно удобный dsl и много чего из коробки. Пет-проекты на нем пилю, оче нравится.
В нем есть все, что есть в c#, кроме unsafe, так что проблем особых не вызывает.
Что за монадки и как ими пользоваться я понял после чтения статей на fsharpforfunandprofit до этого прочтя кучу статей про монады в хаскеле и ничего не поняв, Скотт отлично объясняет. Появилась зависимость.
Выведение типов делает меня плакать при возврате к написанию кода на c#, композиция функций делает код компактнее, АДТ позволяют лучше моделировать предметку, паттерн-матчингом красиво пишутся сложные для if-else и switch-case условия.
Там же в треде про ФЯП мне пояснили, что F# говно по сравнению с другими языками ml-семейства, но я на них не писал, по-этому не страдаю особо.
На hh изредка появляются вакансии, где он желателен была вакуха в касперском, сейчас мдмбанк, но чистых фшарпистов последние 2 года точно не искали.
Как использовать Selenium WebDriver со своим основным Firefox профилем?
Пробовал: FirefoxProfileManager myProfile = new FirefoxProfileManager(); var profile = myProfile.GetProfile("C:\\Users\\anon\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\anon.default"); var driver = new FirefoxDriver(profile);
>>872443 может быть надо имя профайла указывать FirefoxProfileManager myProfile = new FirefoxProfileManager(); var profile = myProfile.GetProfile("anon");
>>870360 Что не так? Несмотря на всю простоту концепта, очень многи умудряются проебаться и нахуярить сервис локаторов, которые конфигурируются через xml.
Объясните одну вещь. Вот на подходе .net core - он будет давать делать только webapi/mvc проекты? А если, например, хочу что то для линя написать на шарпе то это ксамарин/моно? Ещё видел презентацию, где шарп компилили в нативный исполняемый файл в убунте. Я запутался что и для чего нужно. Объясните.
Мне нужно сравнить 2 слова. Например, первое TeamA, а второе может быть teama, Team A, T.e.a.m.A., Team-A и так далее, в таком случае вывести положительный результат, а если там будет например Team B, то уже отрицательный. Чето с регулярными не смог допереть, как это сделать. Подскажите плз, C#
>>872755 Что-то вроде этого? Подставь просто в замену нормальный символы какие тебе нужно, а не строки как у меня и норм по-идее. https://dotnetfiddle.net/lZXRAr
Кто-нибудь может объяснить принцип работы async/await РУССКИМ языком (понятным, для даунов, дебилов)? Из всего, что я прочитал, понял только, что это будто какое-то маняврирование, чтобы избежать потоков, которое в итоге все равно создает отдельный поток (task). Нахуя это нужно, чем лучше обычных потоков? Если кто-то пояснит с примером, буду очень благодарен.
Если ты вызываешь асинхронный метод через await, то выполнение данного метода приостанавливается до тех пор, пока асинхронный метод не вернет какой-то результат. В это время - пока мы еще ожидаем выполнение этого метода - управление передается вызывающему контексту(благодаря этому ты можешь нажимать на кнопочки на форме / веб-интерфейсе, пока на сервере еще выполняется выполнение асинхронного метода). Как только асинхронный метод завершает свою работу, то метод, который ожидал завершения его выполнения просто продолжает свою работу. А нахуй это нужно - для удобства разработчика, т.к. создавать потоки и самому всей этой хуйней управлять не очень удобно, асинки - напротив, просты в освоении и предоставляют уницифированный интерфейс для работы.
>>873666 >управление передается вызывающему контексту(благодаря этому ты можешь нажимать на кнопочки на форме / веб-интерфейсе, пока на сервере еще выполняется выполнение асинхронного метода) Да это я понял, а в то время когда вызывающий контекст возвращается к работе, и если там не просто какие-то кнопочки тыкать, а сложные длительные вычисления происходят, в это время тот код который начал работу в асинхронном методе не выполняется, а ждет пока эти вычисления закончатся?
Кто-нибудь сможет пояснить за memory mapped file? Допустим, я сортирую внешней сортировкой 1ГБ файл. Зачем тут использовать mmf? Когда можно просто построчно читать файл, скидывать в новый файл, сортировать внутри, потом сливать все файлы.
>>873679 Кажется, ты не про то ответил, я хуево написал. Код, который вызвал метод, в котором есть await, продолжает выполнятся сразу после вызова метода через await, а метод, вызванный через await, ждет завершения этого кода? Они же не могут параллельно выполняться, так как находятся в одном потоке.
>>873684 Нет, он будет ждать завершения работы метода в котором await есть. А вообще чтобы вызвать этот метод, в котром есть await, ты должен будешь его вызывать либо через await (т.к он помечен как async), либо завернуть это дело в Task.
>>873684 Хотя я может быть напиздел по поводу того, что он ждать будет. Сейчас нету возможности проверить, так что либо у себя попробуй хули ты сразу не проверил? это ж 5 минут , либо жди пока кто-то поумнее появится.
>>873688 Вот супер схему запилил. На первой M1 и m3 же не могут одновременно работать, так как у нас нет нескольких потоков (или есть (???)). На второй m3 ждет, когда M1 выполнится. Вторая верна или нет?
>>873697 мимо третий какую-то ты еболу намалевал на своей картинке, сам запутался и у других ответа не получишь https://m.youtube.com/watch?v=lh8cT6qI-nA здесь все должно быть яснее насчет супирпупир длительных операций: если это IO операция, она практически гарантированно уйдет в другой поток. если нет, CLR может вполне легально принять решение о переводе операции во многопоточность, если оно затягивает выполнение
>>873707 >Во втором случае m3 будет ждать, когда m1 выполнится. Ну так и нарисовано. В таком случае это просто последовательный код, в чем тогда суть? По ссылке я читал уже, нихуя не понял.
Вот с той же ссылки пример, его запустил, он почему-то выполняется параллельно.
>>873751 Спасибо! Тут вообще какая-то неразбериха с потоками, почему-то только кек уходит во второй поток, а все остальное в одном делается. Ладно, мне не дано понять, посмотрю лысого дядю >>873711 и пойду баеньки. Бобра вам.
>>873765 ну таск.ран работает в принципе чуть по-другому. я еще проебался, надо было бы вызвать Result у асинхронного метода, там тоже CLR может принять решение о выполнении задачи в потоке
>>873795 >CLR может принять решение о выполнении задачи в потоке >CLR может Что-то у меня бомбит от этого. Ты так говоришь, будто при разработке не знаешь как будут выполняться таски.
Ньюфаг репортинг - решил сделать для начала прогу, сохраняющую все картинки с треда. Беда только в том, что не знаю с чего начать. В какую сторону копать?
>>873943 Самый простой вариант: Пилишь простое windows service приложение, которое будет брать ссылки на треды из какого-нибудь файла и будет парсить треды вытягивая оттуда картинки (пожалуй с парсинга и вытягивания начни), а потом просто сохраняешь себе на диск. Ну и работать сервис через таймер будет какой-нибудь, который автоматически ьудет перезапускаться.
Ну или еще проще: пилишь веб-приложение с одним инпутом, куда забиваешь ссылку на тред ну и дальше все точно так же (парсинг, еботня и все это), но эта хрень сама естественно не будет сама перезапускаться и ручками придется.
Нихуя не понятно? Зато всю эту поеботу можно легко ковертировать к нормальному формату.
Итак. Получаешь эти данные ручками, потом пиздуешь на http://json2csharp.com/ и вставляешь JSON, который ты получил.
На выходе получишь систему классов, которая получается при конвертировании этого JSON к формату шарпа. Видишь класс RootObject? Это и есть корневой элемент, который вернёт тебе двач.
Затем тебе нужен пакет Newtonsoft.Json. Эта либа, которая позволит тебе конвертировать твою JSON-строку к полученному формату. Поставь её через Nuget, командой Install-Package Newtonsoft.Json в консоли студии.
Как с этой поеботой работать: var huiPizda = JsonConvert.DeserializeObject<RootObject>(response);
Что может быть проще?
Затем ебись с полученными данными, как хочешь. Там есть класс Post, он в себе содержит информацию о файлах. Дальше сам разберёшься.
>>873990 Прошу прощения, но я немного обосрался. Судя по всему, тебе придётся немножко поебаться с сериализацией, т.к. эта поебота не сконвертировала то, что тебе нужно.
Значит смотришь на мой предыдущий пик и создаёшь класс File, который содержит в себе все свойства с пика (то, что лежит внутри переменной 'files'). Обрати внимание, что регистр свойств и тип переменных должен совпадать, чтобы конвертер не послал тебя нахуй.
Затем вместо object подставляешь этот File в текущем пике.
1) хочу написать UWP приложение под десктоп/мобил/xbox for fun. Где посмотреть хелло ворлд? С чего вообще начать? Т.к. предвижу winforms мне не совсем нужен будет
2) Много ли платят в отрасли? Я имею ввиду мне сейчас платят 2к евро дистанционно и сижу на жеппе ровно. Будет ли существенный прирост? В пыхе есть частые халтурки и можно работать из дома. Плюс работы очень много. Смогу ли я найти на апворке или на тематических форумах таски по быстрому если научусь кое как говнокодить?
3) Если ответ на 2ой вопрос положительный. Во что развиваться? В .ASP, .NET или Xamarin чтобы опять же сидеть на жеппе так же ровно и получать бабло?
4) можно ли писать легковесные и шустрые приложухи на .asp или это не поворотливая хрень?
>>874004 1) начни с http://metanit.com/sharp/ 2) не сказал бы, что .NET фриланс прибыльней/перспективней, чем рнр (ИМХО). одновременно с этим не сказал бы, что .NET дешевле (мне в помощь статистика на ДОУ, как дела в реальном мире, могу только догадываться) 3) MVC/WebAPI все еще живут, ASP.Core, если выстрелит, то будет крутяковым перспективняком. ну а так остается Xamarin и WPF. мобильные, ясен пень, имеют бОльший вес на рынке 4) если завязываться на IIS, то, в целом, все будет достаточно слабоповоротным (хотя бы благодаря инфраструктуре). но белые люди придумали OWIN, ~Core работает через Kestrel - короче, есть достаточно легкие вещи в окружении
>>874004 >PHP макак вкатывается в тред >сидеть на жеппе так же ровно и получать бабло? Попробуй nodejs без шуток, опыт знакомста с php мартыханами - говорит что он не способны работать со статической типизацией
>>874018 > мерт вместе с winforms to be honest - нет естессно, писать впф тебе скажут только в одном шансе из 10, но и не каждый пишет на c++, что не мешает ему не быть мертвым моя охуевшесть была охуевшей, когда выкатили работоспособное и (относительно) перспективное приложение на Silverlight
> по поддержке кода написанного 10 лет назад индусами от этого никуда не денешься
>>874014 Да, если нужна поддержка форча и не нужна будет сложная логика, то твой вариант будет проще в использовании. Только там ещё надо будет проверить, что ссылка оканчивается на .jpg/.png/.bmp, т.к. ему только картинки скачать надо.
Нет. Поддерживаю всякое говно (Xamarin, Ionic, бэкенд на шарпе без тестов и архитектуры) на удалёнке в мухосранске за 20к, арендую однушку за 14к. Хуже меня уже нет.
>>874248 Этим говном еще кто-то занимается в 2016? Я сам этого не делал, но слышал, что в плане производительно это та еще жопаболь, как и в плане сложности.
Шарпаны, как я понимаю в реальной работе используется только EF? И если да, то зачем в Троэлсене столько рассказывается про подключенный и автономный уровни?
>>874400 1 абсолютно не только 2 уметь пользоваться только хай-левел фреймворком без представления об основах, которые составляют его базу - признак макакена
>>874400 Я бы не сказал. В реальности за место EF может использоваться какая-нибудь микро ORM вроде linq2db или dapper, где ты будешь сам писать запросы. А если EF и используется, то часто он служит лишь для мэппинга на DTO сущности и структурирования баз по отдельным классам, а при работе с таблицами вся работа производится через чистый sql, ибо то, что генерирует EF при обращении к БД очень сильно бьет по производительности.
>>872629 "он будет давать делать только webapi/mvc проекты?" - не только - еще console app.
Для линя, что ты на шарпе хочешь писать и главное нахуа?
Core CLR - basement для web way - довольно плотно конкурирует с UAP и они перенимают друг у друга некоторые концепции и реализации, в свою очередь UAP много берет от Mono - тот же AOT вместо JIT. Но все подводится под .NET Standard.
>>874408 ну идея бизнес-логики в контроллерах меня слабо привлекает. и из ДАЛа у меня не только рсубд: есть граф, есть файл-сторедж. чтобы по фен-шую без слоя не обойдешься ну и да, с ЕФ я, в перспективе хочу слезть. а лучше вообще в постгрес какой-нибудь сраный ну и юнит-тестирование, окакжэ проект для себя, хочется идеала, хотя уже не получается
>>874445 На Hololens не моно, а UAP. UAP взял у Mono AOT. Но там честно говоря звиздец. Нормальной рефлексии нету, а соответственно Automapper, IoC работают с ограничениями. Ну и вёрсточка UI там неебовая.
>>874455 Я не писал про бизнес-логику в контроллере. Бизнес логика в бизнес слое. Но смысла с репозитория при использования EF не вижу. EF даёт нормальную абстракцию IQueryable. Честно говоря, я не вижу смысла с юнит-тестов которые проверяют в бизнес-слое создание объектов без сохранения в базе - я ж так понимаю, ты мокаешь свой репозиторий. В рантайме, если запрос в EF кривой все и развалится, при работающих юнит-тестах.
НУ плюс адекватно построение связей не протестишь. По-моему. если замешано использование БД, тут уж без интеграционных тестов не обойтись.
>>874465 ну, я не пишу repository<t> поверх dbset<t> и unitofwork поверх dbcpntext, но ведь какой-то слой command/query должен же быть дабы переиспользовать функционал?
Аноны, а киньте ссылку на гитхаб с годными веб-проектами в плане архитектуры - на которую можно равняться так сказать (бизнес логика в отдельном слое, юнит тесты, все вот это). Core / Mvc /Web api не так важно.
>>874717 берешь, короче, рефлектор, смотришь в System.Collections имплементацию любой понравившейся коллекции. упрощаешь по вкусу и гришь преподу мол "смотри старый хрыч с указателями заебашил и с IL".
>>874717 по сути, выбора немного: либо с использованием массива для хранения элементов (при этом твоей задачей будет контролировать длину массива и переинициализировать его в случае переполнения); либо через связный список
>>874752 А дерево ебануть слабо? Черное, красное, АВЛ, с проходами прямыми и обратными, вглубь и в ширину, бинарное и произвольное. Фантазия безгранична здесь.
>>874945 ну дык реализацию дерева придется все-равно делать на основе однонаправленного связного списка. только связей будет не одна, а несколько можно массивом, наверное, но я хз, насколько это эффективно
Из бд извлекаю таблицу в DataTable и привязываю к DataGrid'у. Возникло несколько вопросов: 1. В бд имеется поле дата типа date. При отображении в гриде дата принимает формат со временем (пик). Как пофиксить? 2. Как задать заголовкам столбцов дружественные имена. Через маппинг не получается. http://pastebin.com/8YvyWSne
Есть тут аноны, которые пишут/писали под андройд на С# с помощью Xamarin? Прошу у вас помощи. Я установил Android SDK ещё когда устанавливал Android Studio, потом решил писать на C# и скачал Xamarin. Создаю проект, а когда пробую компилировать, вылазит пикрилейтед. Как исправить? Что я делаю не так?
>>874018 >мерт вместе с winforms (а если и применяется где-то, то лучше сразу сдохнуть) Winforms еще как применяется для по которое было написано больше 6 лет назад и требует поддержки и направлено на постсовок, в котором много где еще 2000 винда стоит и хр в офисах
Я конечно не получу тут ответ, но на всякий случай спрошу.
Код примерно такой (пикрилейтед): в цикле создаем массивы по 100К элементов (элемент - струкрура размером 56 байт), и заполняем их. Когда память кончается винда зависает нахуй. Никаких исключений, ничего.
Вопрос: как узнать заранее зависнет ли винда перед выделением и заполнением массива чтобы вообще не производить эту операцию? (виснет она судя по всему на заполнении).
Зависание происходит следующим образом:
- Диспетчер задач показывает 100% использование памяти (12 ГБ в моём случае). - Начинает дрочиться винт, винда начитает тормозить. - Перестают перетаскиваться окна и вообще UI, в том числе других приложений и таскбара, не отвечает. - Диспетчер задач перестает обновлять состояние своего окна. - Падает к хуям радио (которое еще какое-то время играет). - Винда перестает реагировать на мышь и указатель мыши застывает. Винт продолжает дрочиться. - Через значительное время всё затихает и наступает полная тишина. Экран продолжает иметь то же состояние когда UI перестал отвечать на действия пользователя.
Код как текст:
private unsafe void button81_Click(object sender, EventArgs e) { MemoryFailPoint memFailPoint = null; int items = 100000; MList<Cba[]> arrays = new MList<Cba[]>(); int i = 0; Random r = new Random(); for (i = 0; i < 2000; i++) { try { memFailPoint = new MemoryFailPoint(items * 56 / 1024 / 1024); Cba[] ar = new Cba[items]; for (int j = 0; j < ar.Length; j++) { ar[j].A1 = r.NextDouble(); } arrays.Add(ar); memFailPoint.Dispose(); } catch (Exception ex) { Trace("i=" + i + " Got an exception: " + ex.Message); break; } } }
public struct Cba { public double A1; public double A2; public double A3; public double A4; public double A5; public double A6; public double A7; }
Если кто будет тестить, то осторожно - винда виснет конкерно. У меня 12 ГБ и у меня виснет этот код на Windows 7. Если количество массивов уменьшить до 1000 (с 2000 что сейчас), то зависания нет, есть только обычный расход памяти приложением, что можно отследить по диспетчеру задач.
>>875330 > (ЭЦП, плагины для браузеров и прочего документооборота) просят win7 не ниже, разве нет? Не, можно и на 2000 - хр, если десктоп приложение со вторым фреймворком.
Visual Studio для macOSАноним14/11/16 Пнд 23:24:06#135№875707
>>875717 Хм, интересно, спасибо. Хотя это тоже странно, 200 итераций это около 1ГБ данных и это не должно быть проблемой. Скомпилировано под x64? (Хотя у меня стоит any cpu, но приложение запускается как x64).
>>875753 Да, стояла галочка "prefer 32-bit", что и происходило. Исключение было OutOfMemory т.е. это похоже был не MemoryFailPoint. Если ее убрать - приложение запускалось в 64bit, исключение было уже InsufficientMemoryException, на ~2200 итерации. Свопа нет, совсем. Винда иногда предлагала закрыть приложение из-за недостатка памяти.
>>875786 >Если ее убрать - приложение запускалось в 64bit, исключение было уже InsufficientMemoryException, на ~2200 итерации. Свопа нет, совсем. Винда иногда предлагала закрыть приложение из-за недостатка памяти. Найс. Это уже другое поведение, отличающееся от моей винды. Может дело в том что она у меня пиратская?
>>875785 Все классы кроме функции Trace я выложил. Суть Trace и так ясна, это обычный текстовый вывод. А, там я оставил MList. Вроде убирал M, странно, ну ладно. Извиняюсь. Можно заменить на простой List, там разницы не будет. MList это по существу тот же List, только с возможностью доступа к массиву напрямую, но она в коде не используется.
>>875794 >пиратская Тут комментарий про эту страну и про программное обеспечение. Ты говоришь, что у тебя диск начинает, это потому что у тебя своп включен, поэтому и винда виснет
>>875811 Выключил своп и с виндой перестали происходить зависания и наконец-то стали появляться исключения. Хотя в первый раз экран погас и стал черным, после нажатия Ctrl+Alt+Del стал синим, выбрал диспетчер задач, и обнаружил что куда-то пропала Студия из панели задач. Ну и хуй с ней. В остальные разы почему-то такого не было.
В парсер надо добавить немного гибкости кастомными клиентскими скриптами так чтобы им можно было передавать объекты из приложения для обработки например. Когда-то давно был же WHS - полез искать, а там ебать колотить сколько скриптоговна напридумали и у все это слегка различается по методам использования т.к. видимо под разные задачи заточено. Кроме WHS есть некий компайлинг на лету и подключение этой сборки (как?), есть всякие сторонние JInt-ы и подобные пэкиджи. Что из этого лучше всего использовать чтоб в парсере выполнять скрипты аля vba-код в мс-оффисе или тупо из внешних файлов/базы? Подозреваю что вот эта компиляция на лету для дотнета ваще нативная и наиболее быстрая, но не понимаю что именно у гугла спрашивать, чтоб подробно раскуриться
Продолжаю экспериментировать с переполнением памяти. В том коде что я приводил >>875622 в случае наличия свопа торможение винды начинается при заполнении массива, а не при выделении. При отключенном свопе падение происходит при выделении массива, с исключением.
В реальном приложении заполнение памяти происходит в несколько потоков. При отключенном свопе во всех потоках сразу происходит исключение OutOfMemoryException при попытке выделения памяти для массива как правило. Код потока взят в try-catch, и этот catch ловит OutOfMemoryException, при этом делая успешную запись в лог этого факта. После чего управление чаще всего не достигает точки в которой происходит ожидание окончания выполнения потоков: на первом пикрилейтеде управление не достигает строки "Log.Trace("Threads finished.");" поскольку в логе эта строка так и не появляется.
Поведение при исчерпании памяти бывает разное:
- Иногда управление очевидно таки передается в точку ожидания завершения потоков, но это бывает редко. Вычислено по паре случаев нормальной обработке всех исключений программой. - Был случай исключения null reference exception. - Иногда приложение исчезает. - Иногда приложение падает с крэшем. - Был случай "неизвестного исключения". - В одном из случаев с винды слетела тема Aero, перед этим приложение исчезло. - Был случай гашения экрана и исчезновения Студии (упоминался выше). - Постоянно падает дебагер Студии. - Невозможность запустить диспетчер задач. - Был случай когда выпал BSOD (пикрилейтед).
На данный момент теория следующая: При исчерпании памяти когда происходит попытка выделить массив происходит исключение - такое какое и должно быть. После чего остальной код начинает работать с ошибками, т.к. память по-прежнему вся занята и он уже сам начинает получать исключения в непредсказуемых местах с непредсказуемыми последствиями, каждый раз давая разную картину багов. То что код приложения не выдерживает таких издевательств и то что аналогичное происходит с другими приложениями это еще можно объяснить, но почему к этому оказывается неготова сама винда - вот это открытие.
>>875963 > После чего остальной код начинает работать с ошибками, т.к. память по-прежнему вся занята и он уже сам начинает получать исключения в непредсказуемых местах с непредсказуемыми последствиями, каждый раз давая разную картину багов что ща хуйню я читаю? OOMException выпадает же до того момента, как куча начинает выделять память под новые объекты пики не смотрел ибо мобильный клиент их не подгрузил пидар
>>875983 ОК, найди другое объяснение почему начинает глючить другой код, в том числе из других приложений и из самой винды. По-моему это от того что он не может обрабатывать исключения связанные с нехваткой памяти.
>>875983 >пики не смотрел ибо мобильный клиент их не подгрузил пидар Там всё-равно ничего интересного.
>>875987 >ОК, найди другое объяснение почему начинает глючить другой код, в том числе из других приложений и из самой винды. Очевидно, что в других приложениях возникает необработанная ошибка выделения памяти. Возникает в рэндомном месте и в рэндомный момент времени. Поэтому разнообразные глюки вываливаются.
Может у тебя и вправду винда кривая. Можешь попробовать создавать MFP не в потоках, а до их создания, еще в синхронном коде. Ты бы виртуалку себе сделал с нормальной msdn виндой, и там бы веселился в controlled то environment.
Ох лолед. Запустил я опять тот код >>875622 Он отработал и выдал исключение. Приложение осталось, память вся выжрана. Беру Студию (была открыта). И смотрю как она сможет работать. Начинаю просто ходить по главному меню даже не кликая по его пунктам, и тут хуяк - Студия падает нахуй с крешем. Если бы я закрыл своё выжравшее память приложение, то всё работало бы нормально. Вывод: Студия не обрабатывает OutOfMemoryException. Отсюда еще один вывод: обрабатывать OutOfMemoryException не нужно, потому что код винды и других приложений, в том числе приаттаченные DLL и судя по всему даже код самой CLR, не обрабатывают это исключение и падают. Какой бы идеальный код с этой точки зрения вы не писали, он всё равно завалится, либо от того что упадет используемая чужая Dll, либо от крэша стороннего приложения, либо от крэша винды.
Выручайте, дали мне оборудование секретное дохуя (китайское нонейм говно), по факту принтер с встроеным серваком, который отдаёт мне на конкретные реквесты, конкретную инфу. Так вот, если приходит HttpWebResponse больше 5Мб, то ReadToEnd() возвращает кракозябры в странной кодировке, ни одна из распространённых кодировок не подходит, да и производитель клянётся, что utf-8, никаких gzip и томуподобного.
Подскажите нубасу Как обработать NullReferenceException ? Хочу чтобы метод возвращал true если принимает две null ссылки. T - реализует Comparable<>, Equatable<> Хз как ее ограничить на null типы
>>876204 ну можно сделать MethodName<TContainer, TValue>(...) where TContainer : Nullable<TValue> where TValue : struct, но это будет дичь дикая не уверен, скомпилится ли вообще. как вариант ограничиться только констраинтом, что Т - это структура и пытаться выдоить из нее нужный тебе нуллабл
Джабу ебучую унижают на собственом поле. Можем наблюдать как работу приложения находящего на хабе переносится в мобайл центр где оно тестится на тысячах современных устройст с кучей сладких графиков и отчетностей рассылается по тестерам и всё остальное. За ебаные 5 минут времени.
>>876860 Мне (как Xamarin разработчику) в главное что он теперь официально "VS" те: - их будут обновлять параллельно - начнут шарить код - в каком-то виде там увеличится команда разработчиков В итоге он будет развиваться быстрее и там будет больше фич.
P.S. Вот бы еще выкинули нахрен mono и заменили все на core clr.
>>876877 А вот мне как маководу главное чтобы они наконец перестали лезть в залупу, запилили addinmaker который сломали вместе со всеми плагинами в 6 версиии — иначе единственная нормальная IDE на OS X просто сокращается до шарпа.
Картинок по сути нет но как я понял теперь тесты написаные один раз в студии могут прогнать любой код будь он написан на любом из поддерживаемых языков.
>>877119 Появился непонятный шаблон проекта состоящий из: 1) AspNet Core WebApi сайт 2) Shared Project с MVVM частью мобильного приложения 3) Xamarin/Android - версии приложения
Из интересного: в комлекте с (2) идут сорцы реализации: ServiceLocator - который сейчас считается антипаттерном и MessagingCenter - синглтон для обмена сообщения между разными частями кода IMessageDialog - интерфес с методами showMessage/Toast/Confirmation (тоже всегда его сам реализовывал)
Боже мой, как достало это каждый раз писать. Ананасы, как вы справляетесь с такой фигней?
В каждом гребанном классе есть как минимум одна зависимость, которую надо сохранить в поле.
Пропозал на "Primary Contructor" https://github.com/dotnet/roslyn/issues/9517 зарубили сначало для в C# 6.0, теперь и в 7.0 Говорят "может кода нибудь будем, пока непонятен синтаксис", ну какого хера...
>>877521 Сделай их публичными свойствами и инициализируй как обычные поля в конструкторе: new MySevice { Dependency1 = dependency1, Dependency2 = dependency2 }. Но это будет опционально. А вообще я не вижу тут серьезных проблем. Жалко один раз конструктор написать что ли?
>>877521 >Ананасы, как вы справляетесь с такой фигней? Копипастой и column edit-ом. >ну какого хера Ну это не скала и не котлин, тут думают о нововкатывающихся челиках.
>>877525 >Сделай их публичными свойствам Какие еще проперти, это тебе нет Point { X = 1, Y = 2 } Это сервис с бизнес логикой и зависимостями на другие сервисы. В теории они должны проставляться через DI и по канону должны быть иммутабельны.
>>877525>>877527 >Жалко один раз конструктор написать что ли? >Ну это не скала и не котлин Вот именно, когда половину времени пишешь на Kotlin (где это есть) - начинает не хило бомбить что они вот уже два релиза языка копротивляютися, но при это везде орут про эти ненужные тюплы.
Вечер в тредик, кодинг в радость, господа. Пишу тут небольшой сервис и появилось несколько вопросов к бывалым .NET-господам. 1) Существует ли в .NET класс/метод/функция, которые могут провести валидацию URL: определить соответствует ли заданная строка стандарту URL. Также было бы неплохо, если бы существовал какой-нибудь инструмент, который приводил две одинаковые ссылки к одному стандартному URL(например https://vk.com и vk.com должны быть приведены к vk.com). В первую очередь меня интересуют решения через SQL, далее через managed code с использованием .NET only и C#. Другие варианты, типа этого https://msdn.microsoft.com/ru-ru/library/windows/desktop/bb773724(v=vs.85).aspx не желательны, ибо C++ и вообще устарело. Также не желательны решения через самописные регулярки, ибо большая часть таки не удовлетворяют стандарту. 2) Существуют ли какие-нибудь стандартные биективные функции-архиваторы/хеш-функции для получения сокращённой строки из длинной. Опять же приоритетнее это сделать средствами TSQL, потом уже всякими стандартными средвствами, но код должен быть управляемым. PS. Сегодня в течение дня искал эту фигню и не нашёл ничего особо годно, поэтому буду весьма благодарен, если кто скажет, что здесь лучше использовать.
Многие фичи из этого ивента оказывается есть в 2015 Студии, в частности подсветка заголовка блока при наведении на его закрывающую скобку и строки вида $"{fuck.this.shit}". А я и не знал, уже год как пользуюсь этой студией. Что значит идиот.
>Он совместим с PCL Xamarin или netstandard 1.5 ? >Supports .net 3.5, .net 4, .net 4.5, .net 4.6, Silverlight 4, Silverlight 5, Windows Phone 7, Windows Phone 8, Metro on Windows 8, Mono, MonoTouch, MonoDroid and PCL По чем мне знать? Проверь и если не работает, создай issue https://github.com/Fody/Fody
>>877598 Да, но без потерь и биективное. >>877574 Благодарю, но это валидация URI, куда входят, как URL, так и URN. Мне нужна валидация именно URL по его стандарту/microsoft реализации. URN должны отсеиваться.
>>877786 if if if if while if if using if if попробуй сначала инвертировать условия, дабы добиться намного меньшего уровня вложений. ну а после хотя бы попытаться разделить функционал по методам
я думал, это и есть самое страшное, но тут оказался Invoke и Thread. хуй знает, что тобой двигало, когда ты писал это вот, но я бы советовал никогда от слова по возможности не прибегать к этому вот
1: private void SqlSelect(object sqlcommand) Функция с именем SqlSelect. Судя по имени, она должна возвращать какую-то хуйню, связанную с SQL, но она ничего не возвращает. Придумай нормальное название. На вход эта функция принимает переменную sqlcommand типа object... Серьёзно? Ты используешь эту sqlcommand как строку, так и передавай её сразу как строку.
3: int i = 0; Эта переменная используется на двадцать строк ниже и её имя не несёт никакой смысловой нагрузки. Кроме того, ты используешь её для прохода по двум различным коллекциям. Ты сэкономил несколько байт памяти, но читаемость из-за этого сильно страдает.
29: for (int count = 0; count < reader.VisibleFieldCount; count++) Переменная с именем count используется как счётчик цикла. Ты совем мудак чтоли?
44: ++id; Переменная id, как правило, используется в качестве идентификатора. Ты используешь её как счётчик количества ошибок. Измени её имя на что-то типа "errorCount"
45: string.Format("Ошибок: {0}", id); Можно заменить на: $"Ошибок: {id}"
48: finally { connect.Close(); } По идее этот блок ненужен т.к. для connect ты используешь using - он сам эту хуйню тебе должен подставить.
>>877817 а что не так с вложенностью? не так уж и много ее. просто на форме имеется tabcontrol по этому используется 2 if. первый проверяет на существование вернувшегося результата с npgsql, второй проверяет на какую tabpage занести результаты. про invoke. как переписать обращение из потока к winforms контролам? на cyberforum нашел пример if (textBox1.InvokeRequired) textBox1.Invoke(new Action<string>((s) => textBox1.Text = s), newText); else textBox1.Text = newText; но в нем есть небольшая загвоздка. не все контролы поддерживают invoke. обращаться с помощью делегатов? тогда на сколько это правильно?
>>877831 >Как переписать обращение из потока к winforms контролам? Постарайся не использовать такие низкоуровневые штуки, как потоки. Для таких задач придумали async/await.
>>877828 - SqlSelect метод void, т.е. он не возвращает ничего. назвал его потому, как в него попадают select команды - sqlcommand является object т.к. этот метод вызывается из потока - с названиями переменных понял, ок. спасибо - string.format заменю. спасибо - на сколько знаю, using вызывает метод dispose
>>877835 а смысл от этого async/await? все равно создается отдельный поток, который самостоятельно вызывает invoke для контролов или я нубло ебаное которое не может в dev?
>>877837 >на сколько знаю, using вызывает метод dispose В свою очередь, объект, реализующий интерфейс IDisposable, должен освобождать все неуправляемые объекты в методе Dispose. В данном случае, метод Dispose для NpgsqlConnection должен выглядеть примерно так: public void Dispose() { this.Close(); }
>>877838 async/await позволяет тебе перестать пидарасить потоки, пытаясь жонглировать данными между ними.
// Синхронная версия // В этом случае UI будет висеть, пока ты не получишь ответ private void OnButtonClick() { TextBox.Text = new WebClient().DownloadString("https://google.com/"); }
// Асинхронная версия // В этом случае UI будет продолжать работать, а задача будет выполняться в другом потоке. // Обрати внимание, что хотя задача выполняется в другом потоке, нет никакой ебли с передачей данных в UI-поток. private async void OnButtonClick() { TextBox.Text = await new WebClient().DownloadStringTaskAsync("https://google.com/"); }
В общем. Осилилил я основную часть книги RB Whitaker - The C# Player's Guide - 2015 (в оригинале). С# Ставил целью изучить, для своего хобби. Делаю модификацию для dota 2 с использованием инструмента https://github.com/SteamDatabase/ValveResourceFormat.
Проблема в том что в книге были небольшие задачи и примеры по изучаемым темам, но там не было нихера самого главного - как написать программу. Вот есть у меня задача - создать инструмент с помощью которого я смогу делать множество операций, которые я ранее делал ручками, изменения в клиенте игры касаемо музыки и звуков. А с чего начать, как это все писать - в душе не ебу. Может есть какая то литература, которая сосредоточена не на объяснении основ языка как в случае с книгой вайтекера, а литература которая демонстрирует и учит написанию практических программ?
Изучаю тут F#, дошел до мемоизации. Вот пример кода - http://www.fssnip.net/8P А теперь объясните те, кто шарит - каждый рекурсивный вызов новой мемоизированной функции (fibs) ведь должен создаваться новый, внутренний словарь, так какого хуя все функции вроде как работают с одним и тем же словарем и все в конце работает?! Нихрена не понимаю.
>>878028 >>878013 Ясен хуй я не учил язык ради изучения языка. Просто вот прочел я про кучу всякой поебени, структуры, классы, гетеры, сетеры, полиформизмы и кучу прочей еботни, которую понял, но никогда не использовал. В итоге просто не понимаешь как огромное количество всех этих вещей объеденить в то что будет программой. Хер знает с какого конца схватится.
Подкиньте может исходников какой грамотно оформленной, но не слишком замороченой программы. Почитать, посмотреть, разобраться как вообще это делают.
В моем случаем мне вообще надо будет работать с файломи. Парсингом. Конвертированием. Желательно исходников софта на эту тему. Хотя выебываться особо не буду, любый интересны, что помогут немного разобраться.
>>878036 Мне кажется ты какой-то умственно отсталый или гуманитарий, что, в принципе, одно и тоже. У тебя в голове бардак. Чтобы что-то научиться делать, надо взять и начать вот это что-то делать.
>В итоге просто не понимаешь как огромное количество всех этих вещей объеденить Да ладно? Если взять нехуя раз нехуя и объединить, то получится нехуя.
>>878046 Хотел было возразить, и выебнуться тем в чем я спец, но потом подумал - чего спорить с чсв уебаном.
Я по человечески попросил - мне что бы понять это ваше ооп, какие нибудь исходники не сильно сложной программы, но написанной грамотно и по науке. Что бы посмотреть как вообще все это организовано, структурировано и т.д. Я могу прямо сейчас сесть и начать писать, но это будет лютейший говнокод и ужас. Возможно и к такому варианту прибегну, надо же с чего то начинать. Но пока подумалось, что может кто из опытных, подкинет образец и пример.
>>878065 Ну есть пердолики, которые пердолятся ради пердолинга(нормальные же люди пердолятся ради решения проблем и достижения целей). Не слышал о таких?
>>878063 Чувак, реально. Бери и делай. Это этап, который не миновать. Ты в любом случае начнешь делать говно, сколько бы ты книг не прочитал. Чем раньше начнешь делать говно, тем раньше поймешь как его не делать. Попутно можешь читать Clean Code. Но только попутно, загодя смысла нет, это просто потерянное время.
Аноны, помогите. Имеется главная форма с листвью, к который биндится коллекция. Поля "Имя" можно менять через комбобокс дочерней формы. На дочернюю форму передаю саму коллекцию (для биндинга) и значение выделенного элемента поля "Имя". Но значение свойства SelectedIndex комбобокса равно -1. IsEditable комбобокса установлен в True. Что-то делаю не так? Подскажите как решить проблему (получить правильный индекс). http://pastebin.com/ZeDqUNiF
Как в кросплатформенной игре на OpenTK "программно" нажать кнопку на клавиатуре? В гугле нашел SendKeys, но он какой-то хуевый и вроде не работает на системах с UAC.
>>879380 Потому что это новая для шарпа, так ей полтора десятка лет фича — кортеж называется. Первый раз видишь потому что языков знаешь с гулькин хуй, очевидно.
>>879391 >С какой версией сисярпа идет? А какую представляли на конфе, вась? С семёркой, и пока что не идёт (точнее идёт только в первью версиях студии) >Внутрях это как работает? Как анонимный тип или неявно приводится к Tuple <? Когда выйдет — узнаешь. Судя по показанному синтаксису — как анонимный тип.
>>879482 > Удобнее обычного asp.net или одна хуйня? Ебать, его теперь под линапсем можно запускать, лично меня, на данный момент, удобство волнует мало. мимодругой
>>869105 (OP) Вечер в хату. Подскажите как делается динамическая замена плюсовых dll во время выполнения .Net программы. Надо при выполнении какого-то условия подгрузить С++ либу A.dll из папки 1, а при не выполнении С++ либу A.dll из папки 2.
>>879482 Я пробую, по ощущениям - почти прорыв: что-то допилили до конца (асинхронные партиалы, теперь называются компоненты), что-то объединили (web api and mvc теперь от одного класса наследуется), а эти сладкие nuget пакеты... очень продуманно с модульностью, такое чувство, что еще чуть и можно будет собирать приложение как конструктор
>>879482 конфигурация самого приложения мне напоминает старый добрый owin (это плюс) объединение webapi и mvc мне казалась гениальной идеей до того момента, как я не стал строить адекватное rest-вебапп. вот тут я сразу не понял сути пространства имен Microsoft.aspnetcore.webapi. то, что оно делает, не стакается с ~.mvc и в рантайме получается какой-то трешак (некоторые полезные в обеих случаях штуки, к примеру, роут атрибуты, присутствуют только в мвс). для поддержки перекатывания был выпущен webapicompatshim, но получается, что в одной части ты работаешь с httprequestmessage, в другой с httpcontext и это мне показалось странным еще у меня есть претензии к нативному dependency inhection фреймворку, но есть вариант, что это говно просто вот так работает и я чего-то не знаю
в целом я особо не жалуюсь. как тут один товарищ упомянул модульность - она прям самое то, что надо
если кито знает, есть ли серьезная просадка в перфомансе при использовании .netfx библиотеков в .netcore приложении?
>>879745 >мне казалась гениальной идеей до того момента, как я не стал строить адекватное rest-вебапп Ну а вывод тут один: надо делать SPA на typescript + WebAPI, остальные подходы устарели.
>>879801 По-моему с таких проектов валить нужно (может даже из компании), если на таком старом говне пишешь. Сам сейчас на 4.0 пишу, а то и ниже лол, а до этого на 4.6 сидел. Не хватает конечно async / await, да и сахара из 4.6. Теперь страдаю от этого говна и собираюсь перекатываться в другое место.
>>879748 Пилил недавнополгода назад сдк к одному WEB API на TypeScript + Angular + Karma + Jasmine. Скажем так, прикольно, но не удобно: - Некоторые вещи приходится реализовывать хаками, так как TypeScript видите ли такую запись не поддерживает (promises, d.ts файлы - вот это все из этой оперы). - Некоторые вещи не покрываются тестами вообще не в какую. - Часто приходилось отходить от строгой типизации. Меня часто просто вынуждал язык использовать any. Хотя, казалось бы, писал довольно тривиальные вещи. Возможно язык станет лучше, если запретить это слово к применению, но нет нормальных замен. Возможно я чего-то не понимаю, в целом TypeScript не понравился.
>>879801 >Кое-где до сих пор под второй .net пограмируют легаси говно Что мешает перейти на 4.6.х? Обычно эти вопросы решаемы при должном обосновании. Мне часто приходится решать задачи на экспериментальных фреймворках/утилитах, так как почти всегда не достаточно просто написать код, чтобы он работал. Код должен быть эффективным и простым среди аналогов.
>>879818 >валить нужно (может даже из компании), А если даже на собеседование никуда не приглашают, потому что опыта 0 в резюме Я же не синьор у которого 20 вакансий на выбор. Меня пригласили на целых 3 собеса за 3 месяца.
>>879830 Зависит от руководства на самом деле. Я например сейчас на корейцев работаю и у них свое мышление от которого можно охуеть порой. т.е. если ты захочешь перевести проект на новый фреймворк это нужно обоснавать в письменном виде какие это плюшки принесет, почему, нахуя и т п. И да - у них своё понимание плюшек.
>>879835 Набирайся опыта, учи попутно core / mvc 5 тогда, хули. А на сколько вакансий ты примерно откликнулся?
>>879840 >Что ты такое в резюме написал, что все так плохо? То что знаю, то и написал + образование. > Так не бывает. Обязательно найдется пара проектов для себя/знакомых, которые сойдут за опыт. Я писал проекты, они конечно не йоба, а чтобы продемонcтрировать что я не хуй с горы. Это наверное рандом Знакомого на галеру взяли: он показал пару лаб, спросили английский и попросили сделать реверс строки. Второй попал на галерные курсы и после них взяли веслать. Уже все подзабыл, что связанное с вебом, потому что все технологии, которые используются на проекте, 2005 года.
>>879745 Только напоминает? Он построен на Owin Что-то не понял где объдинение mvc и webapi дало сбой? Подробнее плз DI все мои потребности покрывает, мне нравится, чем тебя не угодил?) Кстати, можешь любой другой поставить
>>879801 >>879818 Async/await, говорят, можно завести на net framework 2.0. Только немножко с nuget кое-чего подключить. Ведь основное (конечный автомат) делает компилятор
>>879921 > Только напоминает? Он построен на Owin я, может, невнимательно читал, но сей детали не увидел. а даже если и увидел, то что это меняет в моем сообщении?
> DI все мои потребности покрывает, мне нравится, чем тебя не угодил?) я пытался заиспользовать контекст базы данных (зарегистрированным как AddScoped<>) в одном из Middleware (причем, не как чайлд самого класса миддлеваре, а как созданный инстанс в рамках исполнения метода). так вот эта хуйня не диспоузала dbcontext при выходе из метода и фактически протаскивала этот инстанс везде, где только он дальше использовался даже в рамках другого реквеста. я, конешно, подозреваю, что мой подход был так себе, но и документация тогда получаецца врет ибо контекст жизни для Scoped-зависимостей - это Context, а не реквест
> Кстати, можешь любой другой поставить ну зачем, собственно? тимболие што я, субъективно, вижу (пока что) в этом больше геморроя, чем толку
Какие задачи вообще асперы решают? Хочу вкатиться в веб и asp.net, но у меня опыта в вебе нуль. Надо ли уметь верстать, обязательно ли знать js и его фреймворки? Из опыта только си, и то на начальном уровне.
>>880197 > Надо ли уметь ну я совершенно честно заявляю, что в клиентской разработке я еблан полный и делаю все с гуглом напару. кому-то в основном это не нравится сразу и они махают мне ручкой либо эйчарше нужно выполнить месячный план собеседований и меня тянут дальше к техспецам под предлогом "ну хули там можно выучить наверное да"
по большей части - это корректировка/расширение API и бизнес-логики приложений. если нету специально обученных DBA, то еще попросють влезть в кверяние базы данных
>>880599 > inherited from System.Web.Http.ApiController воу, я уж чета не смотрел, что писал. ну, в общем, это все мне стало доступно после того, как я подключил Microsoft.AspNet.WebApi.Owin. вангую, что это для ASP 5 и все такое, но это мине студия подсказала, это ния
> Значит ты что-то делаешь не так ну тут как сказать. я использовал замыкание на IServicesCollection и юзал его как Service Locator (знаю, что это анти-паттерн, но не суть). в статическом методе одного из Middleware брал реализацию нужного мне всего (в т.ч. зависимости уходили вниз до DbContext), делал дела, метод завершался (тут я даже обнулял ссылки на сервисы дабы ускорить умирание некоторых из инстансов) и все были счастливы, кроме меня. вот тут-то я и подумал, что AddScope<> привязывает объекты к контексту, а не реквесту, как сказано
> Что это за контекст? если в двух словах, как я это понимаю, то это область привязки и видимости объектов вообще, нормального описания данной проблемы в околоmsdn-ской среде я слабо нашел, в основном бложики, и те, по большей части, опираются больше на ObjectContext (зачем-то) и производные. я черпал свои говнопознания что-то вроде бы отсюда http://daxgrom.com.ua/info/platforma-net-programmirovanie-i-bezopasnost/obekty-i-kontekst и уверен, что не разобрался до конца во всем происходящем
> Кстати, где документацию читаешь? пробовал тут https://docs.microsoft.com/ru-ru/aspnet/core/getting-started но майкрософт любит давать примеры в стиле "для даунов", посему я перешел просто в гугл по вопросам, что нужно решить. также решил на метаните почитать, но там сплошной перевод вышеуказанного сайта + адаптация своих ранешних написалок по asp.net, потому стало тоже неинтересно
>>880753 Можешь кинуть код, где ты в конифигурации прописываешь зависимсть для класса, который не диспозится? Когда-то у самого были проблемы с незакрывающими соединениями из за DI и на БД весели тысячи соединений, хотя я конечно использовать сторонний DI фреймворк. Так что интересно было бы посмотреть, что у тебя не так там. Мимодругой-анон
>>880780 у меня не создавалось много контекстов, у меня все проходило через один, соединение с которым было открыто практически с самого начала работы приложения
код - это будет громоздко и неинформативно, тимболия я его снес суть в том, что в одном из Middleware (об котором ни одна хуйня в интернетах не обмолвилась, что инстанс создается при старте и является статическим для всех реквестов), вызывалась такая штука var service = (IServiceCollection).Resolve<MyGovnoService>(), одной из дочерних зависимостей которого был контекст. регистрация зависимости DbContext происходила буквально таким образом: services.AddScoped(typeof(DbContext), typeof(MyContext))
>>880842 Хм, по-идее все ок должно быть, но с этим встроенными DI фреймворком хуй знает как все работает. Я бы еще попробовал бы регистрацию через services.AddScoped<type, type>(); или services.AddSingleton<type, type>();
>>880850 <T1, T2> не получалось т.к. дбконтекст находится на один уровень ниже в архитектуре WebApp-Bll-DAL и недоступен для веб-приложения. посему мне приходилось с помощью MEF коллектить зависимости в виде {SourceType, DestinationType, Scope} и уже вот таким говном их регистрировать ну DbContext как Singleton у меня не возникло мысли регистрировать
>>880911 clr via c# Рихтера, а затем можно курить доки по asp.net на офф. сайте. Либо сразу начинай читать доки по asp.net. Ну это в случае веба естественно.
>>880930 Про EF можно и в доках asp.net читать - благо там много знать не нужно. Да и на EF весь свет клином не сошелся. Можно выбрать какую-нибудь мини-orm типа дапера или linq2db, хотя с EF в любом случае придется работать, да.
Сап, ребят, а есть С# 6.0 Троелсена на русском? Никак найти не могу где скачать бы. Слабоват пока в английском, посоветовали одновременно читать его на русском и английском, нашёл только 5.0.
>>869574 Нихуя. Дергать резолвы ручками можно только при конфигурации контейнера. Иначе вся суть контейнеров пропадает. В бизнес-логику лезет какой-то блядский код контейнера, если решим спрыгнуть с контейнера или перелезть на другой придётся вычищать кучу этой хери. Так что не надо дергать ресолв там где не надо.
Я совсем ньюфаг и не понимаю. Пример с msdn: public string Name { get { return name; } set { name = value; } } Что делает set? Что за виртуальная переменная value, которую не нужно объявлять? Как set участвует в вызове этого самого свойства?
>>881279 Ой пиздец. Set устанавливает свойство. value это значение которое передается в set которое требуется установить. ClassName fuck = new ClassName(); fuck.Name = "fuck"; // - вызовется метод set, в качестве value будет строка "fuck".
>>881460 когда тебе функционала полей недостаточно, а поступать как в жабе getField() setField() не комильфо но сиравно компилятор сгенерит методы ну и всякая такая вещь как инкапсуляция
>>881463 у тебя есть класс с публичным полем Name работа инстансов этого класса в дальнейшем по приложению сопряжена с тем, что Name не должен быть null/empty/whitespace, если длина не более 16см, а начинаться с заглавной буквы - это вообще пиздец как недопустимо
у тебя есть два пути: создать метод SetName(string name) или проводить проверку перед каждым вызовом obj.Name = {value}. фактически - первое реализовано как свойства в .NET. get {} это == GetName() {return name;}. set{} это == SetName(string name) { CheckName(); name = {value}; }
>>881480 Контейнер конфигурируется и присутствует только в проекте исполнения. Никаких резолвов не надо дергать. Все инжектится через конструкторы, если требуютя разные реализации, то применяется регистрация по условию. Все уважаемые DI фреймворки это умеют.
>>881489 Ну коллега прав. По факту у тебя тырфейс IHuyService должен содержать тоже методы Get, Delete, Modify, Add.
Сначала покажется что дублирование кода. но на самом деле у тебя в интерфейсе сервиса может быть например 3 метода Get, Save, Delete. А Save уже по своей логике будет вызывать Add или Modify.
Потому для сервисов и репозитроиев отдельные интерфейсы
Подскажите чего почитать по P/Invoke в C#. Желательно не отдельные книги, а статьи в интернетике. А в идеале, просто поясните, правильно ли я понимаю суть P/Invoke'а - с помощью него можно делать всякие низкоуровневые штуки путём импорта функций из различных .dll и объявлений в коде соответствующих структур? Может, подкинете примеров из своего опыта, что можно мощного сделать на P/Invoke?
Гуглится всё следущим образом. Сначала тебе нужна какая-нибудь функция, как правило она на C++ и как правило вызывает виндовую dll. Иногда может быть другая dll. В случае если функция виндовая, но гуглится на msdn. Например недавно я гуглил функцию GlobalMemoryStatusEx, которой нет в C#. Нашел. Дальше в гугле вбиваю "GlobalMemoryStatusEx Pinvoke", после чего гугол находит мне объявление этой функции вместе со структурой которая там используется:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public class MEMORYSTATUSEX { public uint dwLength; public uint dwMemoryLoad; public ulong ullTotalPhys; public ulong ullAvailPhys; public ulong ullTotalPageFile; public ulong ullAvailPageFile; public ulong ullTotalVirtual; public ulong ullAvailVirtual; public ulong ullAvailExtendedVirtual; public MEMORYSTATUSEX() { this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX)); } }
А дальше я просто вызываю эту функцию таким образом: public static ulong GetFreeMemoryMb() { WinApi.MEMORYSTATUSEX memoryStatus = new WinApi.MEMORYSTATUSEX(); WinApi.GlobalMemoryStatusEx(memoryStatus); return memoryStatus.ullAvailPhys / 1024 / 1024; }
И всё. Случаев чтобы какая-либо виндовая функция не гуглилась и не находилась её декларация у меня еще не было, поэтому самостоятельно даже не приходится всё это писать, достаточно нагуглить и скопипастить. Иногда бывают не самые оптимальные объявления, но как правило они оптимальные. В крайнем случае можно изучить как это всё маршалится и заебенить всё самому, но в результате будет всё по сути то же самое.
>>881338 Спасибо, ты расшарил в паре предложений то, что не могли расшарить мне трое других людей. А зачем вообще свойства требуются? Почему нельзя просто объявить поле public string name в другом классе и уже с ним оперировать?
>>881639 в WPF окна, не формы. мне лень заморачиваться и вчитываться откуда и куда ты кидаешь коллекцию, но я заметил, что ты селектед индекс биндишь к свойству, но тут есть 3 проблемы уа первых: ващпе, для биндинга принято делать класс, который в паттерне MVVM будет выполнять роль ViewModel. в конструкторе окна делаешь DataContext окна объектом этого нового класса-ViewModel. при биндинге xaml'а именно в вроде бы первом назначенном, не равном null, контейнере контрола, на котором обрабатывается текущий биндингDataContext'e ищется свойство, которое ты привязываешь уа втарых: в классе ViewModel реализуешь интерфейс INotifyPropertyChanged, там всего 1 событие. у третьих: свойство для биндинга придется делать не автореализуемое, а поле + свойство, + в set {} рекомендуется делать проверку, что новое значение != текущему, ну и вызываешь событие из INotifyPropertyChanged примерно таким образом: if (PropertyChanged!=null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs("propertyName"))
или, если не ебёшь говно мамонта и при этом пишешь на wpf, ну пиздец, а пишешь на C# 6.0 , то одной строкой PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedIndex))); у пятых, по дефолту биндинг в режиме OneWay, т.е. когда ты кликнешь на другой элемент три вью, селектединдекс не изменится, чтобы он изменился, нужно уебать режим биндинга (в кзамле) OneWayToSource
>>881747 студия для WPF уже достаточно давненько предлагает накатить атрибут, по-моему InvokationTargetName, который подсовывает по-умолчанию значение, аналогичное nameof(InsidePropertyName), что позволяет вызвать ивэнт как PropertyChanged.Invoke(this), что, мне кажется, достаточно крутецкой альтернативой
>>880753 >подключил Microsoft.AspNet.WebApi.Owin. Зачем ты это делал? Это же одна из фич новой mvc - объединение mvc и web api (никакого дублирования кода, удобство, полная объдиненные роуты), а ты от этого собственноручно отказываешься. Тебе же на стеке ответили: наследуйся от Controllers. Может все же стоит документацию глазами пробежать? ;)
>>882200 потому, что это объединение также уебищно, как и в старом mvc наличие actionresult. фактически я не могу сконструировать статически типизированное api, имея при этом возможность возвращать statuscode в случае чего стандартными средствами. приходится городить хуй знает што
>>882237 Но зачем? Если все хорошо - он сам добавит 200, если плохо - ты явно вернешь это (return StatusCode(418);) Это же тип стандарт. Да и, думаю, если задаться - можно поискать где переопределить так, чтоб не забыдлкодить, няш)
Котики, скажите вот что, есть класс Корпус, а в него ставится Пилот. Когда вставлется пилот, бафы(бонусы) которые пилот дает переносятся в список бафов корпуса. Каждый раз когда пилот добавляется, добавляются бафы, потом идет пересчет характеристик внутри корпуса. А есть еще оборудования в Корпусе. И тут хуйня, вот добавил пилота, а пилот дает +50 к реактору. А потом навел на подсказу реактора, а там хуй, не пишет что дает +50 реактор. Ибо дает корпус за счет реактора, а не сам реактор. И тут я думаю, что наверное надо кидать бафы в оборудование( типа +50 реактор), а не в корпус. Вроде же совсем просто, но что-то меня тут смущает.
>>869105 (OP) Каким способом в C# можно реализовать циклическую очередь? Может ли System.Collections.Queue решить вопрос, или проще вообще юзать указатели. Просто это как-то небезопасно
>>877296 >ServiceLocator - который сейчас считается антипаттерном По мнению одного бородатого пидора, который заебал везде пиарить свою книгу по DI. С объяснениями уровня "generic методы абсолютное зло, их бесконечное число, и вообще нарушают инкапсуляцию". Ну и полным отсутствием понимания что такое антипаттерн вообще (поди и паттерн тоже).
Ананасы, а кто как свои веб-приложения деплоит? У нас в компании просто отбитая нахуй политика безопасности и из-за этого невозможно сделать расшаренную папку на веб-серваках куда бы все и деплоилось. Поэтому все деплоится все ретардксим способом: приходится паблишить на локальные компьютер, подключаться по rdp к серверам( а их целых 2) и копировать с локального компьютера в папку с веб-приложениями. Меня это заебало и я просто написал powershell скрипт, который занимается деплоем на самом деле нихуя, начальству и тут что-то блять не нравится в 1 клик на оба сервака. Приложение естественно не в облаке, а на удаленных машинах под виндой. Слышал, что есть от мелкомягких какая-то тулза sync, которая занимается из коробки этим, но так и не понял как она работает. Билд сервер вроде teamcity я думаю просто так хуй мне разрешать поставить. Интересно было бы послушать про ваших стори кто как этим занимается.
>>882331 Я читал что там возможны проблемы с утечкой памяти, тк servicelocator это синглтон.
Лично мне не нравится что тесты усложняются. Я не могу закинуть зависимости в конструктор, мне в каждом тесте приходится реализовывать фейковый SerLoc.
>>882324 нам в универе для этого рекоммендовали делать АТД, у которого 0 и 1 элемент коллекции указывают на начало очереди и количество элементов в очереди соответственно, ну и от этого плясать. у меня вроде даже реализация осталась. если интересно - скину.
>>882296 ты понимаешь всю уебищность ситуации? у меня API с возвращаемыми объектами типа IActionResult. это может быть ObjectResult(UserDto), FileStreamResult, null, еще какая-нибудь хуйня. а если результат экшена будет тот же UserDto, то я уже никаким боком не втулю StatusCodeResult. конечно, можно пойти тем путем, которым это сделано в старом WebAPI - если нада статус кодэ, бросаемся HttpResponseException(StatusCode.Kek), а фильтры сделают все остальное. и, возможно, было бы неплохо, но я на основе исключений уровня BLL формирую нужные мне статус коды и возвращаемые объекты. посему от такой хуйни как try {} catch {throw new} ушел.
>>882316 вопрос в чем? когда ты вставляешь что-то куда-то, тебе нужно чекать эффекты, накладываемые вставляемым объектом и прокидывать их выше по уровню. т.е. тебе нужно построить дерево со связями от дочернего элемента к родительскому (либо двусторонний тип связи), ну и дальше все остальное
>>882362 ну тут всякое у меня бывало. от ручного копирования по rdp/ftp (и правки всех конфигурационных файлов, которых было пиздец как), до билд сервера, который менеджит все экварменты, включая продакшн и говнодев. удобнее всего, конечно, пользоваться Deploy опцией с Visual Studio, но это для серъезных проектов обычно не подходит
>>882389 >вопрос в чем? Не, брат, выше прокидывать не нужно. Поставил пилота в корпус, накинул баф на оборудование. Вопрос в том что так делать номрально? Сделать публичные методы у оборудования .AddBuff() .RemoveAllBuffs(), или может это проеб архитектуры?
>>882455 > потом навел на подсказу реактора, а там хуй, не пишет что дает +50 реактор а тут ты предлагаешь гадать, что и как ты делаешь и что у тебя кому не дает
> Сделать публичные методы у оборудования .AddBuff() .RemoveAllBuffs() вещь, которая тебе в дальнейшем устроит спагетти в коде. да и вообще такие штуки опасны в публичном доступе. на уровне internal, а лучше всего private в какой-нибудь абстрактной абстракции - идеальное место для этих методов
INotifyPropertyChanged не помог. Но я всё-таки понял, в чём был косяк. Нужно было привязать свойство Text комбобокса.
Почитал про INotifyPropertyChanged и появился вопрос: pastebin.com/2ugnhW0a Эти записи равноценны? В 1-ом варианте неявно вызывается Invoke или как? Объясните в чём разница
Шарпаны, поясниет чего хочет от меня студия. Есть буквально пара строк кода. Сразу оговорюсь, что код работает. Но студии он ненравится.
var g = Graphics.FromImage("test.bmp"); g.DrawString("test", new Font("Microsoft Sans Serif", 99.9F, FontStyle.Bold, GraphicsUnit.Point), new SolidBrush(Color.White), new Rectangle(0, 100, 200, 200), stringFormat);
Куча предупреждений на эту строку. вызовите System.IDisposable.Dispose для объекта 'new SolidBrush(Color.White)' перед тем, как все ссылки на него будут вне области видимости
И так для каждого аргумента, для SolidBrush, для Rectangle. Короче для всего что я создаю через new. Ругалось и на stringFormat, но его я создаю отдельной переменной. Добавил строкой ниже stringFormat.Dispose() и на него ругаться перестало. На остальные продолжает. Но я не могу им сделать Dispose. Я где то хуй или это можно спокойно игнорировать?
using(var brush = new SolidBrush(Color.White)) using(var rectangle = new Rectangle(0, 100, 200, 200)) { g.DrawString("test", new Font("Microsoft Sans Serif", 99.9F, FontStyle.Bold, GraphicsUnit.Point), brush, rectangle, stringFormat); }
>Я где то хуй или это можно спокойно игнорировать? По идее метод Dispose вызывается в деструкторе, так что утечки быть не должно. Но это считается плохим тоном - не освобождать неуправляемые ресурсы сразу после использования.
>>882763 Короче попробовал и в визуале и хамарин студио накатить, что-то не работает нихуя. Есть где-то нормальный гайд как начать пилить приложухи на андроид?
>>883458 Спасибо, помог. Вот ещё глупый вопрос, ну я только начинаю. http://pastebin.com/0WuNjwPE Вот класс. В нём при запуске кода происходит NullReferenceException хотя я и юзаю SomeCycleQueue.Cenqueue(penny); То есть я посылаю объект, он должен копироваться в newcoin. Я хотел попробовать принимать ссылку на объект, там создавать объект Coin конструктором копий по этой ссылке и его уже в enqueue. Но блин, как-то это всё запарено. Должен быть простой метод.
>>883530 Блять, ну ты бы хоть контекст подкинул о чем речь. Как я понял разговор про тестирование - когда ты тестируешь что-то и в коде есть метод, который цепляет данные из БД, то тебе не обязательно использовать реализацию этого метода, которая работает напрямую через БД. К примеру у тебя есть интерфейс и реализация интерфейса, которая работает с базой. За место использовния этой реализации ты создаешь мок-объект, который возвращает какие-то данные а какие - ты сам можешь определить в рамках тестирвоания и дальше ими уже оперируешь. Про мок-объект я надеюсь нагуглишь.
>>883534 я не про тестирование. задание дали вот такое: >Прочитать из базы данных массив объектов Animal >Передать массив в виде модели в представление >Отобразить данные, используя шаблон >Методы работы с базой данных могут возвращать фэйковые данные, цеплять реальную бд не обязательно.
в представлении написать форму добавления новой записи, при этом сервер должен вернуть готовый для вставки html(это как блядь?)
>>883538 Ты бы спросил у того кто задание тебе дал, ибо 1-ый и 4-ый пункты противоречат сами себе. По поводу готового html: тут имеется ввиду может быть partial view какой-то, либо можешь сгенерировать читый html на сервере с помощью простой строки, либо t4 шаблона и сохранить эту строку в модель, а во вьюхе вызвать это говно таким образом: @Raw(Model)
>>883538 >>883554 Дополню: если верить последнему пункту, то ты можешь в принципе создать статический класс какой-нибудь, который будет содержать массив объектов над которыми ты и будешь выполнять CRUD операции - чем не замена работы с БД?
Я придумал такой паттерн (пикрилейтед). Суть его в том что многие объекты (в реальном приложении - разных классов) могут одновременно использовать общие объекты, имея на них ссылки. Эти используемые объекты (на пикче класса SUBJ) довольно большие в плане занимаемой памяти, поэтому делать клоны этих объектов каждый раз нежелательно из-за того что растет потребление памяти. В то же время эти объекты (типа SUBJ) могут изменяться их владельцами. Из-за того что у них могут быть и другие владельцы, это ведет к тому что у других владельцев фактически происходит подмена данных, чего быть не должно. Я придумал хранить количество ссылок на объект типа SUBJ при его прикреплении к родительскому (на пикче типа USER) и если объекту USER требуется поменять состояние SUBJ, то: 1. Если число ссылок равно единице, то просто меняем состояние SUBJ. 2. Если число ссылок больше единицы, то клонируем объект, число ссылок в старом уменьшаем, в новом (клоне) увеличиваем и становимся его единственным владельцем, после чего меняем его состояние не боясь затронуть остальных владельцев SUBJ.
Вопрос: как называется этот паттерн? Я помню читал книгу про паттерны, но по-моему не встречал такого. Алсо, интересно есть ли более продуманные реализации данной схемы.
>>883793 Хуй знает. Я не паттерналист, но мысль вкину. Мне кажется говна тут хлебнуть можно со всем этим количеством ссылок, которые нужно диспозить еще как-то тебе. Не проще ли сделать статический класс, который бы был ответственен за выдачу этих тяжелых объектов (т.е. по-сути делал бы глубокое копирование твоего толстого объекта и возвращал копию). А GC сам бы всю работу делал по утилизации всего этого говна, когда объект user уничтожался бы. Это вообще на паттерн не очень похоже ибо в реализации и поддержке как-то уж геморно получается и слишком специфичная хуйня.
>>883829 >Мне кажется говна тут хлебнуть можно со всем этим количеством ссылок, которые нужно диспозить еще как-то тебе. При бросании объекта SUBJ счетчик ссылок у него уменьшается. Но это не обязательно и даже если счетчик ссылок будет выше реального количества ссылок это приведет только к лишнему клонированию, но не к неработоспособности программы. Вести учет ссылок действительно геморно, но в моем случае учитывать присоединение объекта (т.е. увеличение счетчика) (а это самое главное) было легко, а уменьшение счетчика трудно, но последнее не является для меня проблемой, по крайней мере пока.
> Не проще ли сделать статический класс, который бы был ответственен за выдачу этих тяжелых объектов Это приведет к сильному расходу памяти, что неприемлемо.
>>883843 А можешь пример какой-то привести, где это можно использовать в реальном приложении? Мне почему-то кажется, что есть вариант получше и ты просто не в ту сторону копаешь.
- Есть объект SUBJ. - Его могут использовать разные классы. - Некоторые из них могут его менять. - Объект SUBJ очень большой, поэтому лишних клонирований в идеале быть не должно. - Изменение каким-либо классом объекта SUBJ не должно сказываться на остальных владельцах этого SUBJ (за исключением случаев когда это делается намеренно).
>>883853 Не-не, ты меня не понял. Я имел ввиду какое-то реальное приложение в котором бы это было задействовано и как бы оно использовалось. И типа что это за приложение: веб / десктоп / мобилки; откуда эти тяжелые данные бы брались и т п. Твою идею я понял, но мне интересно реальный кейс какой-то было бы почитать.
>>883861 И что это поменяет? Я просто не понимаю смысл. Придумаешь как надо поменять приложение (т.е. ТЗ) чтобы его можно было выполнить проще?
Ну ок. Приложение десктопное для анализа фин.рядов, что-то типа тестера стратегий. Объект SUBJ содержит массив баров финансового инструмента и может использоваться для показа на экране в MDI-окне (условно объект класса USER в моих картинках выше, в реальном приложении объект называется Graph, который через цепь объектов в конечном итоге принадлежит MDI-окну) и для прогона по нему стратегии (объект класса Strategy, на картинках я его не показывал, т.к. это сути не поменяло бы) и индикатора (класс Indicator). График можно: - Загрузить из файла в MDI-окно. - Скопировать из одного окна в другое. - Изменить состояние графика в окне (изменить таймфрейм, удалить часть баров, добавить новые, слить с другим и так далее). Это не должно отразиться на других окнах куда или откуда был скопирован этот график ранее. - Использовать в качестве входного графика для стратегии или индикатора. Последующее редактирование графика в окне не должно повлиять на график выбранный для стратегии. Для стратегии можно выбрать любой график из любого MDI-окна.
Суп шарпаны, выполняю простенькие задания для студентов и немного застрял в реализации (задача номер 5 http://www.itmathrepetitor.ru/prog/zadachi-na-vychisleniya) В чем именно ошибка? Видимость переменной же должна быть в пределах цикла.
public class Program { public static void Main() {
const int maxi = 4, maxj = 13; char[,] arrayD = new char[maxi, maxj]; bool flag = true; for (int i = 0, j = 0; j < maxj; j++) { arrayD[i, j] = '*'; if (flag) i++; else i--; if (flag && i == 3) flag = false; if (!flag && i == 0) flag = true; }
for (int i = 0; i < maxi; i++) { for (int j = 0; j < maxj; j++) { Console.Write(arrayD[i, j]); } Console.Write('\n'); }
>>884125 Спасибо анончик, понять не мог почему компилятор орал на все подряд, а не на эту строчку. Кстати, есть ли вариант залить ячейки массива идентичным символом не используя проход по каждой?
>>884126 >Спасибо анончик, понять не мог почему компилятор орал на все подряд, а не на эту строчку. Я и сам удивился. Вообще в 90-х такое часто случалось с компиляторами, а сейчас это редкость.
>Кстати, есть ли вариант залить ячейки массива идентичным символом не используя проход по каждой? По сути нет. Есть функция Array.Clear, но она заполняет нулями и является целой функцией со своим кодом. Алсо, двухмерные массивы что ты используешь достаточно медленные в своей работе. Если приложение "performance critical" то их лучше не использовать. Впрочем это явно не про студенческие лабы.
>>884140 Я вроде использую что ни наесть стандартные двумерные прямоугольные массивы. Есть решения, которые позволяют работать с такими данными быстрее?
А почему зубчатые быстрее? Мне казалость компилятору без разницы как рассчитывать адрес ячейки или тут другая механика? Я просто до этого на Си писал для контроллеров, более менее в программирование умею.
анон подскажи. из конроллера во вюху передаю list<person>. во вюхе обозначил >@model list<test.model.person> данные вывожу через foreach. но есть проблема. мне на этой же странице надо добавить форму, которая должна быть написана на шарпе(тобишь html.editfor/labelfor и др.), но т.к. у меня модель - перечисление, то нихуя так не получится?
Прочитав этот тред, я проиграл так, как не проигрывл очень давно. Нет, я знал что на дуднетах пишут анальные рабы мелкософта, и всё, что связано с дотнет парашей - оплачивается на уровне пхп (а то и ниже). Но что их уровень настолько низок - не знал. И уж точно не подозревал, что хамарин "программисты" не слышали про FireBase TestLab. А господа дуднет-рабов из мелкософта понтуются библиотечками для распознавания лиц, и совместимостью с Linux в 2016. Посмотрев мельком скрины в треде, стало понятно, что в мелкософте есть 2 типа дизайнеров: офисная крыса с кризисом среднего возраста, которая уже лет 10 пьёт чаёк, и молодой любитель лсд, который учится по заветам старшего.
Ладно, дебилы, поссал на вас - и пошёл дальше работать мимо-джава-господин-150к
>>884287 Установи обе версии - в чем проблема? 2017 сгодится как песочница какая-нибудь, где поиграться можно. А в 2015 можешь что-то писать / открыть другие проекты у которых будут проблемы с совместимостью из под 2017 студии.
Аноны, подскажите такую штуку. Есть класс с двумя функциями, назовем скажем Foo() и Bar() Функцию Foo() вызываю я сам, функцию Bar() вызывает другой элемент фреймворка, в неизвестный момент времени после вызова метода Foo(). Вопрос: Как мне, фп-way, передать некое значение из метода Bar() в точку вызова метода Foo()? Если кому-то интересно - язык C#, платформа Xamarin.Android Исходники - http://pastebin.com/NLuNXA6c если убрать все лишнее
>>884636 OK, раз методы вызываются в разное время тут без промисов не обойтись. Я бы заюзал Task + TaskCompletionSource
Еще что бы не забивать активити лишним кодом, вынес бы логику в отдельный класс PromiseFactory и положил бы в какую-нибудь папочку типа Utils или Common
>>884675 Кстати, там можно сделать чуть проще. Заменив readonly List<TaskCompletionSource<T>> sources = new List<TaskCompletionSource<T>>(); на event Action<T> notify;
Сишарпач, расскажи каким DI контейнером пользуешься. Каким пользовался. Плюсы и минусы того или иного контейнера, так сказать из личного опыта. Что можете посоветовать?
Пытаюсь вкатиться в дотнет (asp mvc), смотрю курсы, считаю книги. Очень не хватает самостоятельной практики, отсюда и вопрос: а с чего начать ? Можете подсказать сайты с задачами/лабами ?
>>884768 Я тоже вкатываюсь, только мне больше интересен десктоп. Пока, чтобы набить руку, решаю элементарнейшие задачи для студентиков - уже нашел нашёл множество моментов, которые были не так очевидны. Если у тебя с этим (базой) проблем нету, то просто начни делать сайты, в чем проблема? Сейчас популярны всякие интернеты вещей. прикрути прослойку между, например, народмоном и телеграммом. Двач имеет апи, сделай сайт которой этот апи бы использовал. Исходить нужно не из выучу язык -> придумаю задачу, а наоборот - вижу задачу, использую язык для ее решения.
>>884702 Ninject - медленный Spring.NET - еще более медленный Unity - не сказать, что пользовался. так, на проекте был, мне не мешал, сам никуда не лез. ничего особенного сказать не могу Structuremap - последние версии, которыми я пользовался, имели просто охуительный эффект, связанный с уровнем доверия к сборкам, т.к. использовал рефлексию во всех загруженных сборках при старке. и посему приходилось там, где не надо, явно указывать подобные секьюрити вещи, что, мягко говоря, печально подходит к сереезным приложениям. надо отдать должное, самый негемморный (если не считать вышеописанного) при встраивании в многослойные аппликухи (ну как по мне). параллельный отряд товарищей работал с ним на супир-пупир-большом приложении, им ничего не мешало. возможно, дело во мне ServiseStack - ничего особенного Microsoft.DependencyInjection - я уже бугуртил где-то выше по поводу него. ну так-то, в целом, резолв делает. что еще от него надо?
>>884820 например ты увидишь, какой из шагов выполняется долго и вообще, что происходит в момент запуска приложения (возможно не нужного на этапе запуска)
>>884780 SimpleInjector пробовал? У меня на предыдущем месте работы его активно использвали. По скорости к сожалению не могу сказать в сревнении с остальными контейнерами, но настраивать и использовать удобно.
>>884860 я активно защищаю ninject иль ты просто к слову? не только autofac пытается поддерживать ~core, в отличии от того же всего остального
>>884864 глянув на статистику https://github.com/danielpalme/IocPerformance, решил DryIoc заюзать. но потом все плюнул и вернулся к дефолтному Microsoft.DependencyInjection посчитав, что на данном этапе бОльшим геморроем является его настройка, а профит, возможно, не так уж и заметен
Шарпаны, вчерашний нюфаня снова врывается в тред. Продолжаю решать студентческие задачи и упёрся в ограничение C# на изменение строк. Коротко задача: обнулить в числе каждое вторую цифру: >45678 -> 40608. Какими средствами лучше всего будет воспользоваться для такой задачи?
>>884878 У меня в голове как минимум 2 решения: StringBuilder и конвертация в промежуточный числовой массив, но мне они кажутся слишком монструозными. Мб есть какое-то более оптимальное решение?
>>884880 а что в StringBuilder тебе кажется монструозным? не, ну смотря, что ты собираешься сделать, конечно. но с его помощью все решение упрется в один цикл и даже без ифа
>>884880 string s = Console.ReadLine(); s.ToCharArray Дальше пробегаешься и заменяешь пробелами, потом каким-нибудь Split или что там убираешь пробелы.
>>884985 пик (заменили List<T> проста на C# event) >>884985 >А расскажите про промиссы, плз Это когда вместо результата ты возвращаешь "обещание когда-нибудь верунуть результат" В комбинирование с await позволяет писать линейный простой код. https://ru.wikipedia.org/wiki/Futures_and_promises
>>885193 есть такая вещь как модальное окно Output в Visual Studio когда билдишь приложение, например, тебе в него пишут всякую хуйню типа 1> Projectname start task compile. так вот, там есть дропдаун, в котором можно выбрать Debug
кому нибудь доводилось ковырять вот этого пацана ↓ [DllImport("kernel32.dll", SetLastError =true)] static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength); через p/invoke? что делать, если при вызове функции для произвольного уже работающего процесса появляется исключение: Access Denied? на msdn'е грят, что у процесса должен быть какой то enum стоять в ACCESS_ALL_ALLOWED, который воткнуть, похоже, можно только при создании, и что тогда делать с уже работающими процессами? алсо, при вызове функции скармливаю ей следующие параметры: VirtualQueryEx(theProcess.Handle, new IntPtr(), out MBI, Marshal.Sizeof(typeof(MEMORY_BASIC_INFORMATION))); где theProcess - процесс, MBI - экземпляр структуры MEMORY_BASIC_INFORMATION, описанной в соответствии с "ГОСТом" или как это блять правильно назвать, стандартом с++-функции?
>>885855 а вот тут ньюанс, у меня нормально считывает инфу с хрома и ноутпада. думаю, есть еще какие нибудь процессы, о которых можно получить эту инфу, но я пока что не понял, по какому признаку различать такие процессы, и мне не нужно, чтобы такой признак вообще был. я хочу получить memory basic information любого процесса, но за ссылку посмотрю, мб найду что нибудь нового
>>885876 да у меня уже заработало. как оказалось, у процесса из System.Diagnostics некошерно брать дескриптор, нужно, блять, через другую pinvoke функцию (см статью вот этого анона >>885855 , спасибо кстати) взять хэндл интересующего процесса, и только потом искать MSI, ну и я структуру MEMORY_SYSTEM_INFO заколхозил, теперь она отличается от каноничной - всё, что не указатель - long. хуйня эти ваши инвоуки, вообщем потому что от них у меня горит очаг.
Дорогие сосцы мойкрософта, запрашиваю ваш ответ. Я хочу податься в веб(студентота), как у вас с этим дела? PHP - язык нелюдей и опущенцев. Python - язык хипстеров с подворотами. Ruby - нет работ. А что касательно связок Asp.net/typescript? Можно ли найти работу разбираясь с этой области? Или лучше таки PHP? Я слышал что он отмирает в угоду node.js, но всё ж таки? js очень уж нелогичный язык, мне неприятно на нем писать. А C# очень нравится, был бы рад приобщиться, но нужна сводка по работам. Живу в мухосранске и если у нас что-то есть - то только по php, так что ориентир на фриланс.
> ориентир на фриланс на фрилансе, насколько я знаю, тоже доминирует рнр и питоны всякие. ну, руби точно есть, насчет asp здешние товарищи убеждали, что работы хватает, но я не встречал прям большого выбора (потомушто не искал)
Анон, дали курсовой по .net сделать интернет магазин. Cтэк: N-tier asp MVC autofac EF CodeFirst
Должно быть 4 слоя: 1) Репозиторий (Абстрагирует от типа БД)? 2) Домен (Хранит сущности с помощью которых заполняется БД по средствам EFCF??) 3) Сервисы (Реализация интерфейсов репозитория??) 4) MVC(Это просто UI? БизЛог в отдельном проекте?) Помоги пожалуйста, я все правильно понимаю или нет? Буду искренне благодарен!
>>886457 это ты начертил мегасхемку? если нет, то даже не знаю, что это значит
mvc - слой, реагирующий на действия пользователя. тут же происходит валидация инпутов, правильное составление ответа юзеру сервисы - и есть твоя бизнес-логика домен - можно сказать, это набор комплексных операций с моделью/моделями репозиторий - круд, отвязанный от конкретной базы данных
Анон, недавно портировал один проект под net45 под netcoreapp1.0, чтобы он работал в CoreCLR на дебиане. Перенёс всё это заставив проект импортировать библиотеки под dnxcore50 и ещё portable-net45+win8+wpa81. Поэтому появился вопрос. Есть одна библиотека https://www.nuget.org/packages/NAudio/ . Собирается под net35 и win8. Можно ли её будет каким-то образом использовать, чтобы всё работало и на дебиане? Поясни, пожалуйста, за платформо-совместимость или ссылкой, чтобы это было поподробнее расписано.
>>869105 (OP) Шарящие анонычи, подскажите. Работаю сейчас в C# с Windows Forms под Visual Studio 2012. Проблема такая, есть 2 одинаковых набора всяких объектов интерфейса (надписи, групбоксы с радио-кнопками, просто кнопки), хочу их загнать в какую-то структурку, чтобы не дублировать один и тот же код с разными названиями кнопочек. Типа есть group1Btn1.Visible = false; ... group2Btn1.Visible = false;
А хочу чтобы было примерно group = group1; group.Btn1.Visible = false; ...
Главный вопрос: как можно автоматизировать весь этот процесс замены первого варианта на второй? Или мб есть еще какие-то иные варианты для решения проблемы?
>>887026 Просто про юниттесты - книга roy osherove unit tests чегототам, в целом дает норм представление и многие моменты разъясняет. Толковый справочник xunit test patterns
По мне, юнит тесты дают максимум выхлопа при tdd. Мой путь был таков: Unit tests for fridy cats like me на pluralsight Еще пачка видосов от туда по этой теме, вплоть до курса марка симана Книжка growing object oriented software guided by tests - вот после нее все встало на свои места и теперь мне без test first жизнь не мила.
Шапка: https://github.com/CSharpShapka/SharpHat/wiki
(пока просто перенесена шапка из ОП-поста, в ближайшее время приведу к более-менее адекватному виду, не стесняйтесь слать свои пулл-реквесты)
Прошлый тред тонет здесь: https://2ch.hk/pr/res/856099.html