Ну и сразу первый вопрос.
Если надо сделать присвоение значений, которые могут быть и не допустимыми, что лучше, пилить 3-10 проверок ifами или тупо блок try/catch?
>>356146
Прочитай чего-нибудь про инвариантность данных, алгебраические типы. Если ниасилишь, то тебе лучше идти работать в макдональдс.
>>356149
Алгебраические типы - создать класс, который в конструкторе будет принимать любые значения а возвращать только в нужном диапазоне? ИМХО всё это абстракция, выполнять анализ всё равно он будет либо сравнениями либо блоком try/catch.
>Если ниасилишь, то тебе лучше идти работать в макдональдс.
Я не работаю программером нефтянник. Программирование - хобби. Однако оно неплохо помогает в работе, в частности запилено несколько очень экономящих время приложений. Но, конечно, хотелось бы развиваться помаленьку.
>>356146
Надо смотреть по ситуации. Трай-кетч обычно короче и проще + можно присвоить что-то дефолтное. Проверки будут раздувать код, но зато можно обозначить поведение в каждом случае отдельно. (Вообще-то и трай-кетчем можно, при условии что сеттер будет кидать разные исключения а не просто throw new Exception("derp"))
Мне когда посоветовали его учить, меня наебали?
Как быть с привязкой данных в комбобокс? Настриваю дисплеед мембер и валуе мембер, но если комбобокс не в дропдаун режиме (т.е. непосредственно когда показывает выпадающий список), он все равно показывает валуем мембер, а не дисплеед.
>>356167
Нет. Хотя ФП-петушки сейчас начнут утверждать обратное, если писать на шарпе в ООП стиле, тянки будут течь, эйчары предлагать стать тимлидом, а билл гейтс зафрендит на гитхабе.
>>356167
>Мне когда посоветовали его учить, меня наебали?
Не программист-кун, любитель, но мне нравится. Хотя и есть области где неприменим (операционки, микроконтроллеры). Геймдев как я понимаю только через Unity.
>>356172
>Геймдев как я понимаю только через Unity.
Геймдев уровня /gd/.
>>356168
давайте с такими вопросами конкретнее. Хотя бы код и платформа (winforms, wpf, qt, etc.). А лучше солюшен в зипник и на ргхост. Только не всю мегатулзу, а только локализованную проблему. Иначе шарпобоги хуй поймут, что от них требуется.
>>356152
Я тебя кажется помню. Ты на делфях раньше писал?
>>356174
Винформс. Есть база данных (microsoft sql server). На одной формочке есть датагридвью и дитейлвью. В дитейлвью один из текстбоксов заменен на комбобокс. В датагридвью один из столбцов заменен на комбобокс. Все забиндино к базе данных стандартными визардами (с автоматическим созданием тейб адаптеров, биндинг сорсов и прочего). В датагридвью комбобокс столбец настроен показывать "NAME", а иметь реальное значение "ID" и с ним все хорошо. Но вот комбобокс дитейлвью ведет себя хуево при такой настройке и показывает "ID" вместо "NAME" до тех пор, пока не нажмешь на него.
Что бы скинуть солюшен, нужно и БД к нему скинуть.
>>356179
Увы, не сталкивался. Отлаживай дебаггером тогда. Ну или замени БД на моковую табличку из одной строки и показывай код.
>>356179
Попробуй selected item задать. и не ленись менять язык, глаза вылезли
>>356192
Да я пробовал. Он выдает привильный ID выбранного элемента, но я хочу что бы он выдавал его имя, а не ID.
Вот проект с проблемным ComboBox, без базы данных, создан локальный DataSet и таблицы, соответственно sql server не нужен.
http://rghost.net/55861821
>>356172
>>Геймдев как я понимаю только через Unity.
XNA еще есть.
>>микроконтроллеры
Можно.
>>356225
Смотрю. Интересный баг, пока не вкурил, в чем дело.
>>356229
>XNA еще есть.
Написать можно и на WPF. Но создание десктопных проектов ААА класса мы тут не осилим, а для простых игрушек нужна в том числе работа на iOS, Android и WP. XNA тут не помощник..
>>356225
Слушай, анон, в этом автогенеренном коде тяжеловато разбираться, но я вижу, что у DevicesTable.ObjectName тип Long, к тому же явно что-то не так с релейшеном твоих данных (пикрелейтед). Почему ты связываешь айдишник со строкой-именем?
>>356237
>DevicesTable.ObjectName тип Long
Так и должно быть, т.к. по задумке DevicesTable.ObjectName это поле ID таблицы ObjectsTable. Но пользователю нужно видеть именно имя объекта, а не его ID. Возможно для правильного восприятия следовало назвать DevicesTable.ObjectName DevicesTable.Object_ID.
>>356240
Релейшен конечно надо слегка переделать, у тебя DevicesTable явно главная, а Objects − дочерняя. Ну и имя колонки конечно стоит переделать. На пике датасорс, с которым в комбобоксе нужное значение, однако он не предлагает вариантов. Тут уж я помочь не смогу, потому что с Winforms работал очень мало, может и сам разберешься, а может анон знает.
>>356255
Боюсь с таким DataSet у меня все осталось по старому, кроме того, появился баг, что при переключении по гриду возвращается старое значение OBJECT_ID в DevicesTable. И еще, на счет дочерних и родительских таблиц. Мне всегда казалось, что родительская это откуда берем, а дочерняя - куда берем.
>>356229
Если зайти на microsoft.com/xna и поискать на странице "xna", а потом "unity", то многое проясняется.
>>356268
http://informatic.ugatu.ac.ru/lib/office/Proekt.htm вот неплохое пояснение.
Net 4.5 надо ли? Только разобрался в Taskах, так тут опять какие-то asunc и await... Брррр
>C# мастеров
Есть ли щас конторы, которые пишут winforms? И что это за приложения? Корпоративные crm и erp? Почему не веб?
>>356167
гавно полное
нет тайпклассов
нет иммутабельности
система типов очень кривая и неортогональная, как и синтаксис (вместо общих методов решения проблем вам вставляют в рот какие-то убогие костыли для частных случаев (IDisposable/using, foreach, LINQ, прочая поебень))
в частности, "генерики" сделаны ещё хуже, чем в джяве™
куча мусора в стандартной библиотеке, а нужных вещей нет
под платформы кроме шиндошс нет нормальной среды разработки (как, впрочем, и рантайма)
>>356479
Еще один школьник, который делит все на говно-неговно. Так было, так есть, так будет всегда.
>>356146
Какието петушиные советы тебе дают.
Только ifы.
Трай кетч не для этого зделоли.
Трай кеч нужен не для логики а для ловли ошибок, работает медленнее чем ифы.
>>356588
>а для ловли ошибок
а не для ловли ошибок
fast fix
.net god
>>356167
>его учить
Язык не учат, там учить нечего. Синтаксис можно вкурить за 15 минут. Задачи надо решать. Нет задач, нету опыта, нет нихуя.
ну вы понели
>>356594
Если я делаю приложение с большим объемом данных, которые надо обрабатывать. Как я понимаю если я буду всё это делать в одном потоке на четырехядерном проце, то три ядра будут простаивать. Соответственно что бы они не простаивали желательно распаралеливать задачи.
Собственно я пользуюсь только
System.Threading.Tasks.Task.Factory.StartNew(метод);
ну и lock в нужных местах.
Чем-то мне async и await помогут тут?
Второй фреймворк тож неподойдет, активно использую WCF и WPF.
.net любитель
>>356603
>lock
Не нужен. Если ты в современных приложениях юзаешь lock, значит ты точно делаешь что-то неправильно.
>>356603
Твой код называется fire and forget. Так как ты не можешь определить когда он кончится и что сделать после него.
Для этого как раз нужен await.
Пример: ты делаешь в таске запрос к БД, надо результат отобразить на таблице, как ты это сделаешь?
>>356611
Дальше, async/await в основном придумали для i/o операций.
Для cpu bound есть например PLINQ.
Но тут уже надо смотреть по ситуации.
всё тот же god
>>356270
Лол, они не справились с конкуренцией?
Мне почему-то казалось что хна это для 2д, а юнити для всякой графновой йобы. Юнити дает те же возможности в бесплатной версии?
Что только бедняши не придумают, лишь бы Erlang не учить.
>>356625
Ну что же вы до сих пор в конкурентное программирование не умеете?
Вам дали акторов, промиз/фьючеры, STM, каналы, нет, блять, не хочу, хочу ReentrantReadWriteLock. Блокировки какие-то, пиздец, перфокарточные технологии.
>>356631
Давай представим что у тебя есть допустим лист стопицот мильенов элементов, который занимает гиг памяти. Ты его будешь копировать через акторов?
>>356620
Использовать потокобезопасные коллекции, например:
http://msdn.microsoft.com/en-us/library/dd381779(v=vs.110).aspx
.net god
>>356636
Это которые копируются при изменении? Они же сожрут всю память.
>>356615
В одной из популярных реализаций синглтона не бейте, лучше обоссыте используется lock, куда ж его там деть.
>>356642
Так оно и время сожрет
>When we say “lock-free,” we mean that locks (in .NET, traditional mutual exclusion locks are available via the System.Threading.Monitor class, typically via the C# “lock” keyword or the Visual Basic “SyncLock” keyword) have been avoided by using memory barriers and compare-and-swap CPU instructions (in .NET, “CAS” operations are available via the System.Threading.Interlocked class).
>CAS
>ебучий атомикреференс
>>356666
Без копий не получится, допустим, итерация параллельно с удалением.
>>356615
>Лучше их избегать, можешь задать вопрос с примером, объясним как переделать код.
Хорошо, вот пример. Есть большая коллекция объектов.
В одном потоке я через цикл foreach перебираю все объекты и выполняю в каждом некоторый метод.
Тем временем через WCF клиент хочет выполнить некоторую операцию, которая может привести к изменению числа членов коллекции. Это априори будет другой поток. Если это выполнить то цикл foreach вылетит с исключением.
В первом потоке я делаю lock на коллекцию и свободно выполняю с ней цикл foreach. А второй поток также пытается залочить коллекцию, но сможет это сделать только когда метод в первом потоке снимет lock.
Что тут не так?
Копия + Interlocked.Exchange, не?
>>356704
Например http://msdn.microsoft.com/en-us/library/dd267312.aspx
Ты спросишь чем хуже lock. Тут однозначного ответа как бы нет. Но для большинства задач подходит то что по ссылке.
Тебе дали инструмент, чтобы ты не писал свои велосипеды.
Да, я на 100% уверен, что ты напишешь свой велосипед с локами, который будет работать быстрее, но только на твоих примерах.
>>356746
Эта хуйня будет просто блокировать при записи. При чем если будет 100 добавлений, то 100 раз будет ждать блокировки, вместо одной поверх. И итерацию все равно придется синхронизировать отдельно.
Короче понятно.
lock лучше не использовать, поскольку он может привести к дедлоку. Для решения данных ситуаций насоздавали кучу способов, которые невызывают дедлок, но каждый с ограниченной областью применения. Учить их все с нюансами, или использовать базовые возможности - дело личное. Ситуация как с goto, можно использовать, можно нет, но реально программы состоят только из if, goto и присваиваний.
Короче банальностей написал, пойду спать :)
>>356813
>реально программы состоят только из if, goto и присваиваний
Ну это у кого как. У некоторых программы состоят только из чистых функций и паттерн-матчинга.
>>356146
Откуда значения-то, блять? Схуев ли они могут быть недопустимыми? У тебя что программа кривая, что она выдает кривые данные?
А если их человек вводит, то в интерфейса и делай валидацию. Но учти, что допустимость должна определять модель, а не представление.
>>356172
>операционки, микроконтроллеры
>неприменим
Ну ты и пиздун.
Раз: http://en.wikipedia.org/wiki/Singularity_%28operating_system%29
Два: http://ru.wikipedia.org/wiki/.NET_Micro_Framework и
>.NET Micro framework
Интересно как там сделана настройка памяти и включение процессора на шарпе. И как сделана работа с программаторами? Они хоть JTAGовские? Их сама майкрософт выпускает?
Да и это же микропроцессор, там ехал указатель через указатель, а это кидает в жопу всю идею менеджируемой среды со сборщиком мусора. В общем реквестирую мнение знающего анона.
>>356838
>Откуда значения-то, блять? Схуев ли они могут быть недопустимыми? У тебя что программа кривая, что она выдает кривые данные?
А если их человек вводит, то в интерфейса и делай валидацию. Но учти, что допустимость должна определять модель, а не представление.
Делаю клиент-серверное приложение. Коммуникация на основе WCF. На клиенте естественно выполняется валидация, но всё-таки считаю нужным предусмотреть возможность перехвата сообщений, модификации клиента или ещё какой хуйни, так что данные также проходят валидацию и на сервере.
>>356930
Сколько раз тебе объяснять?
Exceptions are basically non-local goto statements with all the consequences of the latter. Using exceptions for flow control violates a principle of least astonishment, make programs hard to read (remember that programs are written for programmers first).
Moreover, this is not what compiler vendors expect. They expect exceptions to be thrown rarely, and they usually let the throw code be quite inefficient. Throwing exceptions is one of the most expensive operations in .NET.
>>356930
Тут два варианта. Либо забить и пусть эксепшен прилетает прямо клиенту, WCF это умеет. А если ты хочешь скрыть интимные подробности эксепшена от него, то тебе его где-то надо перехватить и перекинуть новый, менее подробный. Не слушай мудаков, которые говорят, что тут не надо кидать эксепшены. Если кто-то передал невалидные данные на вход - это самый подходящий повод швырнуть в него исключение.
>>356960
Но если невалидные данные очень уж вероятны, то их иногда можно как бы включить в объектную модель и считать их валидными в каком-то смысле. И тогда уже можно не кидать исключения, а предусмотреть коды ошибок или еще что.
>>356962
>предусмотреть коды ошибок
Анон, посоветуй бесплатную или опенсорс либу для WPF, которая позволяет рендерить формулы типа пикрелейтеда. Либа нужна легковесная, никакого win32api, webbrowserов и т.д., нужно нарисовать полторы формулы.
>>356751
Для этого есть семафоры, lock это самое нубское решение.
>>357636
Просто надо писать только локфри
>семафоры
Впрочем, для быдла пойдет.
>>357637
Так было уже предложение использовать тредсейф коллекции.
Конечно тебе на пыхе легко пистаь локфри, у тебя нету многопоточнсти.
>>357640
>Конечно тебе на пыхе легко пистаь локфри
лол мою мать
--мм
>>357643
зачем ты подписываешься модератором, если ты не модератор?
Ананасыч, поясни за .NET native compiler.
http://msdn.microsoft.com/en-US/vstudio/dotnetnative
Это только для ВинФона или и на десктоп идет? Я правильно понимаю, что приложение так же будет анально привязано к .NET Framework и без него не запустится?
>>358971
>и на десктоп идет
да
>анально привязано к .NET Framework
нет
>анально привязано к .NET Framework
>нет
еее
Анончики, а кидайте сюда линки на свой сишарп код, а мы посмотрим, как боги нынче пишут?
>>358971
Кстати, его можно пощупать без смс и регистрации?
>>356145
Что читать, чтобы быстрее перекатиться с плюсов?
>>356234
Есть же MonoGame, кроссплатформенная реализация ХНЫ. Правда, до сих пор не впилили контент-пайплайн, я уже заебался с этим пердолингом с апереносом контента, но ничего, есть у кого-то и проблемы похуже.
Натоны, как устроиться C#-джуниором, где смотреть вакансии? 2-курс-кун, город 1кк населения.
>>359709
>4868 lines
Анончик, нужна помощь. Взялся пилить прогу для личных нужд (работа с БД). Остановился на c# + sqlite. Взял образец из интернетов, все завелось с пол оборота. Радости мей нет предела, я боготворю Майкрософт. Приношу прогу на работу, и получаю огромный болт. Прога ругается на отсутствие dll, которая лежит рядом с екзешником. Докидываю еще dllок (SQLite.NET.dll, Sqlite3.DLL), запускаю - получаю ошибку database error и shema error. Прихожу домой, запускаю - все работает. В system32 этих либ нет. В чем подвох?
>>359778
ВНЕЗАПНО в SysWOW64 лежала нужная dll, а dll из примера ругалась на всех, хотя пример запускала
>>359778
Какой смысл пользоваться левой СУБД, когда есть скуэл-сервер от майкрософта?
>>359781
планирую в будущем сделать многопользовательский режим в виде вебсервиса на php+sqlite, и тогда существующую базу проще подключить, чем переганять из ms sql в mysql
>>359778
дотнетовские сборки лежат в GACе, а не в system32.
Что-то у меня на идеоне не компилируется код из тырнет-урока. Может можно где скачать программу для компиляции на шарпе, чтобы работала бесплатно и без вирусов?
Алсо, кидайте скайпики, кто тоже учит, я нуб.
>>359881
онлайн компилятор? капец наркоман. visual studio express
Скажите, а чего полезного можно делать на шарпе? А то вот прохожу сейчас и не понимаю. Вроде на пыхе и Джаваскрипт можно было сайты лепить, а тут чего? И еще, как можно этот шарп на компе в левом нижнем окошке черном открыть? Мне показывали но я забыл.
Загружаю в datagrid из xml'ки, как убрать фон datagrid'a? Хочу, чтобы отображалось равномерно.
C#-гуру подскажите мне, как запилить свой юзер контрол. Нужно сделать комбо бокс для dataGridView но чтобы пользователь мог писать в него и по его вводу фильтрофались бы значение этого комбобокса. Ибо значений много и прокручивать их всех в поисках нужного слишком долго. Или может быть есть другое решение этой задачи.
>>360318
Кажется ты не очень умный.
http://somecodesnippets.blogspot.ru/2012/04/windows-form-combobox-text-filtering.html
>>360325
Пример подходит для простого комбобокса, а мне нужен DataGridViewComboBoxColumn, там есть просто AutoComplete, но нельзя видеть то, что ты ввел.
>>360319
Нет, первый раз в треде. Если задавать руками - то можно растянуть последний столбец. Как это сделать в моем случае?
>>360332
Ты хочешь изменить просто цвет? или чтобы колонки у тебя были на всю длинну датагридвью?
>>360337
Тогда зайди во вкладку редактирования колонок и выстави нужную ширину или AutoSizeMode.
>>360329
Ну ты же можешь написать свой DataGridViewColumn и DataGridViewCell с этим хитрым комбобокосом.
>>360031 А что такое. Стандартные константы в шарпе - низкой точности.
>>360338
Вы лучше б сказали как автоматическую ширину сделать у колонок ListView/GridView. Или хотя бы готовый контрол скинули
Суп Шарперы, как найти фриланс?
Кто что думает от Немерле?
>>360611
Какое отношение к фрилансерам, если они пидоры? Вот скажу я заказчику, прямо в лицо:я — пидор. Он от меня отвернется или будет толерантным и учитывать только мои профессиональные качества.
Шарпанон, как правильно кидать исключения?
Пусть у нас есть некоторый метод (A), который принимает три параметра и вызывает другой метод (B), который принимает часть параметров метода A.
В методе B аргументы проверяются на правильность, и выкидывается ArgumentException, если что-нибудь не так.
Вопрос: Нужно ли в меотде A проверять параметры, передаваемые в B?
>>360789
Думаю, проверять надо только в одном месте - во внутреннем методе. Особенно если это public метод и/или он используется не только в методе A. Проверять эти параметры в А можно, если там они используются (помимо передачи в другие методы).
>>360752
Если ты говоришь о таких вещах заказчику, то ты поехавшая вниманиеблядь и от тебя кто угодно отвернется.
Боги, подскажите утенку, как сделать foreach для ячеек столбца datagrid, обращаясь к нему по имени.
>>360823
Я понял, что никак.
Алсо, может, шарпоконфу поднять? Задавать вопросы разные туда, думаю, удобнее будет.
>>360844
Бля вы вообще в ирк или джабир вылазите? Я знаю, что у молодого поколения модно скупе, но не думал, что так все плохо.
Все конфочки уже есть и давно
private void readXmlBtn_Click(object sender, EventArgs e)
{
formatsGrid.DataSource = null;
formatsGrid.Rows.Clear(); //не очищает
formatsGrid.DataSource = mlToDataSet(@"\cfg\formats.xml");
formatsGrid.DataMember = "item";
}
>>361103
Подскажи, в скайпе можно отключить звуковое уведомление для входящих в конфе, но оставить для диалогов?
>>361128
Нет понятия диалога в скайпе, просто сигналы о сообщениях для конфы выключить - /alertsoff
>>361196
Создай тред лучше, кто-нибудь да подскажет, базарю.
>>361216 Вообще, шарпоконфа, это слишком узко, а вот /пр конфа, это было бы неплохо.
Давайте соберемся.
skype:inspctr.cat?chat
Можно и оставить в классе наследнике пустой конструктор? :
class Dude : Bro
{
public Dude (string name) : base (name){}
}
Или как ещё можно решить вопрос?
Спасибо заранее
>>362137
Я чет не понял кто тебе запрещает оставлять в наследнике пустой конструктор? Аллах?
Не могу осилить Dapper.Net. Суть проблемы: есть одна база, она MySql и у неё есть немного хранимых процедур, которые надо дёргать снаружи.
Соответственно, у меня в коде написано что-то вроде:
>await connection.ExecuteAsync(
> "DoYourMom",
> new { nigger },
> commandType: CommandType.StoredProcedure
>);
Проблема в том, что процедура вообще не исполняется и не кидает Exception. Проблема не в коде на стороне SQL — вызов руками работает. Более того, когда это ещё работало на EF, вызовы работали нормально(сейчас открыл ту версию сорцов — работает).
Сап, ананасы. Заинтересовала такая задача: есть строковая переменная и цикл из трех итераций. В каждой итерации вводим эту строку с клавиатуры и тут же создаем .txt-файл с таким же именем. Пробовал .ToString()- не получается. Поможете?
>>363520
Да, но как строку с именем, скажем, string a = "asd"; засунуть в filename? Чтобы filename.txt стало asd.txt?
>>363526
Есть. Но она вроде применима только к двум строкам, не? Еще раз: вводим с клавы строканейм, и тут же создается файл строканейм.txt.
Привет, котятки. Надо в DLL откорректировать пару переменных. Делаю все с помощью Reflector и Reflexil, и у меня нихуя не получается - выдает ошибку CS1748. Я нихуя не понимат, как мне ее крякнуть
>>363528
Ты очень тупой школьник.
Возьми код и не приходи сюда более.
static void Main(string[] args)
{
for (int i = 0; i < 3; ++i)
{
Console.WriteLine("Input filename:");
string filename = Console.ReadLine();
System.IO.File.Create(@"C:\" + filename);
}
Console.WriteLine("Ur shit was created, enjoy!");
Console.ReadKey();
}
>>363528
Ну загоняй название файла в переменную и конкатенируй, хуле такого то?
Не удается найти тип взаимодействия, соответствующий внедренному типу взаимодействия "Microsoft.Office.Interop.MSProject.Assignment". Возможно, отсутствует ссылка на сборку.
#region " Referenced assemblies "
...
// - Microsoft.Office.Interop.MSProject v15.0.0.0
...
Спасибо, то, что надо
>>363629
Ну блять, пытался аналогично сделать со StreamWriter-ом, нихуя не выходило. И да, я это делал в дебиане, может, не выходило, потому что не указывал путь. Я ж привык, что все файлы создаются по умолчанию в /home/username
>>356145
ПЛАТИНОВЫЙ ВОПРОС!
Хочу писать в консоль из нескольких потоков в цвете.
Не нашел ничего лучше чем:
lock (logLocker)
{
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("BLABLABLA");
Console.ForegroundColor = ConsoleColor.Gray;
}
>>363901
Это лучшее, что можно сделать стандартными средствами языка. Можешь поискать какую-нибудь библиотчеку, которая делает лучше или не писать в консоль напрямую - сделать объект-буфер, говоришь ему что и каким цветом вывести, он выводит все в порядке получения, блокировки не нужны.
>>363924
>блокировки не нужны
Как же без них обойтись?
Добавление записи в этот буфер все равно же будет лочить.
И нужен будет отдельный поток чтобы записи из него собственно в консоль кормить.
Если я правильно понял. Это еще один лок добавит.
>>363934
Ну ы смысле не нужно будет куждую запись в консоль в лок вручную оборачивать, это будет делаться буфером. И производительность может вырасти, потому что лочить будем не медленный вывод в консоль, а добавление текста в очередь - потоки выполняющие реальную работы будут меньше времени простаивать.
>>363901Console.WriteLine("\033[32mPSHHH PSHHH\033[0m");
>>364063
Эмулятор терминал не поддерживает эти управляющие последовательности.
Попробуй костыль https://github.com/jeremejevs/cmdcolor
Господа, в гейдеве одни тролли, так что вопрос к вам.
Есть ли годные движки/фреймворки для 2D гейдева под C#?
Знаю что есть моногейм, но хотелось бы опций для выбора. Видел байндинг для sfml, но мало примеров и коммьюинити вялое. Про Бнити тооже вопрос, там поддержку 2D вроде как ввели, но хуй его знает.
Си Шарп ковыряю для себя, так что желательно чтобы был и не конструктор, но и не пришлсь писать обертки под OpenGl.
Есть еще что-нибудь что я упустил?
>>364810
Его я тоже упомянул, но как
>Бнити
Лол, случайно вышло.
>>364816
>там поддержку 2D вроде как ввели, но хуй его знает
Без подъебов и троллинга, учился в университетах? ИЛи школьник?
>>364827
Учился, закончил (гуманитарий, ага) работаю офисным планктоном, мозги высушивает пиздец, поэтому копаю Computer Science, всегда в компах ковырялся, хуй знает почему на гуманитария пошел.
А нет, знаю, мне в 2008 ЭГЕ по математике ввели, непонятно было, где я окажусь в тех. универе или в армии.
И да, если ты мне начнешь рассказывать что 3д движок превращается в 2д выставлением одной из осей перпендикулярно к экрану, то я знаю.
Просто напрягает необходимость шейдерв для вывода трех текстурок с прозрачностью.
>>356145
Подскажите библиотеку для работы с архивами, нормально работающую в условиях task-based pattern и умеющую в распаковку sfx.
Подскажите, что делать, если при смене языка программа падает с system.globalization.culturenotfoundexception?
>>364861
Вроде в .net 4.5 изкаробки есть такая возможность, не?
Исходники гопнета — это пездецц... Писано копчеными индусами-оутсорсерами на отъебись.
http://referencesource.microsoft.com/#System.ServiceModel
Объясните, как работает данная конструкция?
Есть такие вот классы:
public abstract class A
{
public virtual string Print() { return "A"; }
}
public class B : A
{
public override string Print() { return "B"; }
}
public class C : B
{
public new string Print() { return "C"; }
}
A ac = new C();
Console.WriteLine(ac.Print());
выведет "В" ? Ведь инициализируется объектом класса С, а там метод Print переопределен.Зачем нужен C#, если можно спокойно писать под любую плотформу на JS?
>>366396
1) Избегай использования абстрактных классов.
2)
>как работает данная конструкция?
Тебе стоит погуглить как работает наследование в сисярпе. Это серьезная и сложная хуйня. Не для ответа в один пост.
3)
>1. Что означает
>A ac = new C();
Означает?
Ну хуй его знает, спроси у автора кода.
Мне кажется это какой-то учебный пример.
А может знак легких денег и казенного дома?
>Разве можно создавать экземляр абстрактного класса?
Нельзя
>И в чем вообще смысл создавать объект одного класса, а инициализировать его другим классом?
>создавать объект одного класса, а инициализировать его другим классом?
ЧТО?
MyFCKNGClass obj = new MyFCKNGClass(); //создаем объект одного класса
MyTWSTClass defrintobj = new MyTWSTClass(obj); //создаем объект другого класса и инициализируем его объектом первого класса
В чем смысл? Ну блядь, ну ебана, там параметры передать, я ебу, может эти объекты похожи как-то нe блядь чтобы не писать блядь матню сука = new MyTWSTClass(obj.a, obj.b, obj.c, obj.fuckmygrany, abg.getIsOpFaggot());
4)
>Почему
>Console.WriteLine(ac.Print());
>выведет "В" ?
Потому, что в классе C метод Print из класса A не переопределен, таким образом будет вызван метод из класса B, метод Print из класса С будет вызван только если мы будем обращаться к ac как к классу С.
Но мы обращаемся как к абстрактному классу А, поэтому вызывается переопределенный метод из класса В.
5)
>И в чем вообще смысл создавать объект одного класса, а инициализировать его другим классом?
Полиморфизм
Иди ка подучи теорию.
Посоны поясните за сетевые запросы в Windows Phone 8.
Сам я JavaБоярин, задачу поставили на винде штуку одну написать.
В общем есть один API. Я шлю на него запросы, в ответ получаю JSON - все таки стандартно.
В Java у меня для этого есть либа, которая по-сути является оберткой к запросам ( имеет методы и модели данных ).
Начал на шарпе писать подобную штуку и столкнулся с бедой принудительной многопоточности. В идеале должно выглядеть так :
String API.getXXX(params), т.е. возвращать строку, которую я превращу в объект.
Но блять ебаный дотнет не позволяет сделать это так просто.
Для того, чтобы передать в запрос post параметры в HttpWebRequest нужно вызвать асинхронный метод, который потом вызовет еще один асинхронный метод блять ( инфа с гугля ). Из-за этого выходит что нужно использовать наблюдателя и события. Но нахуя это нужно для такой простой задачи?! Запрос сделал - строку вернул. Все.
Сейчас использую страшный костыль -
string response = "atata";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(API_URL + url + "?b=" + blob);
webRequest.Method = "GET";
IAsyncResult res = webRequest.BeginGetResponse(null, webRequest);
while ( ! webRequest.HaveResponse)
{
try
{
WebResponse resp = webRequest.EndGetResponse(res);
StreamReader reader = new StreamReader(resp.GetResponseStream());
response = reader.ReadToEnd();
int i = 1;
}
catch (WebException e)
{
response = "err";
}
}
//response = webRequest.RequestUri.ToString();
return response;
Т.е. фактически я отказался от POST и хуярю GET запросом.
Как это сделать правильно?
>>366519
> Т.е. фактически я отказался от POST и хуярю GET запросом.
ну и мудак.
Людям дали таски, async\await, backgroundworker. Нет, блять, ты хочешь жрать говно.
>>366525
В Java я пользуюсь ExecutorService'ами и Future'ами. А тут хуйня в том что в WP HttpWebRequest тупо не дает сделать запрос СИНХРОННО. Я и так планировал открывать их в отличном от UI потоке, лол.
>>366396
> Объясните, как работает данная конструкция?
Чтобы понять, как оно работает, здесь нужно углубиться в байтоебство. Гугли про VMT (таблицу виртуальных методов) в C++, в C# и Java она устроена аналогично. А я расскажу вкратце.
VMT - это такой массив, который хранит адреса методов (функций). Когда ты делаешь вызов obj.mtd(a, b, c) - компилятор преобразует его примерно в такой код:
funcaddr = obj->VMT[mtd];
funcaddr(obj, a, b, c);
Статические и приватные методы в VMT не включаются (а также нестатические неприватные методы, объявленные без abstract/virtual), для них генерируется обычный вызов функции: ClassName_mth(a, b, c), который работает немного быстрее.
Если метод абстрактный то на месте адреса в VMT хранится null, такой метод, конечно, вызвать нельзя, потому и нельзя создавать объекты абстрактного класса.
При наследовании для нового класса создается новая VMT: старая VMT базового класса + адреса новых методов + замена адресов, если какой-то старый метод определяется (override в C#). Ну и в C# есть еще одна фишка, сокрытие методов - можно не переопределять старый метод, а добавить новый, но имеющий такое же имя, для этого используется new вместо override.
> 1. Что означает A ac = new C();
> Разве можно создавать экземляр абстрактного класса? И в чем вообще смысл создавать объект одного класса, а инициализировать его другим классом?
Идем дальше. Ну, во-первых, создается у тебя объект не виртуального класса, а класса C, т.к. ты используешь конструктор new C(), вот если бы было new A(), тогда бы компилятор заругался. Затем, созданный объект ты приводишь к типу A (тип переменной ac), соответственно, берется VMT для класса A, а не для класса C.
> 2. Почему Console.WriteLine(ac.Print()); выведет "В" ?
Берется VMT объекта ac класса A, там есть метод Print, см. описание класса A. Попробуем понять, какой метод там хранится. Итак:
1. Объявление класса A, в VMT методу Print соответствует код, возвращающий "A". Объект, созданный с помощью new A(), при вызове Print будет печатать "A".
2. Объявление класса B, унаследованного от A - здесь метод Print переопределяется (override), соответственно, в VMT изменяется адрес, и методу Print уже соответствует другой код, возвращающий "B". Объект, созданный с помощью new B(), при вызове Print напечатает "B", даже если он приведен к базовому классу A (например, A ab = new B()).
3. Объявление класса C, унаследованного от B - здесь метод Print скрывается (new), т.е. в VMT создается новый метод с таким же именем. Адрес старого метода Print не меняется!
Здесь все интереснее. В зависимости от типа объекта, созданного конструктором new C(), будут вызваны разные методы:
1) C c = new C(); - здесь будет вызван наш новый метод, который вернет "C".
2) A ac = new C(); или B bc = new C(); - здесь берется VMT класса A или B, соответственно, вызывается старый метод. А там, как мы помним, находится код, возвращающий "B".
3) (c as A).Print() или (c as B).Print() - мы принудительно сказали, что хотим использовать VMT класса A или B и вызвать старый метод Print, поэтому вернется снова "B".
>>366537
>создается у тебя объект не абстрактного класса
selffix
>>366537
Вот еще пример, чтобы стало понятнее:
class A {
public string Print() { return "A"; }
}
class B: A {} {
public string Print() { return "A"; }
public string Allou() { return "ALLOU YOBA ETO TI?"; }
}
Создаем экземпляр класса B: B b = new B();
Если мы попытаемся привести его к типу A и вызвать метод Allou - (b as A).Allou() - то компилятор выдаст ошибку, т.к. в VMT класса A нет такого метода.
Поясните за привязки обработчиков событий.
Я пытался сделать вот так
http://pastebin.com/dFS1yFNt
но оно не работает.
Как это делать правильно?
>>366506
>Ну хуй его знает, спроси у автора кода.
>Мне кажется это какой-то учебный пример.
>А может знак легких денег и казенного дома?
Это вопрос с quizful
>>366587
После долгого гугления я понял, что нужны команды, причем из коробки установку команд завезли только на клик и только для кнопки.
Попробовал WPFXCommand, но эта сволочь отказалась работать с моими Path фигурами, говорит нету у него ивентов mouseDown, mouseUp и mouseMove.
Щито делать? Вроде есть другие библиотеки, expression blend какой-то там, еще что-то. Что из них брать, чтобы не было бесплодных шаманств с бубном?
Тебе чё надо-то? Распиши. Я дрочу WPF. Ты про это что ли?:
MouseLeftButtonDown="{Binding MouseDown}" MouseLeftButtonUp="{Binding MouseUp}" MouseMove="{Binding MouseMove}"
Тебе нету смысла так делать. Прямо на MouseDown вяжись. А-ля MouseLeftButtonDown="MouseDown".
Студенота в треде. Антрекотусы, подскажите очень простую вещь: как правильно организовать общение между окнами приложения?
Вот допустим, есть самое простенькое приложение - начисление зарплаты работникам. Все данные берутся из базы. У приложения 4 формы (допустим пишем на ВПФ) - основная форма, форма со списком сотрудников и 2 формы вспомогательные, допустим для заполнения данных на сотрудников и для начисления зп.
Когда я делал что то подобное (на виндовс формах), то у меня был статический класс в котором я объявил паблик делегаты и те кому надо, через них работали. Но это какой то очень хуевый механизм. Делать открытый статический класс для взаимодействия между формами, то какой то пиздец. А другого я ничего не придумал. Подскажите как обычно это делается? Может в WPF какой то упрощенный механизм для этого?
Я понимаю что вопрос пиздецовый, но очень буду благодарен за ответ.
>>366789
>В чем именно проблема то?
В инкапсуляции. Две формы между собой никак не связанны и за просто так одна не может менять информацию в другой, поскольку они закрыты как бы от наружного вмешательства. Я делал класс с делегатами для этого.
>>366777
Передавай в форму с списком сотрубдников ссылку на соновную форму (в кострукторе), и через нее обращайся к базе (если доступ к базе у тебя через основную форму). Почитай про паттерн MVC.
>>366796
Могут.
Передай в одну форму ссылку на другую и радуйся.
>>366755
Есть ItemsControl с Canvas в качестве панели, нужно забиндить ему в ItemsSource коллекцию фигур. Фигуры нужно перетаскивать по канве, создавать и удалять легкими движениями мыши, все такое. Все классы фигур реализуют один интерфейс в котором определены основные свойства типа Geometry и Position, но у каждой конкретной реализации должно быть свое поведение.
Я начинал писать эту хрень без всяких новомодных привязок (то есть как ты предлагаешь, все в mainwindow.cs - и процедурки для вывода рисования каждого типа фигуры, и процедурки для перемещения каждого типа фигуры, и все прочее), но код оче быстро скатился в тысячи строк нечитабельного говна, хочу попробовать по-человечески накодить.
Поясните за mono что ли. Хочу шарп потыкать, но не знаю есть ли в том смысл ибо прыщеблядь.
>>366864
Нашел сам. Expression Blend SDK.
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<Path Data="{Binding PathData}" Fill="Red" StrokeThickness="1" Stroke="Black">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction Command="{Binding Path=MouseDown}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Path>
>>366877
Я конечно не понял, почему они новомодные, но так тоже можно да. Возможно мы смотрели на разные Path'ы из разных нэёмспейсов.
>>366587
>MouseLeftButtonDown="{Binding MouseDown}"
Не нужны тут Binding. Binding создает связь между DependencyProprty, а тут простой обработчик события
MouseLeftButtonDown="MouseDown", где MouseDown в behind-коде.
Для MVVM есть хитрости вида EventToCommand
Писториусы, нубовской вопрос по WPF - есть 5 кнопок - это небольшое меню, которое используется почти у всех окон в приложении. Как я понимаю, нет смысла копировать куски одного и того же кода, в определения разных форм, поэтому - может имеет смысл сделать свой контрол который и будет состоять из этих 5 кнопок и который можно будет кидать на любую форму? Или есть какой то другой механизм? Взлетит? Извините ели вопрос слишком дурацкий.
>>366958
Да, делай так. Взлетит. Хэндлеры кнопок только вытащи наружу (если конечно есть необходимость).
>>366926
Вот я про эти хитрости и пытаюсь узнать, собственно пока что сделал так >>366877, но непонятно как передавать параметры (то есть например Delta из MouseWheelEventArgs).
Если все писать в бихайнд, получается нечитаемая каша: для одного типа фигур кручение колесика должно изменять размер, для другого - цвет, для канвы - scaleX/scaleY, ну и так далее, все это писать в код формочки не хочется.
Во всякие призмы лезть пока тоже рано, с чем бы попроще разобраться.
Нужна ваша помощь. Пишу ORMвелосипед и встала задача, как сформулировать Where запрос. Строкой не хочу задавать условие, так как это получится очень сильный костыль. В идеале хочу получить нечто вроде
GenerateStrWhere( where Friend.Age < 40)
где Friend.Age является полем Friend. Объект Friend, а тем более коллекцию объектов Friend создать нельзя. Да это и нахуй не нужно.
Может кто что подскажет
>>368299
Expression<Func<Friend, bool>> where = c => c.CanWriteMsg==1 && c.FirstName!="Anon";
Пока, что думаю над этим вариантом, но слишком много синтаксического оверхеда
>>368299
У вас же синтаксически богатый язык, linq есть и еще какая-то штука которая позволяет куски функций передавать как условие для where.
Алсо, можешь посмотреть как это в sql alchmy сделали: http://docs.sqlalchemy.org/en/latest/orm/tutorial.html#common-filter-operators
Посоветуйте годный RPC под шарп
>>368299
Хуяришь метамодель данных, как в JPA2, где каждому классу сущности соответствует свой метакласс, у которого public static аттрибуты в виде кортежа <тип, название>
>>368365
Я для лабы вот такую приблуду использовал. Работает. Значит годный.
Ананасы, ОЧЕНЬ нужен совет. Сделал в WPF юзерконтрол (выше уже спрашивал делать или нет) - пять кнопочек вместе. Очень простой, МАКСИМАЛЬНО простой. Все что мне от него нужно - что бы я кидал его в визуальном конструкторе студии на любое окно и потом, по двойному клику на одной из кнопок, он сам в коде создавал пустой обработчик события для этой кнопки, то есть так как это обычно происходит со стандартными контролами-кнопками в визуальном конструкторе.
Что есть сейчас - в .cs самого юзерконтрола, код примерно такой (для 1 кнопки)
ебашу евент:
public event RoutedEventHandler MyButton1EH
и потом функцию:
private void MyButton1EH_OnClick(object sender, RoutedEventArgs e)
{
if (MyButton1EH!= null) { MyButton1EH(this, new RoutedEventArgs()); }
}
а в самом коде формы куда бросаю контрол:
в XML:
< //объявление контрола и его свойств// и обработчик события клик (для одной из кнопок) - BtnClick1="OnBtnClick1"/>
.cs формы выглядит так:
private void OnBtnClick1(object sender, RoutedEventArgs e)
{ //что нибудь }
Сейчас контрол работает вот так, а это значит, что мне КАЖДЫЙ раз, когда я бросаю его на форму, приходится копировать OnClick обработчики для всех кнопок в .cs той формы, куда я кидаю контрол. Получается что у меня дохуя лишнего кода (так как в каждой из форм, не все кнопки контрола могут использоваться), да и как то по идиотски копировать пустые объявления.
Не могу нормально даже вопрос в гугле задать. Еще раз, если кто то не понял вдруг из кода и моего объяснения что мне надо, коротко - есть 5 кнопочек на одной плашке, когда я кидаю их на форму, что нужно что бы я мог по двойному клику на одну из этих кнопок, создавать обработчик события нажатия на эту кнопку. Сейчас, когда я дважды кликаю на контрол в визуальном конструкторе, он создает какой то левый обработчик общий для всего контрола в целом, а не для конкретной кнопки. Подскажите долбоебу, как сделать универсальный контрол, что бы не приходилось копировать из формы в форму, кучу ненужного кода. Спасибо, если кто откликнется на такую простынь, пытался максимально просто написать.
>>368537
> WPF
> в визуальном конструкторе
Забудь, его там прилепили в 2006 году на отъебись и с тех пор ничего не менялось, не умеет он так.
>>368539
Ну ок, то есть ты считаешь, что из формы в форму, копировать кучу инфы об обработчиках ОнКлик это нормально? Как я уже сказал, есть дохуя кнопок и не всегда и не все из них используются.
Я вот нашел что то кажется из того что мне нужно, но не знаю оно ли это и как это прикрутить - http://www.cyberforum.ru/wpf-silverlight/thread980398.html
>>368539
>, не умеет он так.
И да, что значит не умеет? То есть по двойному клику на кнопку создавать обработчик события он не умеет? Ты что ли прикалываешься?
>>368540 что ты несешь? Какие обработчики онклик? Почитай уже про MVVM и экшены, все делается просто и красиво. Я говорил лишь о том, что визуальный редактор - кривое говно там.
>>368542
Ну я же объяснил максимально подробно что я имею ввиду. Ладно, еще раз - есть форма. На нее бросаю кнопку обычную, стандартную кнопку. Просто из панели тулсов перетаскиваю обычную кнопку. Потом дважды на нее кликаю. В XAML у кнопки создается Click="Button_OnClick" а в .cs создается пустой обработчик:
private void Button_OnClick(object sender, RoutedEventArgs e) {}
Всё. Это все что мне нужно. Я хочу что бы точно так же, когда я кликаю на своем контроле, на одной из кнопок, создавалась такая же хуйня.
>>368544 я тебе еще раз объясняю - визуальный редактор из WPF - ущербное говно и на такие, казалось бы простые, вещи неспособен. А вот если ты в XAML напишешь у своего контрола Click=" - то здесь появится предложение создать обработчик, и он таки создастся. А про MVVM я тебе написал только потому, что buttononclick-программирование - зло, почитай про MVVM и сможешь писать красиво. НО без визуального редактора, к сожалению.
>>368547
Блин. Ну хуй его знает. У меня уже так бомбит пукан о того, что не могу даже такую простую хуйню сделать. Буду думать и смотреть что за MVVM
>>368542
>MVVM
>просто
>>368560 а вот и похапемакаки с тремя классами образования сдетонировали.
Посоны работаю на конторку одну, не кодером. В общем для охуенной премии неплохо было бы замутить некую программку для учета прихода техники и ухода ее, чтобы так сказать все было в компьютере и можно было в любой момент посмотреть что у нас за конкретную дату что пришло, что ушло, ну и данные на каждую технику.
В общем реализую все на C# уже начал делать базу, при условии что все бесплатно должно быть, проверки есть. Делаю на C# Express, база данных в виде XML файлов.
Суть такая в общем, открываем прогу и типа у нас есть папка /DB/ Когда программа открывается, то если нет файла XML за этот день, то он создается в формате dd.mm.yyyy. Итого у нас в папке /DB/ куча XML файлов таких. Ну и вносим данные туда, можно открыть файл за выбранный день, вывести данные в Excel или на форму с перелистыванием, можно удалить ноду выбранную.
Так вот вопрос же какой у меня база данных из XML файлов нормально работает вообще? Или юзать ms_sql server express, он вроде урезанный, как там у него дела в бесплатной версии? Да и не хочется на том компьютере сервак разворачивать. Как лучше всего организовать хранение данных, или XML это заебись? Просто меня смущает ПОКА ЧТО 200 XML файлов уже, это только начало, если все это в один файл сделать, это охуенно медленно будет? Или сделать например по месяцам, тогда их штук 5 будет, Помогите шарпобоги!
>>368586
>база данных в виде XML файлов.
Ты что ебанутый? Ты что тут делаешь? А почему уже тогда не SQL Compact? Какая в хуй разница, так хоть база будет.
>>368586
> Или юзать ms_sql server express,
SQL Compact - нет почти нихуя, в смысле всяких функций и прочего, но зато, нихуя не надо устанавливать и база идет и работает вместе с софтиной. Я делал подобную программу по работе. Конечно кастрированный SQL не позволяет развернуться так, как в полной версии, но все что нужно, можно прописать кодом, а саму базу, использовать только как хранилище данных.
>>368586 используй Entity Framework и в качестве провайдера SQL Compact или SQL Local DB, даже не экспресс. Но дело в том, что провайдера всегда можно поменять одной строчкой в конфиге, если лимитов этих урезанных версий SQL Server не будет хватать, сама программа будет работать без переделки с любой БД.
Реквестирую мудрого совета я от анона.
Решил написать небольшое приложение - типа как у анона выше - учет всякой хуйни. На данном этапе есть - база данных, пустая, только таблички, без функций пока. И сейчас, пилю пользовательский интерфейс - дохуя окошек, сейчас каждое из них делаю отдельно, а потом буду связывать их между собой.
Прочитал про MVC и MVVC и теперь думаю:
1. Если я правильно понял, то в самих формах, не должно быть совсем нихуя, даже обработчики событий, должны обращаться к промежуточному звену которое будет уже взаимодействовать с БД
2. Должна быть прослойка - класс, который принимает всю информацию от интерфейса и обрабатывает ее
3. Есть отдельный класс для работы с БД, который сообщается с пунктом 2.
4. Если я сделаю сейчас интерфейс, потом подвяжу к нему базу и потом, уже исходя из потребностей, буду допиливать нужные функции, это будет нормально?
Буду очень признателен за ответы. Только сделайте скидку на то, что я новичек, не грузите сильно.
>>368600
1.Нах експресс, используй компакт, он бесплатный.
2.В студии есть возможность (если не ошибаюсь) работать с компактом и прямо из студии делать базу. Хуевый вариант конечно, но тебе же нужно максимально попроще.
>>368605 Для меня оказалось удобней понимать MVC так:
- хтпп запрос(адрес странички) дергает контроллер соотнесенный с этим запросом
- контроллер дергает модель (та самая бд, контроллер дергает в модели методы написаныне тобой, по типу гет_шняга_лист())
- запускает представление, инсертя в него данные которые били получены от модели, представление себя рисует, подставляя твои данные, и полученный хтмл шлет в ответ на запрос.
>>368614
Ну я про десктопное приложение спрашиваю. Но примерно понимаю о чем ты.
>>368600 Entity Framework, SQL Compact, SQL Express, SQL Local DB - бесплатны. SQL Compact отличается тем, что на машину каждого пользователя ставится аж три мегабайта его "движка". SQL Local DB и SQL Express - ставятся на "сервер", а остальные к нему подключаются.
Бля, хуле ж тематика такая мертвая? Пара антрекотов если и заходит за день, уже хорошо. Пичальки.
Что то вообще никто в тред не заходит. Ау! Апельсинусы!
>>356145
Может кто-нибудь простыми словами пояснить Expressions. Читал на хабре, нихуя не понял.
Ну вот чем таким обладает
Expression<Func<int, int>> expression = x => x*x;
Func<int, int> func = x => x*x;
??>>368595
> SQL Compact - нет почти нихуя, в смысле всяких функций и прочего, но зато, нихуя не надо устанавливать и база идет и работает вместе с софтиной.
Firebird - есть все что нужно, для Embedded версии ни хуя не надо устанавливать, и база идет и работает вместе с софтиной.
>>368713
А где там доска про программирование? /pr/ нет, на /c/ какое-то аниме.
>>368842
Пока не работал с ней. Там есть идентификация пользователей, триггеры и хранимые процедуры?
>>368839
Expression - деревья выражений
Func - просто делегат
У тебя слишком простые примеры, поищи на MSDN разбор и составление expression
Посоветуйте, чем можно порисовать диаграммы сорта как на картинке. И гистограммы. Нашел OxyPlot, но документация недоделанная, а та что доделанная - застыла в .NET 3.0.
Тэги: C#, WPF, .NET 4.5
>>368562
Ну попробуй тут не сдетонируй, когда из коробки никакой поддержки этого самого MVVM, который они так упорно форсят, нет, и тут либо пердолируй DependencyProperty на каждый чих, либо разбирайся со всякими там призмами.
>>368596
>Entity Framework
Тормозное говно, как и все ORM.
Хотя после XML-файлов как-то похуй будет.
>>368981
Dynamic Data Dysplay.
А вообще, если не нужны биндинги, можно использовать Chart в WindowsFormsHost.
>>368999
Пиздец. Нахуй ты такой даун?
>>368999
До сих пор замечательно работает. Или тебе прям какие-то совсем уж йоба графики?
>>369022
Пиздец. Нахуй ты тралишь? Не траль, плиз(((((. Ебанутый прочитай еще раз вопрос.
Сап, двоч. Есть проблема.
Пилю приложение на wpf, хочу, чтоб, когда у меня меняется значение одной переменной, менялось так же значение в текстбоксе в MainWindow. Но НЕ ПРОКАЕТ.
<TextBlock x:Name="testtbl"
x:FieldModifier="public"
Text="{Binding Path=tblstring, UpdateSourceTrigger=PropertyChanged}"/>
Отака хуйня в xaml-нике MainWindow. В его cs-нике в классе MainWindow запиливается инст вспомогательного класса:
TestTBLclass ttblclass = new TestTBLclass();
this.DataContext = ttblclass;
Сам класс:
public class TestTBLclass:INotifyPropertyChanged
{
private static TestTBLclass _instance = null;
public static TestTBLclass Instance
{
get
{
if(_instance==null)
_instance=new TestTBLclass();
return _instance;
}
}
public string tblstring="blahblah";
public string tblString
{
get
{
return tblstring;
}
set
{
tblstring = value;
NotifyPropertyChanged("tblString");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string str)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(str));
}
}
В tblstring значение приходит, а вот дальше что-то не работает.
>>368999
>DDD последняя версия 2009 года. Биндинги нужны. Еще зум и прокрутка.
Биндинги можно прикрутить к DDD, много ума там не надо. И зум с прокруткой там вроде из коробки.
>>369056
Маешься какой то хуетой. Нормально объясни, что хочешь сделать.
>>369068
У меня есть MainWindow, в нём - текстблок. Есть некая магия, которая подаёт в стринговую переменную tblstring некое значение. Я хочу, чтоб это значение отобразилось в текстблоке.
Вообще сейчас я пытаюсь найти способ забиндить данные на контролы, но уже запутался в тысячах вкладок МСДН, стэковерфлоу и прочих, где у всех всё работает, а у меня - нихуя.
>>368299
> Where
Возвращаюсь в тред. Решил сделать через перечисление. То есть указываем какой where нам нужен и далее через атрибуты дергаем строку.Вот как это выглядит
internal enum WheresType
{
[Description("WHERE FriendId='{0}'")]
ById,
[Description("WHERE FirstName='{0}'")]
ByFirstName,
[Description("WHERE CanWriteMsg=1")]
ByCanPrivateMsg
}
>>368605
Бампану вопросец
>>369086
>Замени эту хуету на
Text="{Binding Path=tblstring, Mode=TwoWay}"/> если хочешь двустороннего обновления данных
Мне не нужно двухстороннее обновление данных, мне нужно хотя бы какое-нибудь. У меня никакого нет, вот в чем проблема.
>>369103
Рассматривал этот вариант. Но, к сожалению я не нашел некривого способа как валидировать поданный expression. То есть написав
Expression<Func<Friend, bool>> where = c => c.CanWriteMsg==1 && c.Field.Remove(2,2)
Он будет совершенно валидным с т.з. .Net , но метод, который будет разбирать expression, ахуеет от такого и пропустит невалидную строку в бд
>>369109
Тогда займись отладкой биндинга. Вот тебе почитать http://www.wpf-tutorial.com/data-binding/debugging/
>>369056
>Binding Path=tblstring
У тебя свойство tblString называется.
>>369224
Точно, спасибо. Правда, это не прокнуло, но всё равно спасибо.
>>369226
Значение свойства в инстансе, погугли как биндить синглтоны.
Будет что-то типа {Binding Source={x:Static mynamespace:TestTBLclass.Instance}, Path=tblString}.
Дотнет-обезьяна врывается в тред.
Анон, последние несколько лет пишу быдлокод на винформс + дотнет (сейчас 4.0) + T-SQL, тем и зарабатываю. Хотелось бы в не самой отдалённой перспективе спуститься с деревьев в саванну и эволюционировать в человека, оставаясь в рамках платформы дотнет, конечно. Что сейчас актуально/востребовано, что должен уметь уважающий себя мидл в нормальной конторе? WPF жив ещё? На чём сейчас пишут веб: ASP.NET MVC или web forms? Какие умные слова лучше всего выучить для собеседования: юнит-тесты, WCF, EF или даже MVVM?
На текущем месте работы пример брать не с кого, учиться новому не на чем, зарплату не повысят/расти некуда так, что вся надежда на тебя, анон.
Очень бампую этот вопрос - >>369290
Ебаный насос, ну хоть кто то живой тут бывает, ответьте!!
>>369200
Сделай fluent builder, например..Where().Eq(x=>x.Age, 3).And().More(x=>x.Yoba, YobaSize.OcheBolshoy)
>>369329
НЯ!
>>369350
что у тян слева с лицом ?
сука, ненавижу тех кто писал документацию к апи vk.com. Поубивал бы нахуй
>>369290
Мевеце с паттернами и всякими залупами типа ентити. Скачай нопкоммерс и посмотри как там устроен проект.
Есть Class1, у него свойство Class2 property1 {get; set;}, у Class2 есть какие-то еще свойства, допустим int property2 {get; set;}.
В datacontext своему контролу я ставлю экземпляр Class1. Как сделать биндинг к property1.property2? Пробовал Binding="{Binding Source=property1, Path=property2}", не работает.
>>369460
Пробовал, не работает.
Назначать разные datacontext не вариант, нужно биндить разные команды для кнопки в зависимости от одного из свойств выбранного в датагриде элемента.
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedItem.Property1}" Value="LALKA">
<Setter Property="Command" Value="{Binding ZATRALLIT}"/>
</DataTrigger>
</Style.Triggers>
>>369507
>Почему MVVM это так сложно?
Потому что ты не понимаешь что делаешь, а просто жанглируешь разными конструкциями, в надежде что взлетит.
{Binding property1.property2} должно работать, если не работает - значит например Class2 или Class1 не наследует INotifyPropertyChanged. Без кода здесь тебе никто не поможет.
Сап, аноны. Есть 2 .exe файла: 1.exe и 2.exe. Каждый из них представляет собой форму с меню баром сверху и разделен на 2 половины вертикально. Суть задачи: сделать так, чтобы в левой половине 1.exe отображался полностью 2.exe. Это я сделал, но при нажатии на элементы меню в отображаемом 2.ехе не появляется дроп-даун меню.
И, собственно, вторая задача: переместить из уже запущенного 2.ехеиз его правой части картинку в правую часть 1.ехе, как на пикче.
Я даже не знаю какие функции мне гуглить, чтобы переместить эту картинку.
Добра!
>>369822
1) Кривой способ - cхороняй картинку на диск, а в другом приложении проверяй появилась ли эта картинка на диске и если да - загружай
2) тру способ - юзай пайпы, сокеты, wcf.
>>369828
Спасибо! Можно подробнее про
>2) тру способ - юзай пайпы, сокеты, wcf.
И все-таки не понятен вопрос с неработающим меню в отображаемом файле.
Какой нужно код, скину, если что.
>>369828
Ты не понял, он хочет чтобы второе приложение было плагином первого и запускалось из под первого. Т.е. не два приложения запущено и второе отдаёт картинку первому, а первое говорит второму, что нужно делать. Если я не прав, и это именно то, что нужно автору, то пусть гуглит IPC и с чем его едят.
Ежели речь идёт именно о том, о чём я подумал: первое приложение находит второе на диске, находит внутри второго нужный класс формы и отображает его внутри себя, как MDI, то это можно сделать, но это накладывает определённые ограничения при реализации (приложения нумер два не может быть любым, мы тут не виртуальную машину пишем).
>>369385
ОК, попробую. Сейчас пытаюсь понять, как этот ваш Razor работает и куды ему нужно эти юнит-тесты пихать.
Вот у меня тоже проблема с текстбоксом. Есть textbox, есть класс MyTime с таймером, по которому в textbox добавляется строчка.
Пробовал передавать MainWindow в качестве параметра конструктора, но так работает только без таймера, например по нажатию кнопки.
Так вот, как такое реализовать? Может сделать public textbox? Но я не знаю, как.
>>369946
Передавай или сслыку на текстбокс (в конструкторе), или сделай в главной форме паблик метод который юудет изменять значение текстбокса.
>>369949
Паблик метод не работает, вроде.
>>369950
WPF, но не знаю, зачем. Я ньюфаг.
http://pastebin.com/fcwd0U3a
>>369957
Таймер запускать нужно, start() или что-то такое. Enabled это другое свойство, алсо оно по умолчанию должно быть true.
>>369957
wpf -> это значит что сразу надо читать про mvvm и таких вопросов не будет.
В данном случае: не надо визуальные контролы отдавать во всякие классы, надо в классе сделать событие, например, и через него работать.
http://pastebin.com/Kx11cWRe
>>369973
Как у тебя не работает твой код? Exception'ы кидаются?
Вот так у меня работает, но блядь, не надо так: http://pastebin.com/NYXV0mKN
>>369989
Ничего не кидается. Что-то было про то, что текстбокс принадлежит другому потоку, но теперь я не могу найти, где видел это.
Расскажите мне пожалуйста, как правильно сделать биндинг из NHibernate к WinForms. Делаю два грида мастер-детэйл, кнопочки вида "добавить/удалить/сохранить", загружаю набор объектов мастер. Все идет нормально, если только первый элемент из мастеров имеет детей. Если детей нет - биндинг отваливается.
Исследования показали, что гибернейт вместо пустой коллекции детей делает null, а вернее некую заглушку-прокси, скрывающую за собой null.
Я разочарован. Почему в 2014 году для биндинга надо опять делать закат солнца вручную, поддерживать списки удаленных-добавленных элементов самому?
Отвечаю заранее на вопросы:
1) Почему не WPF - потому что тормозит этот впф на древнем компьютере у оператора. Потому что аналогичное приложение на дельфи просто летает и притом управляется с клавиатуры.
2) Почему не уеб-приложение - потому что такие требования. Вдобавок, думаю что уеб-приложение потребует еще больше усилий для написания, будет весьма задумчивым (латентность сети), потребует присутствия версталы (я не знаю css, я знаю sql)
Также, можете рассказать, чем вы рекомендуете связать десктопное приложение на C# и сервер приложений на яве (ubuntu, postgres, asterisk, tomcat). Сервер приложений должен мочь присылать уведомления самостоятельно, сейчас это делается через listen/notify postgres'а.
>>368840
Ах, файрберд... любовь всех дельфийских промзобми из айтиотделов при предприятиях, которые торгуют Советскими Приборами. Владельцы таких предприятий когда-то, в 95 году, захватили не автостоянку, и не дом культуры для сдачи под офисы, а поганый Ангар В Промзоне с Краном и Гаражом. Теперь там сидят работнички и работают, делают промышленную Уродливую Хуйню от Отечественного Производителя.
Файрберд. Бесплатное ИДЕ. Иде оно? Да, есть Ебэ Эксперт. Типа бесплатный для жителей exUSSR (типа - все равно же своруете, суки).
Как у него с бэкапами - восстановлениями? Уже починили баг(и), когда бэкап ВНЕЗАПНО мог оказаться невалидным?
Скажите, а с какой целью идентификаторы в базе являются чувствительными к регистру? А делать автоинкрементное поле через триггер - это зачем? Как там с полнотекстовым поиском, к 2014-то году доделали? Чем отличается Классик Сервер от СуперКлассик Сервера?
От файрберда прямо-таки веет этакой кустарщиной. И он НИКОМУ НЕ НУЖЕН НИГДЕ, кроме как на территории exUSSR.
Ставьте постгрес и пользуйтесь. Там есть партиционирование.
Ставьте MSSQL Express. Оно хотя бы нативно поддерживается вижуал студией. Когда клиенту не хватит базы в 10 гб, спросите себя - а зачем вам такой клиент, который не может заплатить за сервер БД? Он вам-то достаточно заплатит?
Наконец, есть Oracle XE. Оракл - это вам не поделие советских программистов. В резюме оракл смотрится интереснее, чем файрберд.
Не надо использовать файрберд.
PS: там еще sqlite советовали - да ради бога, только помните - он позволит записать в себя любую чушь, а потом перестанут работать запросы. Корректность данных надо будет поддерживать самому.
Аве, аноны.
Подскажите, где берут реальные навыки программирования?
>>369997
private void TimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
{
_window.Dispatcher.Invoke(UpdateTextBox);
}
private void UpdateTextBox()
{
_window.tb.Text += "yoba, eto ti?" + Environment.NewLine;
}
This. Только перед тем, как делать инвок в UI поток нужно проверять, что ты не уже там.
>>361320
Какой именно Дима имеется в виду? Владелец гей-наркопритона домика для бездомных поросят?
>>370026
>PS: там еще sqlite советовали - да ради бога, только помните - он позволит записать в себя любую чушь, а потом перестанут работать запросы. Корректность данных надо будет поддерживать самому.
Кстати да, это знакомо по скайпу. У меня как-то раз кончилась постоянная память, и новое сообщение записалось с ошибкой, в результате база sqlite кораптед, мессенджер отказывался работать без её удаления(точнее без удаления файла bdiscorrupt всякий раз, но это детали).
>>370035
Для их обоих не нужно неких особенных книжек. Для mssql есть классический пример Northwind от майкрософта.
Ставим сервер бд - у него есть админ. Заходим под этим админом через соответствующую утилиту (sql management studio), создаем базу. Заполняем ее таблицами, это одинаково в общем-то в любой базе - primary key, foreign key. Делаем маппинг сделанной базы в программу, либо через Entity Framework, а вообще есть linq2db, оно полегче, побыстрее и более тупое - делает только то, что скажут, не вызывая изумленных возгласов WTF. Затем через linq читаем из базы и пишем в нее. Почему linq - потому что после изменений в базе ты изменишь маппинг, и при этом ни один запрос не будет испорчен. Пока не исправишь все несоответсвия - программа просто не скомпилируется.
По базам есть классическая книга Дейта (ей убить можно, но в ней есть вообще все), свободно доступная в интернете. И замечательный сайт sql-ex для того, чтобы тренироваться в написании запросов.
>>370038
>маппинг сделанной базы в программу, либо через Entity Framework
А как же написание слоя хранимых процедур, создание индексов и прочее говно? Неужели сейчас этим никто не занимается (в нормальных проектах)?
>>370044
"Слой" хранимок не нужен уж точно. Несколько хранимок - может быть. Для операций вида "добавить-списать деньги со счета". И до хранимок ли вопрошающему анону, если он вообще ничего еще не знает? Индексы тоже еще успеет проставить.
>>370016
Я нихуя не понял.
Отключи lazy-loading для своего класса, заглушек не будет. Если тебе важна скорость, то зачем ты вообще используешь орм?
>>370026
Какой у тебя сочный БЭКАП. Ни разу не видел чтобы йоба эксперт ломал бэкапы, серьезно.
>Ставьте MSSQL Express
Это то говно, которое анально залочено на работу в один поток и использование 1 гига памяти? Плакать-колоться ради EF? Подозреваю что с ораклом(тм) та же хуйня.
>>370191
Скорость - в смысле отзывчивость интерфейса. ОРМ требует какое-то время на маппинг, но это время константно и ничтожно, что-то вроде 50мс.
Не понял - поясняю.
Есть Категория и Услуги. Загружается список категорий(страница X из N), у каждой категории есть свойство со списком услуг.
У первого грида datasource'ом является список категорий. У второго грида datasource'ом является current списка категорий, а datamember'ом - список услуг в категории.
При загрузке списка категорий происходит биндинг. Грид с категориями отображает их, затем грид с услугами пытается получить список услуг у первой категории. Если у первой категории услуг нет - с биндингом происходит нечто, и когда выбираешь категорию, в которой услуги таки есть - они не отображаются в гриде. Приходится вешать обработчик на смену текущей категории, проверять, есть ли услуги и так далее.
Lazy Loading я не хочу отключать именно потому, что он как раз полезен. Не требуются все услуги для всех категорий на текущей странице. Загружается только то, что нужно.
NHibernate был выбран потому, что EF не поддерживает постгрес. Или поддерживает, но какими-то необыкновенно хитрыми методами, вроде запуска одной VS в отладчике другой, как было сказано в блоге одного итальянца, автора поддержки постгреса в EF. Причем, его блог пришлось читать через archive.org, потому что он куда-то делся.
В общем, неудобно все это. Я могу сделать руками, и я сделал... но! какого хрена! 2014 год уже, неужели нет более простых способов?
>>370214
Еще и разметку криво написал слетела, печальбеда.
>>370191
>Ни разу не видел чтобы йоба эксперт ломал бэкапы
Мне не веришь - в раввинатике спроси.
>залочено на работу в один поток и использование 1 гига памяти
Оно весьма быстро работает. А если продается нечто на десяток рабочих мест - пусть за базу платят, не обеднеют.
Посоны, подскажите, в Remoting-е ChannelSink-и уникальные для соединения? Если я пытаюсь из провайдера инжектить и входными данными ему подсунуть ip port, то он не может оказаться участником цепочки от другого соединения?
Бля, наконец-то мне дали таск запилить новую приложуху, но вот в чем беда, времени мало и вообще слошной СКРАМ.
Как робить-то? Хотелось бы с энтитифреймворками всякими, да с ДИ и маппингами. Но стоит ли оно того?
>>370214
Что-то такое?
<DataGrid Name="Categories" ItemsSourse="{Binding Path=Categories}" SelectedItem="{Binding SelectedCategory"}/>
<DataGrid Name="Services" ItemsSource="{Binding Path=SelectedCategory.Services}"/>
public class Data: тут типа INotify чего-то там
{
public ObservableCollection<Category> Categories { get; set; }
public Category SelectedCategory {
get { тут загружаем услуги; }
set;
}
}
public class Category
{
public ObservableCollection<Service> Services { get; set; };
}
Шарпаны, в впф понадобился ActionList из окноформ, чтобы можно было различные действия с интерфейсом (например, нажатие хоткея, выбор элемента контекстного меню и нажатие по кнопке) забиндить на одну команду. Причем список команд может меняться.
Пока сделал класс с командами и вот такую привязку
<ContextMenu ItemsSource="{Binding Path=Commands.Actions}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding Path=Action}"/>
<Setter Property="Header" Value="{Binding Path=Name}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
<ItemsControl ItemsSource="{Binding Collection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}"></Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
transient final abstract class КококКукарекуКокоКококо extends Кукарек implements КококоПокПокКукарекуКукарекКокок, КококоКококо {
КококоПокПокКукарекКукарекуКудахтахтах кококоПокПокКукарекКукарекуКудахтахтах = new КококоПокПокКукарекКукарекуКудахтахтах();
Кукарек кукарек = кукарекКукарекуКудахтахтахКококо.getКудахтахтахКукарекКукарекуКокок().getКукарек();
КококоКукарекКудахКококКудахтахтах кококоКукарекКудахКококКудахтахтах = new КококоКукарекКудахКококКудахтахтах();
Кококо кококо = кококоКокоКукарек.getКококКококо().getКококо();
Кококо кококо = new Кококо();
synchronized transient private void setКукарекКукарекуКококо<Кокок>(КукарекКукарекуКококо<Кокок> кукарекКукарекуКококо) {
this.кукарекКукарекуКококо = кукарекКукарекуКококо;
}
native protected transient public private volatile final static void setКококоКококо(КококоКококо кококоКококо) {
this.кококоКококо = кококоКококо;
}
volatile final synchronized public static void setКокок(Кокок кокок) {
this.кокок = кокок;
}
volatile protected final synchronized transient private void setКококКококо(КококКококо кококКококо) {
this.кококКококо = кококКококо;
}
native final synchronized КудахтахтахКококоКококо<Кокок> getКудахтахтахКококоКококо<Кокок>() {
return this.кудахтахтахКококоКококо;
}
transient volatile protected final synchronized native public КококоКудах getКококоКудах() {
return this.кококоКудах;
}
native final volatile transient protected static private public synchronized КококоКукарек getКококоКукарек() {
return this.кококоКукарек;
}
native static КудахКукарекКококоКукарек getКудахКукарекКококоКукарек() {
return this.кудахКукарекКококоКукарек;
}
protected public transient static КукарекКокоКококо<Кокок> кукарекКокоКококо(Кукарек кукарек) {
кукареку.setКококо(this.кококо);
кудахтахтахКококоКококоКококКоко.setПокПокКукарекКукарекуКококоКукарек(this.покПокКукарекКукарекуКококоКукарек);
кококоКококо.setКукарекКококоКудахтахтахКудах(this.кукарекКококоКудахтахтахКудах);
return new КукарекКокоКококо<Кокок>();
}
protected static transient private native synchronized volatile КукарекуКукарекуКококоКукарекКококо кукарекуКукарекуКококоКукарекКококо(КудахКукарекКукарек<Кокок> кудахКукарекКукарек, Кукарек кукарек) {
кококоКококоКокоКукареку.setКукарекКудахКококоКококо(this.кукарекКудахКококоКококо);
КокоКококоКукареку<Кокок> кокоКококоКукареку = new КокоКококоКукареку<Кокок>();
кукарекПокПок.setКококоКукарекуКококоКукарекКудахтахтах(this.кококоКукарекуКококоКукарекКудахтахтах);
кукареку.setКукарекКококоКокоКококо(this.кукарекКококоКокоКококо);
while(кукарекуКококо.isКококоКудахПокПокКококоКококо()) {
коко.setКукарекКококоКукарекКококоКудахтахтах(this.кукарекКококоКукарекКококоКудахтахтах);
КукарекКококПокПокКукарек кукарекКококПокПокКукарек = кукарекКукарекуКококоКококо.getКудахтахтах().getКукарекКококПокПокКукарек();
КукарекКудах кукарекКудах = new КукарекКудах();
Кококо кококо = new Кококо();
кококоКукарекКудахтахтах.setКудахтахтах(this.кудахтахтах);
}
return new КукарекуКукарекуКококоКукарекКококо();
}
native synchronized public transient КукарекуКокоПокПокКудах кукарекуКокоПокПокКудах(Кудахтахтах кудахтахтах) {
кококКукарекуКудахтахтахКукарек.setКокоКококо(this.кокоКококо);
КококоКококоКококоКудахтахтах кококоКококоКококоКудахтахтах = кукарекКукарек.getКококоКококПокПок<Кокок>().getКококоКококоКококоКудахтахтах();
return new КукарекуКокоПокПокКудах();
}
static volatile private transient final synchronized public protected КукарекКукарекуКудах<Кокок> кукарекКукарекуКудах() {
кукарекКококоКококоПокПок.setКукарекКококоКококКукареку(this.кукарекКококоКококКукареку);
Кукарек[][][][] кукарек = new Кукарек[1266723368][1157625000][1157625000][1298596571];
for(int i = 0; i < 1266723368; ++i) {
for(int j = 0; j < 1157625000; ++j) {
for(int k = 0; k < 1157625000; ++k) {
for(int l = 0; l < 1298596571; ++l) {
кукарек[i][j][k][l] = new Кукарек();
}
}
}
}
return new КукарекКукарекуКудах<Кокок>();
}
volatile transient static synchronized private КококоПокПок кококоПокПок() {
КококКококо кококКококо = кококоКококоКукарекуКукарекКудахтахтах.getКококо().getКококКококо();
КудахтахтахКококКукарек<Кокок> кудахтахтахКококКукарек = кукарекКудахтахтахКудахПокПок.getКококоКококоКококоКудахтахтах().getКудахтахтахКококКукарек<Кокок>();
покПок.setКукарекуПокПокКококоКококо(this.кукарекуПокПокКококоКококо);
кукарекуКукарек.setКококКудахКокоКукареку(this.кококКудахКокоКукареку);
ПокПокКококоКукарекКококоКукарек[][][][][][][][][] покПокКококоКукарекКококоКукарек = new ПокПокКококоКукарекКококоКукарек[1266723368][1174241375][1174241375][1157625000][1157625000][1157625000][1157625000][1174241375][1280824056];
for(int i = 0; i < 1266723368; ++i) {
for(int j = 0; j < 1174241375; ++j) {
for(int k = 0; k < 1174241375; ++k) {
for(int l = 0; l < 1157625000; ++l) {
for(int m = 0; m < 1157625000; ++m) {
for(int n = 0; n < 1157625000; ++n) {
for(int o = 0; o < 1157625000; ++o) {
for(int p = 0; p < 1174241375; ++p) {
for(int q = 0; q < 1280824056; ++q) {
покПокКококоКукарекКококоКукарек[i][j][k][l][m][n][o][p][q] = new ПокПокКококоКукарекКококоКукарек();
}
}
}
}
}
}
}
}
}
return new КококоПокПок();
}
private transient native public КококоКудах кококоКудах(Кококо кококо, КукарекКукарекуКококКудахтахтахКококо кукарекКукарекуКококКудахтахтахКококо) {
кукарекКококоКудахтахтах.setКококо(this.кококо);
return new КококоКудах();
}
native volatile synchronized КудахтахтахКукарекКококКукареку кудахтахтахКукарекКококКукареку(КудахтахтахКококоКококоКококо кудахтахтахКококоКококоКококо) {
ПокПок покПок = new ПокПок();
кукарекуКукарекКукарекКококоКоко.setКукарекКукарек(this.кукарекКукарек);
кукарекуПокПокКококо.setКукарек(this.кукарек);
if(кукарекКукарекуКудах.isКокоКудахКококо<Кокок>()) {
КококоКукарек кококоКукарек = кукарекКококоПокПок.getКукарекуКукарекуКукарекКукарекКококо().getКококоКукарек();
КудахтахтахКококо кудахтахтахКококо = кукарекКококоКококо.getКукарекКококоПокПокКукарекуКудахтахтах().getКудахтахтахКококо();
КукарекКукареку кукарекКукареку = кукареку.getКокоКудахтахтах().getКукарекКукареку();
кококоКококоКукарекуКококо.setКукарекКукареку(this.кукарекКукареку);
if(кудах.isКукарекКокоКудахтахтахКококо()) {
покПокКококоКококоКококо.setКококКококоКококоКококо(this.кококКококоКококоКококо);
покПокКококо.setКококо(this.кококо);
if(кукарекКококоКудахтахтах.isКудахКукарекуКокок<Кокок>()) {
кукарек.setКококо(this.кококо);
кукарекуКудахтахтах.setКококКукарекуКококоКукарекКудах(this.кококКукарекуКококоКукарекКудах);
КокоКукарекКококо<Кокок> кокоКукарекКококо = new КокоКукарекКококо<Кокок>();
КудахПокПокКудахтахтахКококоКококо[][][][][][][][] кудахПокПокКудахтахтахКококоКококо = new КудахПокПокКудахтахтахКококоКококо[1280824056][1157625000][1174241375][1174241375][1157625000][1157625000][1157625000][1157625000];
for(int i = 0; i < 1280824056; ++i) {
for(int j = 0; j < 1157625000; ++j) {
for(int k = 0; k < 1174241375; ++k) {
for(int l = 0; l < 1174241375; ++l) {
for(int m = 0; m < 1157625000; ++m) {
for(int n = 0; n < 1157625000; ++n) {
for(int o = 0; o < 1157625000; ++o) {
for(int p = 0; p < 1157625000; ++p) {
кудахПокПокКудахтахтахКококоКококо[i][j][k][l][m][n][o][p] = new КудахПокПокКудахтахтахКококоКококо();
}
}
}
}
}
}
}
}
} else {
кудахПокПок.setКококоКококКококоКукареку(this.кококоКококКококоКукареку);
}
} else {
покПокКококоКукарек.setКудахтахтахКококо(this.кудахтахтахКококо);
кококо.setКококоКудахтахтахКокоКукарекКукареку(this.кококоКудахтахтахКокоКукарекКукареку);
КокоКукарекуКукарек<Кокок> кокоКукарекуКукарек = кукарекуКококоПокПокКудахтахтахКококо.getКукарекуКукарекКококоКококоКудахтахтах().getКокоКукарекуКукарек<Кокок>();
кукарек.setКукарекКококо(this.кукарекКококо);
}
} else {
КудахтахтахКококоКококоКококоКукарек кудахтахтахКококоКококоКококоКукарек = кококо.getКудахтахтахКококКукарек<Кокок>().getКудахтахтахКококоКококоКококоКукарек();
кукарекКукарекуКудах.setКококКококоКукарек<Кокок>(this.кококКококоКукарек);
кукарекКокоКококоКукарек.setКококо(this.кококо);
if(кококоКококо.isКудахКококо()) {
покПокКококоКудахтахтахКококо.setКококоКудахтахтахКукарек<Кокок>(this.кококоКудахтахтахКукарек);
кукарекКококоПокПокКококо.setКудахтахтахКудахтахтахКококоКудахКукарек(this.кудахтахтахКудахтахтахКококоКудахКукарек);
КукарекуКудахПокПок<Кокок> кукарекуКудахПокПок = new КукарекуКудахПокПок<Кокок>();
while(кококКококоКококоПокПокКококо.isКококо()) {
кукарекКококоПокПокКококо.setКукареку(this.кукареку);
КукарекКукарекКудахтахтахКудахтахтах кукарекКукарекКудахтахтахКудахтахтах = new КукарекКукарекКудахтахтахКудахтахтах();
Кококо[][][][] кококо = new Кококо[1280824056][1157625000][1157625000][1280824056];
for(int i = 0; i < 1280824056; ++i) {
for(int j = 0; j < 1157625000; ++j) {
for(int k = 0; k < 1157625000; ++k) {
for(int l = 0; l < 1280824056; ++l) {
кококо[i][j][k][l] = new Кококо();
}
}
}
}
}
} else {
кукарек.setКукарекКудах(this.кукарекКудах);
кококо.setКококКококо(this.кококКококо);
}
}
return new КудахтахтахКукарекКококКукареку();
}
}
>>370694
Спасибо, про datatemplate я уже сам нагуглил, только я toolbar использовал вместо itemscontrol. Меню тоже переделал, чтоб с картинками было.
А вот как то же самое сделать для хоткеев? То есть мне, например, надо чтобы пользователь мог сам настроить горячие клавиши на все имеющиеся команды. Что-то вроде
<Window.InputBindings ItemsSource="{Binding Path=KeyboardCommands">
<Window.InputBindings.ItemTemplate>
<DataTemplate>
<KeyBinding Key="{Binding Path=Key}" Command="{Binding Path=Command}" />
</DataTemplate>
</Window.InputBindings.ItemTemplate>
<Window.InputBindings>
>>370742
Вот этот пример попробуй, если еще не
http://stackoverflow.com/questions/9385129/window-inputbindings-with-a-bound-collection
У меня взлетело.
Как организовать уровень доступа к данным? Использую ентити фрейвмворк.
>>370846
Лапша какая-то. Мсдн как всегда в своем духе, нихуя конкретного, только перечисления.
Как в формах отлавливать MM_ сообщения, а именно MM_MIXM_CONTROL_CHANGE? Перегружаю WndProc(ref Message m), в ней проверяю m.Msg, но там отражаются только WM_ сообщения. Анон, помоги, пожалуйста, второй день мучаюсь.
>>371068
Когда это сообщение возникает то, чтоб проверить?
>>371087
Да, забыл уточнить: при изменении громкости приложения в микшере системы.
>>371100
Посмотри
http://www.cprogramdevelop.com/5405799/
и возможно https://workspaces.codeproject.com/maurice-tarrant/a-synchronized-volume-control-for-your-application/article/
Я ползунок в микшере двигаю, сообщения 0x3d1
(вроде оно) сыплются десятками блядь. И когда звук в приложении проигрываю - тоже.
Как поставить WPF Toolkit?
Если ставить через менеджер пакетов, то эта тварь тянет за собой еще кучу всякого говна, которое весит больше чем весь мой остальной проект, так что nuget не предлагать.
Просто добавить reference не получается, в xaml пространство имен не появляется. Dll разблокировал.
Алсо, есть альтернативы без подобного пердолинга?
>>371172
А, все, уже нашел.
Надо было "http://schemas.xceed.com/wpf/xaml/toolkit" указывать вместо того что автоматически ставится.
>>371104
Анон, добра тебе. Я, в силу своего слабоумия, не импортировал функцию mixerOpen из winmm.dll.
Шарпаны, как с LINQ получить список индексов вхождения символа в строку? Как найти индекс первого и последнего я нашел, но как получить все индексы - нет.
>>371299
http://stackoverflow.com/questions/12765819/more-efficient-way-to-get-all-indexes-of-a-character-in-a-string
И не выебывайся со строками. А то понапишут всякого говна в кода, а потом плачешь, когда читаешь
someStr.replace('1',2').replace('3','4').substring(2,5).toUpper().Trim()
Дата Время в стригу сама неконвертируется, конвертируй ее анон.
В общем.
Ищу самый эффективный способ дату время в нужный мне формат перегнать.
Пока дошел до такого:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string dateTimeToISO(DateTime dateTime)
{
return (dateTime.Year.ToString() + "-" + dateTime.Month.ToString("D2") + "-" + dateTime.Day.ToString("D2") + "T" +
dateTime.Hour.ToString("D2") + ":" + dateTime.Minute.ToString("D2") + ":" + dateTime.Second.ToString("D2") +
"." + dateTime.Millisecond.ToString("D3"));
}
strdate = dateTime.ToString("s") + '.' + dateTime.Millisecond.ToString("D3");
>>371387
Про встроенное форматирование я знаю.
Вопрос был об эффективном - быстром способе.
А не красивом синтаксисе.
>>371388
Вместо конкатенации можешь StringBuilder.Append
попробовать
>>371405
>Вместо конкатенации можешь StringBuilder.Append попробовать
Да, спасибо, в среднем на 10% быстрее работает со стриг билдером.
Я же правильно все делаю?
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string dateTimeToISOStringBuilder(DateTime dateTime)
{
StringBuilder stb = new StringBuilder(50);
stb.Append(dateTime.Year.ToString());
stb.Append("-");
stb.Append(dateTime.Month.ToString("D2"));
stb.Append("-");
stb.Append(dateTime.Day.ToString("D2"));
stb.Append("T");
stb.Append(dateTime.Hour.ToString("D2"));
stb.Append(":");
stb.Append(dateTime.Minute.ToString("D2"));
stb.Append(":");
stb.Append(dateTime.Second.ToString("D2"));
stb.Append(".");
stb.Append(dateTime.Millisecond.ToString("D3"));
return (stb.ToString());
}
Посоны, поясните за WebClient
хули когда я делаю DownloadString, все скачивается заебись, но когда я делаю его же во второй раз возвращается пустая строка. Это так и задумано - типа объект одноразовый? или я чего то делаю не так?
>>371611
Он не одноразовый. Попробуй с другого сайта скачать страницу.
>>371622
точно, похоже какие-то анальные шуточки с того сайта откуда я качал
>>371461
Что за уебанское форматирование на картинке? Сразу видно - баба кодила.
бамп
Суть такова. Есть табличка, назвем ее ГенерикЮзер и есть поклассы Питурд, Хомяк и т.д со своими личными свойствами (полями). Как грамотно организовать наследование или просто наличие отдельных полей в бд? ЕФ БД сперва.
Я писал программу, в которой необходимо часто читать байты в случайном порядке из большого файла, и, естественно, я тупо пользовался методом FileStream.Read() и свойством Position, но такое решение работало очень медленно (например, файл в 20 МБ читался целую минуту).
Попробовав решить эту проблему при помощи гугла, я узнал, что нужно писать и читать файлы, используя буфер. Я реализовал такую логику, и чтение действительно ускорилось, тот же 20-мегабайтный файл стал читаться менее чем за секунду, однако позже мне стало известно, что FileStream тоже пользуется буфером, поэтому он должен был работать быстро без дополнительных усилий. Чтобы выяснить, почему в реальности всё по-дургому, я замерил время исполнения двух разных методов чтения.
Этот медод тратит на чтение минуту. Тут используется свойство Position.
FileStream someFile = new FileStream(@"С:\file.iso", FileMode.Open); // file.iso — примерно 20 МБ
long length = someFile.Length;
for (int i = 0; i < length; i++)
{
someFile.Position = i;
byte b = (byte)someFile.ReadByte();
}
FileStream someFile = new FileStream(@"С:\file.iso", FileMode.Open); // file.iso — примерно 20 МБ
long length = someFile.Length;
for (int i = 0; i < length; i++)
{
byte b = (byte)someFile.ReadByte();
}
>>372916
>но по-моему к моему коду это не относится, так как никакой другой поток указатель файла не меняет.
Но ты меняешь его в текущем потоке, не так ли?
А раз ты его меняешь, то файл стрим начинает перекешировать новый кусок файла.
Файл стрим - для последовательного чтения предназначен, как и любой стрим в принципе.
понимаешь.
Стрииииим.
Потооок - это что-то такое однонаправленное.
>Вопрос: что я не так делаю?
Неправильно задаешь вопрос для начала.
>Я писал программу, в которой необходимо часто читать байты в случайном порядке из большого файла
Не пользуйся стримами, читай из файла напрямую.
>20 МБ
>большого файла
Если тебе действительно нужна скорость, просто загружай весь файл целиком в память.
Или если участки все же не полностью рандомные используй кеширование.
>>372983
>текущем потоке
Да, но это не another thread тред же.
>А раз ты его меняешь
Методы Read() тоже меняют позицию в этом же потоке, а буфер уже заполнен, и, если я меняю позицию с 0 на 1, скажем, то я не понимаю, зачем буфер нужно перезагружать, ведь выхода за его границы ещё не произошло.
>Файл стрим - для последовательного чтения предназначен
Но ведь жёсткий диск — это устройство произвольного доступа, а FileStream работает с файлами на диске.
>читай из файла напрямую.
Это как? FileStream это не напрямую?
>>372999
Посмотри искодники сеттера у Position, там же миллионы оверхеда и проверок и кэширования. Ты даже если в том же цикле будешь просто менять позицию (без какого-либо чтения), то это займет больше времени, чем прочитать разом весь файл в память.
>>372999
>Да, но это не another thread тред же.
И?
>если я меняю позицию с 0 на 1, скажем, то я не понимаю, зачем буфер нужно перезагружать
А нужно ли?
>Методы Read() тоже меняют позицию
Он осуществляет последовательное побайтное чтение.
Последовательное чтение гораздо быстрее произвольно. Как для самого жесткого диска, так и для программной среды, ненужно устанавливать указатель в нужное место каждый раз итд.
Буфер напрямую тут не при чем.
>Но ведь жёсткий диск — это устройство произвольного доступа, а FileStream работает с файлами на диске.
И?
Ты рассуждаешь о вещах о которых у тебя весьма смутное, и ошибочное представление. Иди учи матчасть для начала.
Закрой книжку по сисярпу и иди разбирайся с тем как устроенны жесткие диски, как они хранят записывают и читают данные.
После этого находи что-то по системному программированию и разбирайся как ОС с этими дисками взаимодействует, потом находи курс по С (не С++) и внимательно изучай с комментариями и переводом на ассемблер как происходит работа с файлами.
>Это как? FileStream это не напрямую?
попробуй пользовать метод Seek для установки указателя в нужное место файла.
http://sauron.org.ua/post/46
http://habrahabr.ru/post/165729/
>Если вы читаете сколь-угодно байт из файла, то будет прочитан весь кластер, а если данные пересекают границу двух кластеров – то два кластера. Хотя, стоит учесть, что все жёсткие диски и RAID контроллеры имеют внутренний кэш, который может существенно ускорить чтение и запись секторов.
>Для избегания повторных операций чтения/записи, всегда оперируйте последовательными блоками памяти, размером в кластер.
>>372999
>Это как? FileStream это не напрямую?
Нет. Стримы - это оче высокий уровень абстракций с перделками и свистелками внутри.
Как - я тебе увы не отвечу, но что-то вроде нарыл в интернетах, погугли сам попробуй.
Вот что-то есть http://habrahabr.ru/post/153181/
Может тут есть кто-то кто знает как работать с апи ОС напрямую из сисярпа?
>>373037
>И?
Что и? В документации не пишут, что если ты будешь менять указать при помощи Position, то обязательно будет перезагружден буфер.
>Ты рассуждаешь о вещах о которых у тебя весьма смутное, и ошибочное представление.
Ты так и не ответил на мой вопрос. Зачем FileStream перезагружает буфер, когда это не нужно, ведь если бы не перезагружал, то работал бы быстро? Началаось чтение, заполнился буфер в несколько КБ, меняется указатель с 0 на 1, это, очевидно, не приводит к выходу за границы нескольких КБ, следовательно, буфер перезагружать не нужно. Вообще, зачем тогда нужен буфер FileStream'у, это что, представление кластера и при любом изменении позиции он будет перезаписываться?
>попробуй пользовать метод Seek для установки указателя в нужное место файла.
Пробовал, он такой же медленный, кроме того, Position и так его вызывает.
>>373096
>Что и? В документации не пишут, что если ты будешь менять указать при помощи Position, то обязательно будет перезагружден буфер.
Наверное.
>Ты так и не ответил на мой вопрос. Зачем FileStream перезагружает буфер, когда это не нужно
Задай разработчикам майкрософта.
Я вообще свечку не держал, и что за магия там внутри происходит не знаю. Я только предполагают.
Мой ответ - за шкафом. Так устроен файл стрим.
>Вообще, зачем тогда нужен буфер FileStream'у
Читать данные с диска порциями в память. Чтобы затем их обрабатывать.
>Ты так и не ответил на мой вопрос.
Я на допросе?
Изучи то, как система работает с жестким диском и файлами.
Добавь свою проверку например.
Я не думаю, что это даст тебе прирост производительности, учитывая тот факт, что читать данные тебе нужно в произвольном порядке.
>>373106
>Изучи то, как система работает с жестким диском и файлами.
Я знаю, как она работает с файлами. Для того, чтобы знать, что чтение и запись происходит по кластерам, не нужно изучать код на ассемблере. Ты бы мне ещё посоветовал разобраться в том, как JITter преобразует мой код в инструкции конкретной платформы.
В принципе, спасибо за ответ, всё стало намного понятнее, короме того, что FileStream перезагружает свой буфер после того как я просто пишу someFile.Position = someFile.Position (ведь, по сути, это то, что происходило у меня в коде).
У меня ещё один вопрос. Ты говорил, что, если уж так хочется скорости, то нужно загружать файл в память. Программе моей нужен довольно произвольный доступ к байтам потому, что она работает с wav-файлами, я могу редактировать случайные блоки файла, содержащие нужные мне семплы, также программа может генерировать wav-файл, но если это делать в памяти, то при генерации где-то 200-мегабайтного файла, я получаю OutOfMemoryException, а памяти ещё достаточно, откуда же тогда исключение? Собственно поэтому я стал работать с файлами на диске, потому что мне нужно иметь возможность свободно и быстро работать с фалами до 4 ГБ.
>Ты бы мне ещё посоветовал разобраться в том, как JITter преобразует мой код в инструкции конкретной платформы.
Как ты собрался программировать если не представляешь, хотя бы примерно, что получается в итоге на низком уровне?
Ты должен знать как работает технология прежде чем ей пользоваться.
>короме того, что FileStream перезагружает свой буфер после того как я просто пишу someFile.Position = someFile.Position (ведь, по сути, это то, что происходило у меня в коде).
Я тебе сейчас совсем расстрою. Но вызов Seek не только перезагружает буфер.
Ты и так все понимаешь конечно.
Но я на всякий случай расскажу, вдруг ты не такой умный как говоришь.
Так вот. Когда ты вызываешь Seek, пройдя через жопу уровней абстракций, это приводит к Seek головки диска нужного сектора и операция сия занимает в современных жестких дисках в среднем 15 миллисекунд!
Правда, я только что проверил, с SSD скорость падает примерно так же.
Сложно сказать что за дерьмо происходит в этом файл стриме, поэтому если все таки хочешь эффективного доступа, пользуй Си и винапи.
>после того как я просто пишу someFile.Position = someFile.Position (ведь, по сути, это то, что происходило у меня в коде
Потому, что в реализации метода нет проверки на это.
Напиши простую обертку учитывающую этот момент, если считаешь необходимым.
>Ты говорил, что, если уж так хочется скорости, то нужно загружать файл в память.
Да.
>но если это делать в памяти, то при генерации где-то 200-мегабайтного файла, я получаю OutOfMemoryException, а памяти ещё достаточно, откуда же тогда исключение?
Увы я не экстрасенс. Очевидно, что где-то в коде ошибка. Давай код и анон посмотрит.
>Собственно поэтому я стал работать с файлами на диске, потому что мне нужно иметь возможность свободно и быстро работать с фалами до 4 ГБ.
Грузи в память.
Если памяти мало грузи большими блоками. Тебе то редактировать все равно нужно большими кусками, а не по отдельным байтам в сотнях мегабайт друг от друга.
Можешь посмотреть вот сюда http://msdn.microsoft.com/en-us/library/dd997372%28v=vs.110%29.aspx
Но мой тебе совет. Грузи все в память, и не мучайся.
>>373037
>Ты рассуждаешь о вещах бла бла бла я нихуя не знаю, но хочу сойти за умного
Ну охуеть! У жёсткого диска последовательное чтение-то ОКАЗЫВАЕТСЯ быстрее рандомного. Вот это новость. Вот уж спасибо, а то мы тут не знали.
>>373039
>как работать с апи ОС напрямую из сисярпа?
[DllImport("kernel32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern ulong GetTickCount();
//можно звать
>>373109
>FileStream перезагружает свой буфер
Полагаю, что это проще, чем выяснять на сколько ты сместился, вышел ли ты за пределы буфера, и если да, то куда и насколько. Тот мудак тебе правильно сказал, что стрим - он для последовательного чтения.
>OutOfMemoryException
Лол, куча закончилась? Ты, наверное, что-то не так делаешь. Не верю, что шарп не может выделять глобальную память. Это же такой-то отсос был бы.
>>373110
>Потому, что в реализации метода нет проверки на это.
Вот я ожидал такого интеллектуального поведения от файлстрима, ты же согласишься со мной и не будешь снова обвинять меня в невежестве, если я скажу, что
for (int i = 0; i < length; i++)
{
someFile.Position = i;
byte t = (byte)someFile.ReadByte();
}
for (int i = 0; i < length; i++)
byte t = (byte)someFile.ReadByte();
MemoryStream ms = new MemoryStream();
for (int i = 0; i < 2000000000; i++)
ms.WriteByte(0);
>>373111
>Лол, куча закончилась? Ты, наверное, что-то не так делаешь. Не верю, что шарп не может выделять глобальную память. Это же такой-то отсос был бы.
>>373112
>Ровно на 256 мегабайтах будет исключение.
Короче, в 32битном режиме, оно из кучи выжимает максимум около 1.6 гигабайта. Что вообще норм.
Чтобы выжимало больше, нужно зайти в настройки проекта, и указать что собираешь ты для 64битной системы.
Но не забывай, что массивы все равно индексируются интом.
Поэтому имеет смысл для больших файлов создавать несколько массивов по 500 мегабайт например, или смотря какие там у файлов размеры, не больше 2 гигабайт в общем.
byte[] testbuf1 = new byte[2000000000];
byte[] testbuf2 = new byte[2000000000];
byte[] testbuf3 = new byte[2000000000];
for (int i = 0; i < 2000000000; i++)
{
testbuf1[i] = 245;
testbuf2[i] = 245;
testbuf3[i] = 245;
}
unsafe
{
byte* chunkOfMemory = (byte*)Marshal.AllocHGlobal(int.MaxValue);
byte* chunkOfMemory1 = (byte*)Marshal.AllocHGlobal(int.MaxValue);
byte* chunkOfMemory2 = (byte*)Marshal.AllocHGlobal(int.MaxValue);
for (int i = 0; i < int.MaxValue; i++)
{
chunkOfMemory[i] = 245;
chunkOfMemory1[i] = 245;
chunkOfMemory2[i] = 245;
}
}
>>373115
Пиздец я тут засиделся с вами, аноны.
Сладких снов.
А я пойду тян будить.
>>373115
>Ничего личного, просто ты хорошо демонстрируешь программистов которые кроме шарпа ничего не видели.
Няш, я пока только продемонстрировал разочарование от того, что FileStream не ведёт себя так, как я того ожидаю, ты же сразу делаешь далеко идущие выводы о том, что всё, что происходит за кулисами CLR для меня — магия. Конечно, я совсем не детально понимаю, как там всё работает, но кое-что я знаю.
Если ты думаешь, что для того, чтобы понять, что Seek(), не смотря на использование объектом буфера, каждый раз дёргает головку диска, мне нужно
> пройти путь от ассемблера до С++
, то я считаю, что ты преувеличиваешь (это ещё мягко говоря). Просто на таком высоком уровне абстракции я думал, что реализация свойсвта Position, будет учитвать некоторые моменты. К счастью, я сейчас открыл для себя http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile%28v=vs.110%29.aspx он работает с нужной мне скоростью.
>>373112
>Ровно на 256 мегабайтах будет исключение.
Действительно, похоже на отсос. Попробуй каким-нибудь PExplorer'ом посмотреть, сколько хипа у тебя в бинарнике прописано. Попробуй поменять это значение и посмотри, будет ли опять падать (будет, главное - когда).
>>373115
>Короче, в 32битном режиме, оно из кучи выжимает максимум около 1.6 гигабайта
Это памяти доступной у тебя два гига, а размер кучи задаётся при компиляции и по-умолчанию обычно равен 64М.
>>373121
>Это памяти доступной у тебя два гига
Доступной в куче.
>а размер кучи задаётся при компиляции
Тащемто он динамически увеличивается если надо.
>>373118
Я так понимаю, что
>путь от ассемблера до С++
Ты таки не проходил. Потому и не понимаешь о чем я пишу.
Вот пройдешь, тогда поймешь.
>делаешь далеко идущие выводы
Ты преувеличиваешь длину моих выводов. К тому-же я всего лишь предполагаю, не принимай близко к сердцу.
>он работает с нужной мне скоростью.
Зашибись, рад был помочь.
>>373161
> Потому и не понимаешь о чем я пишу.
И что же я не понял из тобою написанного? Пока никаких тайных знаний, кроме «Seek() каждый раз обращается к диску, а это занимает 15 мс», я из нашего разговора не почерпнул, и я сомневаюсь, что изучение ассемблера привело бы меня к какому-нибудь офигительному выводу. То, что читать и писать лучше блоками без Seek(), мне и так понятно уже. Видишь, как быстро был пройден путь.
>>373167
>И что же я не понял из тобою написанного?
Глубину своего непонимания.
>я сомневаюсь, что изучение ассемблера привело бы меня к какому-нибудь офигительному вывод
Для офигительных выводов есть гашиш.
А как работает ОС знать надо хоть примерно.
>Видишь, как быстро был пройден путь.
Вижу только юного падавана.
Эмоции ты контролировать должен, ситсенмое программирование изучать. Бездумное использование автоматического управления памятью к java стороне программирования привести может.
>>373169
>А как работает ОС знать надо хоть примерно.
Я и так знаю, кроме того, "примерно" это растяжимое понятие, а ты, похоже, больше любишь потешить своё чсв, а не помочь.
>>373161
>Доступной в куче.
Доступной в глобальной памяти.
>он динамически увеличивается
Он не увеличивается. Вообще. Никогда. Даже вручную. Совсем. Блядь. Можно создать ещё один хип, и скопировать в него данные со старого (или оставить их вместе), но не увеличить.
>если надо.
Выше, как видишь, надо, "а хули толку".
Короче, сейчас ты поднимаешь свою жопу, надеваешь тапочки, уёбываешь на свой хабр (или откуда ты там вылез) и больше не возвращаешься.
>>373204
>Доступной в глобальной памяти.
То есть память под массивы выделяется не из кучи?
>Выше, как видишь, надо, "а хули толку".
Ты о чем?
>>373173
Тебе кажется.
Не нужно проецировать свое желание тешить ЧСВ на других.
>а не помочь
Я тут пол гугла перерыл за тебя. Но у тебя сперма все мозги залила до такой степени, что даже "спасибо" сказать ты не в состоянии.
А еще наглости про мое ЧСВ говорить хватает.
Да иди ты нахуй.
Привет двач, есть один ТФС, суть такова...
Имеет ли смысл настраивать построение билдов через TFS (а я так понял он это умеет) для небольшого проекта, просто для порядка и самодисциплины? Если собирать вручную из рабочей копии, то можно случайно собрать не то, что в репозитории (ну изменения какие-то незакомиченые или же глюканёт что-то и не заберётся какой-то файл из последней ревизии из-за конфликта, например). А тут я так понимаю можно настроить так, что собирать будет сам ТФС через свой билд сервер и выкладывать куда ему скажут, что исключит возможность таких ошибок.
>>373276
>Я тут пол гугла перерыл за тебя.
Кому ты пиздишь? Перерыл он полгугла. В ответ на мой пустяковый вопрос ты послал меня изучать ассемблер и си, а это уже хамство. Когда же я стал задавать уточняющие вопросы ты сказал "я что, на допроси?!". Короче, сагаю от возмущения. А "спасибо" я сказал выше, но ты этого не заметил, как я вижу.
>>373276
>То есть память под массивы выделяется не из кучи?
Скажи честно, ведь твой путь asm -> c -> c++ ограничился чтением названий языков на википедии? Что за хуйню ты несёшь?
>>373400
>В ответ на мой пустяковый вопрос
Вопрос не пустяковый. Тебе кажется, что он пустяковый. Потому, что ты плохо разбираешься в вопросе. О чем я тебе не раз говорил.
>ты послал меня изучать ассемблер и си, а это уже хамство.
Я дал свою рекомендацию. Ты же зачем-то начал меня убеждать в том, что ты все и так знаешь и охуенный специалист вообще. Если так - хорошо для тебя. Но мне до этого нету абсолютно никакого дела.
>а это уже хамство.
Хамство тут только от тебя.
Ты пришел на форум, за бесплатной консультацией.
Я тебе бесплатную консультацию даю, а ты позволяешь себе высказывать свое недовольство, да еще вешать на меня всяко говно, ЧСВ я видители тешу.
Если ты сам такой охуенный специалист, откуда у тебя "пустяковые" вопросы?
>>373413
>Скажи честно, ведь твой путь asm -> c -> c++ ограничился чтением названий языков на википедии?
Нет.
>Что за хуйню ты несёшь?
В чем проблема?
Мне кажется ты пытаешься придираться к не совсем корректному(как тебе кажется) использованию мною терминологии.
Иди ка ты нахуй.
Говори по делу, если есть какие-то притенении, ненужно клоунау устраивать загадочным - "что за хуйню ты несешь?".
Покаместь что хуйню несешь только ты.
>>373204
>Можно создать ещё один хип, и скопировать в него данные со старого
Это и называется - увеличить.
Ты говоришь о хипе как о механизме выделения памяти, а я говорю о памяти выделяемой с его помощью.
>>373457
>Тебе кажется, что он пустяковый.
Нет, он — пустяковый, и ответ на него уместился в одно-два предложения, но тебе гораздо приятнее убеждать меня в том, что я тупой, а не отвечать на вопрос.
>Потому, что ты плохо разбираешься в вопросе.
Ты опять повторяешь это ничем не обоснованное утверждение, но я пока не увидел подробного ответа на вопрос, что я там такого не понял важного. Подробный — это подробный, а не «ты не понял глубину своего непонимания».
>Ты же зачем-то начал меня убеждать в том, что ты все и так знаешь и охуенный специалист вообще
Не было такого. Я задавал вопрос о реализации FileStream'а, но ты как-то не нашёл, что ответить, сказал лишь, что «свечку не держал», но зато нашёл время разглагольствовать о том, кого я там представляю и как это плохо. Если бы ты был способен отвечать на заданные тебе вопросы, а не учить жизни вместо этого, то этого разговора и неприятных эмоций от него ни у кого бы не было.
>Я тебе бесплатную консультацию
Тебе кажется, запретить кому-то читать книгу по си шарпу и отправить учить ассемблер — это не консультация, а хуй собачий.
> ЧСВ я видители тешу.
Да, тешишь.
>>373457
>Нет.
Даже до википедии не дошёл?
>пытаешься придираться к не совсем корректному(как тебе кажется) использованию мною терминологии
Ну, охуеть, "не совсем корректному", "как тебе кажется", блядь. Ну давай её, может быть, тогда стеком называть, или массивом? ВИДЬ ЭТОЖИ ТОЖИ ПАМЯТЬ!
>Это и называется - увеличить.
Это называется "создать новый и скопировать туда данные из старого". Более того, даже тут ты всё равно обосрался, потому что шарп этого не делает, иначе код у того парня не падал бы на отметке в 256М. Шарпоотсос, кстати, можете записывать.
>Ты говоришь о хипе как
Я говорю о хипе, как о хипе. Это термин, у которого есть определённое значение, а ты говоришь "процессор", подразумевая системный блок, и "компьютер", подразумевая монитор, поэтому твои выебоны с "изучи ассемблер" (без какой-либо конкретики) выглядят как кукарекание вчера написавшего HelloWorld на сишке и возомнившего себя хакером школьника.
Короче, иди нахуй и умри там.
>>373477
>иначе код у того парня не падал бы на отметке в 256М
Ты думаешь дело в большой фрагментации памяти?
Ты уверен, что код у него падает именно при выделении 256М?
Ты сам этот код проверял?
Как так получается, что у меня полтора гигабайта ок?
И как вообще размер кучи с этим связан?
Тут ключевую роль играет лимит памяти которую через кучу можно выделить.
>Это называется "создать новый и скопировать туда данные из старого".
А позвонить по телефону называется - "взять трубку подвинуть палец на кнопку с первой цифрой номера, нажать ее, услышав звуковое подтверждение нажатия передвинуть палец к кнопке со вторым номером итд."
>Шарпоотсос, кстати, можете записывать.
То есть ты просто мимохейтер? И с тем как работает выделение памяти в шарпе незнаком? Но при этом делаешь охуительные заявления о том, что в шарпе происходит а что нет?
>Это термин, у которого есть определённое значение
Все люди, которых я встречал до тебя, говоря - "выделение памяти в куче" имели ввиду именно что выделение памяти из памяти доступной процессу с использованием механизма кучи. А не выделение памяти в служебной области механизма распределения памяти.
И тут приходит какой-то долбеб и начинает закатывать истерики, я что-то неправильно говорю оказывается.
>Короче, иди нахуй и умри там.
Пиздуй обратно в свою парашу, и не возвращайся.
>>373462
>но тебе гораздо приятнее убеждать меня в том, что я тупой
У тебя галлюцинации.
Привет, сишурупы. Новый тред создавать не буду, вопрос простой, напишу итт.
Есть код пикрелейтед.
Делаю брутфорс трипкода по регулярке многопоточно.
Софтина обрабатывает порядка 79500 трипкодов в секунду.
Заебался ждать. Посоветуй чего.
>>374715
TripCUDA, Tripcode Explorer, что-то там ещё для амудей было.
Если сам хочешь, то переписывай на сишку и гугли bitslice des.
Впф, нужно фокусить первую строку датагрида. Как это сделать, я знаю. Что я хотел бы узнать, это на какой ивент надо написать код, чтобы он выполнялся при любом обновлении ItemsSource грида. То есть, допустим, я нажал кнопку обновить на форме, выполнилась привязанная к кнопке команда и прошел запрос к базе, привязанный к гриду ObservableCollection изменился - нужно зафокусить первую строку.
>>374753
>Как это сделать, я знаю.
Ну-ка покажи, а то сомнения.
>>374715
>Посоветуй чего
Не используй Random, он у тебя там наверное больше половины времени жрет. Просто лексиграфически инкрементируй строку.
>>374769
http://pastebin.com/Dp62d3pg
Пока что запилил костылик в виде передачи датагрида в качестве параметра в контроллер, в нем просто пишу метод обновления везде где изменяется коллекция, но это какое-то оче индусское мввм получается.
>>374781
Начальник! Этот пидорас опять использует wpf без mvvm!
В viewmodel же сделай selectedItem, в датагриде бинд на него сделай, а везде где коллекция заменяется будешь этот итем в first устанавливать. Код-сзаду нинужен.
>>374786
У меня есть биндинг на selected item, куда же без него.
>везде где коллекция заменяется будешь этот итем в first устанавливать
И это просто ВЫБЕРЕТ элемент. Это конечно нужно, но мне же еще нужно установить на него ФОКУС. Зачем? Чтобы с клавы можно было управлять не нажимая таб стопицот раз пока не перейдешь внутрь этого ссаного грида.
Без кода сзаду тут никак походу. Может какие-то омские behavior можно сделать разве что.
>>374807
Надо писать читаемые условия. Такие оптимизации ну точно ничего не дадут. И компилятор может сделать их.
>>374807
Х.з., мне if (!found && !stop) больше нравится. Читается чуть-чуть приятней, чем if (!(found || stop))
Плиз, помогите... Можно ли сохранить массив байтов в поле SQLite? Пишу в C# потому что вся остальная моя прога на C#. :) Попытка переводить поток байтов в строку потерпела фейл, так как иногда может возникнуть символ закрытия строки, что вызывает ошибку...
вместо введения
>>374715
Твой код на столько говёный, что я даже советовать тебе ничего не буду. Рака яичек тебе.
Ребята, не поливайте говном и не прогоняйте, я не ради холивара пришёл. Узнал, что у нас в университете в этом семестре будут давать C#. Сначала меня это очень расстроило, потому что я никак не вижу в своём будущем этот язык программирования. Вообще, я люблю С, но пишу на Джаве (Андроид). Короче, меня не интересуют всякие жирные интерпрайз веб-приложения, Windows, Windows Phone и всё остальное от Майкрософт (не люблю и не пользуюсь их продуктами). Я решил поискать плюсы в сложившейся ситуации и в голову пришёл только гейдев с Unity (гейдев мне всё-таки немного интересен) и просто теоретические знания, чтобы можно было поддержать беседу или сравнивать языки, поясняя на дваче, чем язык A лучше B. Скажите, где ещё сейчас прижился C#, а точнее его реализация mono, ну или другая свободная (Xamarin не интересует)? Что я упустил? Или мне стоит забить на пары?
>>375611
>чем язык A лучше B
Это было так давно, что никто уже не помнит.
>>375611
MonoGame, это XNA на Mono, но поддерживает не только ПК и биллькину консольку, но и ведра, iOS, OSX, Blackberry, Linux.
Анон, выручай.
Есть класс, который держит соединение при помощи объектов классов TcpClient и SslStream. Необходимо грамотно реализовать методы Dispose и Disconnect для данного класса. Сначала было я подумал, что для Dispose будет достаточно написать следующий код:
protected virtual void Dispose(bool disposing)
{
// release unmanaged memory
if (disposing)
{
// release other disposable objects
if (_sslStream != null)
{
_sslStream.Dispose();
_sslStream = null;
}
if (_tcpClient != null)
{
_tcpClient.Close();
_tcpClient = null;
}
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
Но потом я встретил в интернете мнение, что для нормального завершения операций TcpClient'а необходимо вызывать метод Disconnect:
_tcpClient.Client.Disconnect(false);
http://stackoverflow.com/questions/425235/how-to-properly-and-completely-close-reset-a-tcpclient-connection
Ещё в одном месте намекнули на использование Shutdown:
_tcpClient.Client.Shutdown(SocketShutdown.Both);
Что из этого в итоге надо использовать в случае Dispose и что в случае Disconnect? Всё сразу или что-то одно?
Сам, шарпач. Есть один проект в винформах. Там на панельке генерятся несколько кнопок в случайных местах. Все отлично работает, но теперь я хочу нарисовать кликабельные линии, которые связывали бы эти кнопки.
Я смог просто нарисовать линии через:
Graphics.DrawLine(pen, buttonArray.Location, buttonArray[i+1].Location);
Но, они, очевидно, не имеют ивентов.
Так вот, как сделать такие линии?
>>356145 Ананасы, у меня есть проект, который дал мне батяня, чтобы я его разобрал. Проект связанный с базой данных для сайта, то есть есть база данных, и код нескольких формочек.
Трабл:При открытии решения предлагает мне связаться сервером, ибо открываемое решение связано с системой управления версиями на следующем сервере TFS :server_name. Ну я нажимаю вперед, а чо. После этого в следующем окне я должен предоставить им мои учетные данные для подключения к TFS. Я не понимат что я должен сделать -_- *хнык
мимо первый раз sql database on c#
>>375797
>tcpClient
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.tcpclient%28v=vs.110%29.aspx
>public class TcpClient : IDisposable
Просто вызывай Dispose у него и все.
>>375981
си есть печально
Это не мой проект, а батяни - те, кто делал проект должны дать мне данные для подключения к TeamFoundationServer ?
>>375945
Лелка чтоль. Это винформс и ебаное рисование. По большому счету, тебе надо подписываться на событие клика мышью на панельке, потом по координатам клинка определять линия это (и какая) или нет. Потом делать обработку, перерисовку и так далее. Это достаточно объемный нудный геморрой. Которым, очевидно блять, надо заниматься только после того, как ты убедился, что ни одна из существующих библиотек для рисования графов тебя не устраивает.
>>375982
У него нет публичного метода Dispose, только Close. Хорошо, буду звать его в своём методе Dispose, но что делать в случае с Disconnect?
>>375999
>нет публичного метода Dispose
Есть, но он реализован для интерфейса явно, и ты можешь получить к нему доступ сделав приведение: (tcpClient as IDisposable).Dispose()
>что делать в случае с Disconnect
http://msdn.microsoft.com/ru-ru/library/system.net.sockets.socket.disconnect%28v=vs.110%29.aspx
>If you are using a connection-oriented protocol, you can use this method to close the socket. This method ends the connection and sets the Connected property to false. However, if reuseSocket is true, you can reuse the socket.
>To ensure that all data is sent and received before the socket is closed, you should call Shutdown before calling the Disconnect method.
Вебмакака врывается в этот itt тред
У меня тут есть шиндофон + я заметил, что в vs есть туллбокс до js-прилложений
Насколько это говноедство? Есть какие-то живые примеры в сторе? А то туториалы нашел, а примеры того, что получится нет
Выглядит оно конечно вполне нативно, но хочется потрогать
>>376003
> (tcpClient as IDisposable).Dispose()
Это вообще законно?
>If you are using a connection-oriented protocol, you can use this method to close the socket. This method ends the connection and sets the Connected property to false. However, if reuseSocket is true, you can reuse the socket.
Хорошо, а что делать в таком случае при повторном коннекте? Вызвать Connect будет достаточно или проще пересоздать весь TcpClient полностью?
>>376015
>хочется потрогать
http://try.buildwinjs.com/
http://msdn.microsoft.com/en-us/library/windows/apps/hh758331.aspx
http://code.msdn.microsoft.com/windowsapps/Universal-Windows-app-cb3248c3 (примеры)
Бери и трогай. WinJS существует не первый день, выглядит нативно.
>>376017
>законно
Нет. Мизулина издала закон, что только прочитавшие про явную реализацию интерфейсов могут этим пользоваться.
>Вызвать Connect будет достаточно или проще пересоздать весь TcpClient полностью?
Однозначно проще новый.
>>375956
Кто тебе дал проект - они и должны дать логин с паролем. Для любого закрытого репозитария требуется пароль, или ключ, или еще чего.
На чем можно графон рисовать? На канвас хуярить не хочу, так как нужно рисовать фракталы.
Помогите с классом Stream. Можно ли как-то превратить массив байтов в поток, не используя жесткий диск?
Аноны, нужна помощь. Как запилить автомасштабирование шкалы Y стандартного winform chart control'а?
>>376587
Фракталы как раз очень удобно рисовать на канвасе.
>>356479
>в частности, "генерики" сделаны ещё хуже, чем в джяве™
ясно
Как в MVVM правильно объявлять команды? Пока что делаю вот такое говно:
private ICommand dummy;
public ICommand Dummy
{
get
{
if (dummy == null)
{
dummy = new DelegateCommand(
new Action<object>(delegate
{
Method1();
Method2();
MethodN();
}));
}
return dummy;
}
}
>>356145
Привет, анон. Есть два стула языка: Java и C#. Какой из них лучше изучать инженеру, которого доебал бесперспективный проектный отдел?
>>379427
Жаба, если цель сьебаться, просто жабоёбских вакансий больше. Шарпоблядей меньше, но проще найти позицию архитектора или сеньора, т.к. спрос есть, а конкуренция среди более-менее скилловых небольшая, ибо их и так и мало.
>>379716
>жаба это подмножество c#
Чо бля? Шарп это подмножество джавы.
>>379718 покажи нам божественный LINQ в жабе, async/await, ну и далее по списку.
>>379277
Придираться к табуляции это что-то уровня граммарнаци.
>>379726
покажи нам божественные джереники в шарпе, а потом мы поговорим
>>379932
Ну ок, смотри. А говорить с тобой я все-равно не буду.
http://msdn.microsoft.com/en-us/library/512aeb7t.aspx
>>379974>>379978
Haskell > Scala > F#
Фисярп - это такой функциональный синтаксис для дудки. В системе типов ничего интересного нет. Там даже тайпклассов и higher-kinded типов нету хотя-бы как в скале. А уж до хаскеля ему как до луны. Ни о каком Higher Order Algebraic Programming и речи быть не может, а обычное FP - говно для быдла. Так что сосите.
>>379991
Палехче так, пусть хотя бы разберутся, что среднестастическая офисная макака сможет выучить, а что нет. Пока тот же фшарп дойдет до толстожопого ытырпрайза его обязательно допилят, ну или запилят нечто новое, ну а хаскель, это блядь хаскель, стэнд для обкатки всего того, что смогли наизобредать в топологии, теории категорий, лямбда исчислениях, етк и поисках как это все заюзать. Нечего их вообще сравнивать, тоже самое, что пытаться сравнить топор с мультитулом.
Ну и вообще, мс как всегда в своём репертуаре: посмотрит на каких граблях поотбивали себе яйца скалоёбы и запилит свою версию S# с шахматами, куртизантками и нормальной VM.
>>380059
> Ну и вообще, мс как всегда в своём репертуаре: посмотрит на каких граблях поотбивали себе яйца скалоёбы и запилит свою версию S# с шахматами, куртизантками и нормальной VM.
Репертуар MS - слизать, но при этом обязательно что-нибудь испортить ради вендорлока своих кодеров практиками, которые больше нигде не используются, как, например, в случае с конвенциями оформления кода и именования в C#.
Привет всем. Как мне по tcp протоколу отправить сообщение из клиента, написаного на Lua (luaSocket), на сервер написаный на c#?
Связать C#+C# и Lua + Lua получается, но если их поменять местами они не подключаются. Реально такое сделать?
поговорите с ньюфагом
Не знаю был ли такой тред, но имхо явно нужен. Короче задаём вопросы, отвечаем, делимся впечатлениями.