[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.27510 Reply
File: 200px-NET_h_rgb_2...
Png, 17.12 KB, 200×49
edit Find source with google Find source with iqdb
200px-NET_h_rgb_2.png
File: 371px-C_sharp.svg...
Png, 6.26 KB, 371×254
edit Find source with google Find source with iqdb
371px-C_sharp.svg.png

Здесь будет ветка обсуждения .net и C#.
И сразу вопрос: какой встроенный класс в C# реализует массив с обращением по индексу за О(1), в котором при этом можно было бы добовлять в конец элементы(аналог vector из С++), и какой соответственно реализует связный список с вставкой элемента в середину и начало и удалением элемента за О(1)(аналог list в С++).
>> No.27512 Reply
>>27510
Ты бы хоть по первым страницам пробежался. Недавно же был C#-тред.
> аналог vector из С++
Обычный массив: YourType[]
> связный список
> O(1)
Взаимоисключающие параграфы.
>> No.27513 Reply
>>27512
Олсо, по второму пункту: LinkedList работает за O(1).
>> No.27516 Reply
>>27512>>27513
> LinkedList работает за O(1).
То есть ты говоришь "работает", не уточняя, о какой операции речь? Ну и зачем же тогда нужен связный список, его что дураки придумали? Фишка связного списка в том, что иемя сразу ссылку на элемент списка, можно за О(1) вставить после него(иногда и перед, если двусвязный) элемент, ничего не сдвигая. Но это когда элемент, после которого вставлять уже найден, сразу перейти к i-му в списке нельзя. А в массиве всё наоборот, можно сразу перейти к i-тому, но нелльзя впихнуть в середину без сдвигов. Настоятельно советую подтянуть знание структур данных, это ни в какие ворота, серьёзно.
> Обычный массив: YourType[]
Ни под то не подходит, ни под другое. У него длина же не меняется.Только не надо предлагать мне при добавлении нового элемента создавать новый массив и в него копировать старый.
Вот чем же по-твоему тогда отличаются в С++ list и vector?
>> No.27517 Reply
>>27516
Иди и читай MSDN, ленивая задница. В описании неймспейса System.Collections.Generic есть всё, о чём ты тут спрашиваешь.
> То есть ты говоришь "работает", не уточняя, о какой операции речь?
> > LinkedList<T> предоставляет отдельные узлы типа LinkedListNode<T>, поэтому вставка и удаление являются операциями O(1).
Соус: http://msdn.microsoft.com/ru-ru/library/he2s3bh7%28v=vs.90%29.aspx
> Ни под то не подходит, ни под другое.
Признаю, неправильно прочитал вопрос. Используй List - он реализует и доступ по индексу за O(1), и добавление в конец.
>> No.27518 Reply
>>27517
> доступ по индексу за O(1)
предлагаю запилить пару бенчмарков
>> No.27520 Reply
>>27518
Зачем?
>> No.27521 Reply
>>27517
Теперь ясно. Как же им нравится всё называть по-своему.
>> No.27522 Reply
>>27517
Спасибо.
>> No.27524 Reply
>>27520
Проверить. На MSDN ничего про эффективность не говорится.
>> No.27526 Reply
>> No.27527 Reply
>>27526
Ну вот, всё уже посчитано. Никакого веселья.
>> No.27541 Reply
File: 1.jpg
Jpg, 28.51 KB, 400×288
edit Find source with google Find source with iqdb
1.jpg
File: 2.jpeg
Jpeg, 222.70 KB, 800×655
edit Find source with google Find source with iqdb
2.jpeg

Сап, разработчики!

Пилю свою первую софтинку на C# .NET. Хочу сделать всё правильно и хорошо. Прочитал Макконела, несколько книг по Agile, Шаблонам, Троелсена плюс к этому регулярно догугливаю интересующие меня вопросы. В силу отсутствия опыта, не могу понять как же всё таки правильно реализовать всё это для создания приложения.
Могу ошибаться, если что поправляйте. Существует задача: сделать приложение с GUI, в GUI отображать заранее известную таблицу которая должна служить пользователю одновременно для ввода данных и получения результата. Грубо говоря в ячейки колонок А и Б пользователь ввёл данные, нажал кнопку «Пыщ» и в ячейке колонки В отобразился результат. Кажется всё просто.
Реализовал MVP:Passive View, сделал объектную модель, и теперь осталось реализовать open/save/new и связать через презентер модель с dataGridView. Тут то и проблема. Данных(строчек) может быть много, и биндинг тут не очень хорошая затея. Я думал в сторону собрать модель в List<> и сделать двусторонний конвертер: в DataTable и обратно. Таким образом Презентер будет создавать модель, генерировать таблицу, и копию привязывать к DataGridView. Затем при необходимости обработки данных копия таблицы у презентера передаётся модели и в модели вызывается метод update. Всё здорово. Даже заработало.

Спустя некоторое время потребовалось расширить объектную модель. Используя принцип Лисков и композицию я предусмотрел места возможного изменения. Теперь стало сложно генерировать List<>, ведь теперь все данные находятся в разных классах. К тому же возникла другая проблема: В некоторых вариантах появились NullObject'ы. которые вообще не нужно отображать в определённом варианте таблицы.

Начал смотреть в сторону ORM. Nhibernate, EF, SubSonic и другие. Почитал-посмотрел. По сути они мне и нужны, но не знаю насколько они подходят для моей (сравнительно) небольшой задачи. Потребности в использовании бд нет и вряд-ли будет.

tl:dr
Вопрос в том, как без боли и boiler plate кода устроить передачу данных от объектной модели к презентеру, который будет их передавать во view в виде таблицы.

С другой стороны «придётся терпеть» если нет относительно простого пути.

Гугл не является неиссякаемым источником, в отличии от людей имеющих конкретный опыт. И к большому сожалению мне не с кем больше обсудить эти вопросы, кроме как с тобой, Доброразработчик.
>> No.27551 Reply
>>27541
тл;др
Наверное ты хочешь что-то вроде этого:
http://www.switchonthecode.com/tutorials/csharp-tutorial-binding-a-dat[...]ction
>> No.27577 Reply
File: 1.png
Png, 90.04 KB, 1152×320 - Click the image to expand
edit Find source with google Find source with iqdb
1.png
>>27551

Не-не, только Passive View, только хардкор. Решил сделать без ORM.
Особенность моей объектной модели в том, что нужно сделать List<T>. Нарисовал подобие диаграммы классов — пикрилейтед.

Есть вариант использовать рефлексию. перебираем все public properies Entity, Если T, заносим в лист, если не Т (а PartA например) то перебираем внутренности неТ на наличие Т, если находим заносим в лист и.т.д. Интуитивно я думаю это не очень хорошее решение. В контексте конкретной задачи создание листа будет единовременным, поэтому издержки и дороговизна рефлексии тут не имеет особого значения.

Другой вариант: в каждом Part и SubPart устроить метод добавления объектов типа T в общий лист. Тут плюс в том, что при использовании NullObject'ов, их можно и нужно не добавлять в лист. В случае рефлексии придётся обигрывать этот момент иначе, например добавлением в T bool флага(не очень здорово) isAggregated c последующей установкой его в false для NullObject'ов типа T.

Такие вот ООПроблемы, Анон.

к: шесть ожидать
>> No.27578 Reply
>>27577
> Есть вариант использовать рефлексию.
Она медленная.
>> No.27580 Reply
>>27577
> > Существует задача: сделать приложение с GUI, в GUI отображать заранее известную таблицу которая должна служить пользователю одновременно для ввода данных и получения результата. Грубо говоря в ячейки колонок А и Б пользователь ввёл данные, нажал кнопку «Пыщ» и в ячейке колонки В отобразился результат.
И это ты называешь задачей? Что за таблица? Что за пыщь? Что за результат? Почему ты говоришь, что таблица одна, а сущностей на картинке семь (sic!) штук? Откуда взялись PartA и SubPart? Где всё это описано? Нигде. Описывай.
>> No.27607 Reply
File: 1.png
Png, 118.52 KB, 1280×896 - Click the image to expand
edit Find source with google Find source with iqdb
1.png
>>27580
Okay.
>> No.27608 Reply
>>27607
Может забацать интерфейс:
interface IИглабле
{
  public List<Igla> GetIglas();
  public List<Igla> GetIglas(List<Igla> OuterIglas);
}

//Для слона реализация взятия вида:
public List<Igla> GetView()
{
  Вернуть GetIglas();

}
//Для слона реализация интерфейса:
public List<Igla> GetIglas()
{
  Создать OuterIglas как List<Igla>;
  
  Перебрать всех зайцев
    Вызвать Заяц.GetIglas(List<Igla> OuterIglas);

  Вернуть OuterIglas;
}

//Для зайца реализация интерфейса:
public List<Igla> GetIglas(List<Igla> OuterIglas)
{
  Добавить в OuterIglas собственные Iglas;
  
  Перебрать все яйца 
    Почесать Яйцо;^W^W
    Вызвать Яйцо.GetIglas(List<Igla> OuterIglas);

  Вернуть OuterIglas;
}
>> No.27609 Reply
Раз уж проектирования тред, то задам свой вопрос: вот смотрите, есть многопротокольный IM-client. Как этов общих чертах должно выглядеть на всяких джавах? Вот я вижу класс YobaProtocol, имеющий виртуальные методы для получения/отправки мессаг, залогинивания, поиска юзеров, etc, от которого наследуются классы ProtocolCock, ProtocolAss, ProtocolIlham, объектами которого являются учетные записи. Или есть варианты лучше?
>> No.27610 Reply
>>27609
Меньше читай книжки всяких древних программистов-ООП-динозавров - есть много гораздо более удачных путей, о которых в то время никто не подозревал. Прочитай книгу о паттернах ООП-проектирования: http://rutracker.org/forum/viewtopic.php?t=3694471, и всё сразу станет гораздо понятнее.
>> No.27611 Reply
>>27610
Анон, ну лень же читать. Я хочу уже сейчас начать делать, а читать по ходу дела мне все равно потом еще графон к этому прикручивать. Скажи хотя бы, что в моем варианте не так?
>> No.27612 Reply
>>27611
> Анон, ну лень же читать.
Так ты попробуй. Там нет нудятины, так характерной для IT-книг.
>> No.27614 Reply
File: 6a0120a85dcdae970b016768a1ed59970b-800wi.png
Png, 8.05 KB, 180×250 - Click the image to expand
edit Find source with google Find source with iqdb
6a0120a85dcdae970b016768a1ed59970b-800wi.png
>>27609
Smurf Naming Convention
>>27608
Как вариант. При сопровождении придётся поддерживать всё это чудо. С другой стороны компилятор напомнит, что интерфейс не реализован.
На сегодняшний день я остановился на реализации некого подобия билдера с аггрегацией.
n = createNail(...)
aggregatator.Agregate(n)
Модель редко изменяется, так что пока так.
>>27610
Динозавры тоже хороши, только надо иметь соответствующий академический уровень. Книга про шаблоны хорошая. Сам по ней изучал шаблоны.
>>27611
Да не читай ты. Пили как пилится и убей проект когда он будет объёмом в 9K LOC
>> No.27616 Reply
>>27607
блядь, это одинаковые иглы или разные? У тебя на схеме разные (3 сущности), но судя по смыслу должны быть одинаковые (одна сущность).

И ещё: у тебя там в "задаче" заявлен ввод данных в таблицу. В твоей схеме нельзя однозначно сказать, куда попадает игла после добавления в таблицу: в яйцо, зайца или утку.

>>27609
Вроде нормально. Только учти, что далеко не все протоколы поддерживают одинаковые фичи. Например, конференции или видеовызовы.

>>27610
> Меньше читай книжки всяких древних программистов-ООП-динозавров
> читай книгу о паттернах ООП-проектирования
Это ведь одно и то же.
>> No.27617 Reply
>>27612
> Там нет нудятины, так характерной для IT-книг.
Я хуй, по ссылке так и не ходил, хоть ты и старался ради меня, но дай догадаюсь: там Фримены, да?
>> No.27618 Reply
>>27616
Нет, не одно и то же. Динозавры говорят: "Если нужно расширять функционал, используйте абстрактные/виртуальные методы и наследование". Авторы же книг о паттернах говорят: "Используйте наследование для расширения функционала осторожно, и по возможности заменяйте его на инкапсуляцию".
>> No.27619 Reply
>>27617
Да, там именно Фримены.
>> No.27620 Reply
>>27618
Ты бы лучше сказал, что нужно изменить в том конкретном примере мультипротокольного IM.
>> No.27623 Reply
>>27620
Можешь считать меня диванным кукаретиком, анон, но мне лень думать о программировании вне работы. Просто начни писать свой клиент так, как считаешь нужным. Если увидишь, что в каком-то месте тебе не нравится твой код - остановись и подумай, как исправить ситуацию.
И сразу несколько советов из личного опыта:
   - Сразу привыкай к разработке через тестирование - это оче полезная вещь, которая даст тебе профит уже при первом рефакторинге. Если пишешь на C# (или любом другом .NET-совместимом языке), то в качестве библиотеки для тестирования крайне рекомендую NUnit. В качестве тестраннера юзай комплектный тестраннер NUnit (но если найдёшь крякнутую версию NCrunch, смело ставь её и даже не думай - она неплохо жрёт ресурсы твоего компа, но за запуск тестов на лету и отображение покрытия кода тестами ей можно простить и не такое).
   - Пиши тесты так, чтобы они покрывали как можно более крупные модули кода и как можно меньше зависели от твоей реализации нужной фичи. Если ты будешь затачивать тесты на конкретную реализацию, то в случае рефакторинга тебе придётся делать двойную работу - править код и исправлять тесты. Хотя это приходит со временем, так что пока не думай об этом - потом сам найдёшь разумную грань.
   - Ни в коем случае не копируй свой код! Если ты поймал себя на том, что тебе хочется скопипастить код, остановись и подумай, как изменить архитектуру так, чтобы задействовать единожды написанный код сразу в нескольких местах.
   - Вообще внимательно следи за дублированием кода. Если ты видишь одинаковый или похожий код в нескольких местах, стоит задуматься об архитектуре проекта. Поэтому я тебе и посоветовал книгу о паттернах - она поможет выявить проблемные места и предложит пути их решения.
>> No.27625 Reply
>>27623
Да я мимо проходил если что. Просто интересно, что в том примере ты считаешь неправильным.

>>27620-кун
>> No.27662 Reply
>> No.27693 Reply
>>27623
> Сразу привыкай к разработке через тестирование
Я так и не постиг тестирование. Если какой-нибудь Math или Vector2 ещё понятно как тестировать, то как тестировать классы, у которых нет вывода или он не тривиален или есть полное подавление исключений (снаружи видится что всё хорошо)?
>> No.27694 Reply
>>27693
TDD. Архитектуру нужно разрабатывать так, чтобы она легко покрывалась тестами. Если ты понимаешь, что тестами что-то не покрывается - переделывай.
>> No.27700 Reply
>>27693
> как тестировать классы, у которых нет вывода
Но ты же добавил такие классы в свою программу не только для солидности и объёма кода, так? Стало быть, они выполняют какие-то полезные функции. Твоя задача - найти, какую полезную работу делают эти классы и что в теории может помешать им делать эту работу, и покрыть эти случаи тестами.
А вообще, ты неправильно понял теорию TDD. В идеале ты должен задаваться не вопросом "У меня есть класс, как его протестировать?", а вопросом "У меня есть тест, как мне сделать так, чтобы он выполнялся?". Конечно, бывает и обратная ситуация, но это уже не TDD, а просто покрытие тестами кода (обычно унаследованного) с целью рефакторинга и/или переработки.
> есть полное подавление исключений (снаружи видится что всё хорошо)
Если я правильно тебя понял. ты делаешь что-то вот такое?
try
{
    DoSomethingDangerousAndFaulty();
}
catch (Exception) // здесь нет конкретного типа исключений...
{
    // ...а здесь нет кода. Вообще.
}
Дело твоё, анон, но когда-нибудь такой подход больно ударит тебя граблями по лбу. Каждое исключение говорит о потенциальном сбое, о возможной ошибке, которая произошла при выполнении вызванного метода. Глотать исключения следует только в том случае, если ты на 100% уверен в природе возникновения этого исключения и точно знаешь, чем оно вызвано. В противном случае ты можешь начать глотать действительно важные исключения, говорящие о сбоях, но следствие сбоя это не устранит - как результат, в твоей программе появятся трудноуловимые и невоспроизводимые ошибки, вызванные причудливыми сочетаниями проигнорированных ошибок. Ящитаю, единственные допустимые действия внутри блока catch {} при поимке всех исключений без разбора - это передача пойманного исключения ответственному компоненту и/или запись в лог. Всё остальное - недопустимая вольность.
>> No.27715 Reply
>>27623
> - Сразу привыкай к разработке через тестирование.
И не забывай, что тесты не доказывают корректность.
> - Пиши тесты так, чтобы они как можно меньше зависели от твоей реализации
И не забывай, что это называется тестированием методом черного ящика. А есть еще метод «белого ящика».
> - Ни в коем случае не копируй свой код! <...> Поэтому я тебе и посоветовал книгу о паттернах - она поможет выявить проблемные места и предложит пути их решения.
Она предложит лишь некоторые стандартные пути их решения. Которые не всегда применимы (а иначе зачем нужны были бы senior developer-ы, если их можно было бы заменить книжками?).
>> No.27716 Reply
>>27715
...что успешное выполнение тестов не доказывает корректность программы.
Self-fix
>> No.27719 Reply
>>27716
Программа должна состоять из верного алгоритма и покрытой тестаами имплементации, причем прохождение тестов соответствует верному алгоритму
>> No.27720 Reply
>>27719
Этого недостаточно, чтобы программу можно было назвать рабочей.
>> No.27735 Reply
>>27715
> И не забывай, что тесты не доказывают корректность.
Если тесты не доказывают корректность, значит, ты покрыл ими не все случаи. Формализуй способы проявить ошибки и пиши регрессионные тесты.
> А есть еще метод «белого ящика».
Есть, но метод чёрного ящика более универсален, ящитаю. Особенно это касается молодых проектов, архитектура которых может серьёзно изменяться и дополняться чуть ли не каждый день. Дискач.
> Которые не всегда применимы
Влажные мечты senior developer-а. Разумеется, книжка не сможет дать ответы на все вопросы, но для решения того, что не попало в книжку, у реализующего задачу программиста обычно есть голова на плечах и/или опыт решения похожих задач.
>> No.27737 Reply
>>27735
> Если тесты не доказывают корректность, значит, ты покрыл ими не все случаи.
Случаев бесконечно много может быть(ну или почти). Если программа берёт на вход 5 чисел, то надо все сочетания этих числел оттестить? То есть maxint^5 тестов?
>> No.27739 Reply
>>27737
> Если программа берёт на вход 5 чисел, то надо все сочетания этих числел оттестить?
Встречный вопрос: насколько часто ты видишь программы, выполняющие действия такого вида?
public void someFunction(int arg1, int arg2, int arg3, int arg4, int arg5)
{
    switch (arg1)
    {
        case Int32.MinValue:
            // ...
            break;

        case Int32.MinValue + 1:
            // ...
            break;

        // ......

        case Int32.MaxValue - 1:
            // ...
            break;

        case Int32.MaxValue:
            // ...
            break;
    }
}
>> No.27740 Reply
>>27739
Забыл дописать: предполагается, что там после switch должен стоять такой же перебор int32 для arg2, arg3, arg4 и arg5.
>> No.27741 Reply
>>27737
> Если программа берёт на вход 5 чисел, то надо все сочетания этих числел оттестить? То есть maxint^5 тестов?
Вот, уже начинаешь соображать. Если TDD, то программы разбиваются на подпрограммы с меньшим числом аргументов и вместо степенной функции будет линейная.
>> No.27742 Reply
>>27741
> функции
зависимости
>> No.27743 Reply
Разве функцию нельзя разбить на особые точки и пару-тройку рандомных значений между ними?
>> No.27744 Reply
Что вы тут устроили!
>>27741
Возьмем самую обычную программу — моделирование асинхронного трехфазного двигателя неявным методом Эйлера. Она состоит из одного единственного цикла, в котором считается всё, и никак ты этот цикл на куски не разобьешь, потому что в нем просто каждый цикл считается одна громадная матричная формула. Что ты тут собрался покрывать тестами? Взять реальный двигатель, ввести его данные и посмотреть, совпадают ли графики на интервале от 0 до 5 минут? А после 10 минут уже не надо тестировать? А с другими данными? А с обрывом одной из фаз? Ну, хорошо, граничные случаи, допустим, можно рассмотреть все. А с асимметрией фаз как быть?

И нахрена тогда вообще нужна такая программа, тесты для которой уже содержат все возможные исходные данные и результаты их обработки?
>> No.27745 Reply
>>27744
> Что ты тут собрался покрывать тестами? Взять реальный двигатель, ввести его данные и посмотреть, совпадают ли графики на интервале от 0 до 5 минут?
Нет. Нужно посчитать формулу руками для нескольких значений, а потом убедиться, что написанная хуёвина возвращает те же самые числа. + Проверка поведения в особых точках, типа деления на ноль. Для математической формулы это всё тривиально.
>> No.27746 Reply
>>27741
При этом, заметь, покрытие тестами в любом случае будет стопроцентное.
>> No.27747 Reply
>>27739
Если тесты покрыли все ветки кода, это не значит, что они покрыли все случаи. Вот программа:
double func(double a, double b)
{
return a/b;
}
Тест a=1 b=1 покрывает все ветки кода, но на b=0 программа выдаст ошибку ран-тайм, угадай какую. Покрытие всех веток кода ничего не гарантирует.
>>27741
ЛОЛ, ты думаешь, что всё на свете можешь линеаризовать?
>>27743
Можно сделать это неправильно. Зато тестами покрыть все ветки кода и быть уверенным, что всё будет работать.
>> No.27749 Reply
>>27747
> >>27741
> ЛОЛ, ты думаешь, что всё на свете можешь линеаризовать?
Как минимум можно уменьшить степень.
>> No.27750 Reply
>>27745
> для нескольких значений
А для других значений, то есть, уже не надо?

Короче, я к чему веду: эти ваши юнит-тесты, как всем известно, доказывают работоспособность программы лишь в конкретных точках области определения. А нужна работоспособность во всех. Очевидно даже гопнику, что юнит-тестов для доказательства работоспособности программы не достаточно.

Или короче: юнит-тесты и степень покрытия ими — хорошее подспорье в деле доказательства корректности ПО, но не более того.
>> No.27751 Reply
>>27749
Вперёд:
double func(double a, double b, double c, double d, double e)
{
return ln(a+b+c+d+e);//Не знаею, есть ли в С++ функция ln, если нет, предположим, что она реализована выше или подключена откуда-то, короче она есть.
}
>> No.27753 Reply
>>27751
Да пожалуйста.

double func(double sum_abcde)
{
return ln(sum_abcde);
}
>> No.27754 Reply
>>27753
Но у самого вычисления суммы ты же степень не уменьшишь.
>> No.27756 Reply
>>27747
> Тест a=1 b=1 покрывает все ветки кода
Изначально мы говорили о TDD, а не о простом покрытии имеющегося кода тестами, так?
Допустим, у тебя есть необходимость написать функцию func, которая делит аргумент a на аргумент b. Вот и проверяй, что она будет возвращать a/b при некоторых рандомных значениях a и b (при b != 0), а при b == 0 пусть возвращает NaN или выкидывает ArgumentException. Как именно она будет делить a на b - делением, подбором по таблице или каким-то другим способом - тебе будет неважно до тех пор, пока твои тесты выполняются. Если же ты увидишь, что на каких-то значениях она ведёт себя неверно, пиши регрессионные тесты. Если тебе надоело писать на каждый чих регрессионные тесты, меняй реализацию на другую, удовлетворяющую всем твоим тестам. При чём тут ветки кода?
>> No.27762 Reply
>>27756
То есть, утрируя, ты считаешь нормальным код вида:
  
double func(double a, double b)
{
    if (a == 1.0 and b == 1.0) return 1.0;
    if (a == 1.0 and b == 2.0) return 0.5;
    ...
}
, снабженный мегатоннами бойлетестов. Я сказал, утрируя — ты всегда будешь подгонять реализацию под самописные тесты, а не под ТЗ, причем в более-менее сложных случаях ты даже не будешь замечать этого.

Скажем так, ты готов пройти вот этот курс http://ussr-vs-russia-copypasta.110mb.com/how_to_teach_programmers.html, используя TDD как основную методологию? Готов ли ты дать голову на отсечение, что ракета, управляемая твоим софтом, установит спутник на орбиту Земли, что бы ни случилось из оговоренного в ТЗ? Что она не поделит в процессе работы на ноль, накопленные ошибки не превысят допустимые и т. д.? Я лично не готов.
>> No.27767 Reply
>>27762
И всё-таки мы говорим о разных вещах. Я рассказываю о TDD (разработке софта через тестирование), а ты продолжаешь говорить о покрытии тестами абстрактных матмоделей двигателей и ракет.
>> No.27768 Reply
>>27762
И да, ещё один момент:
> То есть, утрируя, ты считаешь нормальным код вида <...>
TDD предполагает, что разработка программы состоит в повторении цикла из трёх шагов: написание теста (красная полоса), черновая реализация (зелёная полоса), рефакторинг без поломки тестов. Цель рефакторинга - устранить дублирующийся код, в т.ч. и описанный тобой бойлерплейт. Поэтому, если ты действительно понял методологию TDD, то на определённом шаге ты заменишь этот хлам на валидацию параметров и простое a/b.
>> No.27769 Reply
>>27768
if (a== 81225 && b == 25) return 3249
else throw Exception("method is not allowed"); //Method is not allowed, but we still have our unit tests
>> No.27783 Reply
>>27769
Хуита. Юнит-тесты пишутся по ТЗ (или ожиданиям программиста, в зависимости от методики тестирования), а код пишется по юнит-тестам. Если встречается такая ситуация, значит, кто-то из программистов кладёт болт на свою работу.
>> No.27820 Reply
>>27737
> Если программа берёт на вход 5 чисел, то надо все сочетания этих числел оттестить? То есть maxint^5 тестов?
Нет. Входные данные разбиваются на т.н. классы эквивалентности. Достаточно взять по одному значению из каждого класса.
>> No.27835 Reply
>>27820
Как эти классы определить?
>> No.27840 Reply
>>27820
> Входные данные разбиваются на т.н. классы эквивалентности.
Можешь привести более подробную инфу о том, как это происходит?
>> No.27861 Reply
>>27835>>27840
В любом учебнике по тестированию это расписано. Ну вот так, например, http://www.topreferats.ru/technic/14296_1.html
А вообще - "на глаз", разумеется, как и любое реальное (практическое) тестирование. Грубо говоря, нужно поделить всю ОДЗ на особые зоны (где функция ведет себя нетипично) и границы, в результате чего будет несколько подклассов. Берешь по одному тесту из каждого подкласса и по тесту на границы/особые зоны.
>> No.27872 Reply
>>27861
То есть, внутренняя структура тестируемой функции не учитывается? Хорошо.
>> No.27873 Reply
>>27872
При TDD тесты пишутся до кода, учитывать реализацию невозможно в силу её отсутствия.
>> No.28130 Reply
>>27873
бамп
>> No.28131 Reply
File: various_failures_by_mjranum-d4tqpdh.jpg
Jpg, 396.70 KB, 1200×1001 - Click the image to expand
edit Find source with google Find source with iqdb
various_failures_by_mjranum-d4tqpdh.jpg
Есть одна проблема, над которой я ломаю голову третий день.
В общем, я пишу веб-приложение с использованием ASP.NET. Точнее, оно не совсем веб - клиент у него на флеше, но его серверная часть всё-таки хостится в IIS, да и запуск приложения происходит стандартно для ASP.NET. В начале работы это приложение авторизует пользователей по учётным записям из AD или локальной системы сервера; для проверки подлинности и сохранения токена пользователя используется самописный MembershipProvider - обёртка над функцией LogonUser. Одна из задач этого приложения - по определённому действию клиента запускать указанное приложение с правами человека, авторизовавшегося перед стартом клиента. Внимание, вопрос: как запустить приложение из ASP.NET, сохранив права пользователя?

Что я пробовал:
1. Обычный запуск через Process.Start() - процессы запускаются, но работают от учётной записи ASPNET.
2. Запуск через Process.Start() с указанием желаемого логина и пароля - процессы запускаются, но тут же падают с ошибкой 0xC0000142 (текст - что-то вроде "Приложение было некорректно инициализировано").
3. Прочитал про проблему из пункта 2 вот тут: http://asprosys.blogspot.ru/2009/03/perils-and-pitfalls-of-launching.html и попробовал вариант оттуда - при попытке повышения привилегий пользователя ловлю SystemException с текстом "The trust relationship between this workstation and the primary domain failed". В MSDN про возможность его возникновения не написано ни слова.
4. Создание процесса с использованием winapi-функции CreateProcessAsUser - функция возвращает false; Marshal.GetLastWin32Error() после вызова возвращает код ошибки 1349 (что-то касательно неверного типа токена).
5. Преобразование токена пользователя через DuplicateTokenEx, вызов CreateProcessAsUser с этим токеном - ошибка 1314 (отсутствие нужных привилегий).
6. Нагуглил, какие привилегии могут потребоваться функции CreateProcessAsUser, попробовал программно разрешить их пользователю - бесполезно, всё та же ошибка 1314.

Очевидно, что проблема связана с ограниченностью учётной записи ASPNET и/или анонимной учётной записи, используемой для запуска ASP.NET-приложений. Вопрос в том, как это обойти?
>> No.28162 Reply
>>28131
Вот ведь как бывает - вчера запостил проблему, а уже сегодня решил проблему. В общем, я дал пользователю ASPNET привилегию "Настройка квот памяти для процесса" (в Панели управления - Администрирование - Локальная политика безопасности - Локальные политики - Назначение прав пользователя), и функция CreateProcessAsUser заработала как положено. Не знаю только, насколько это безопасно.
>> No.28165 Reply
>>28162
Молодец. Пока писал, осознал в чём проблема, и мозг тайно гуглил за тебя.
>> No.28224 Reply
>>28131
хуёвая практика дрочить стандартыне учётки, лучше создай специализированную, сделав например админской, и в iis-е стартуй пул приложений сайта от неё
>> No.28225 Reply
>>28224
Хуйвая практика запускать вебсервер с правами админа. Если в нём найдут уязвимость, то с сервера можно спиздить вообще всё.
>> No.28228 Reply
>>28224
Понимаю, что хуёвая, но не вижу другого выхода. У меня в распоряжении пока есть только говномамонтовый IIS 5.1, он не умеет собственные пулы приложений. Менять же учётку для всех приложений будет плохим тоном - чёрт его знает, что ещё за вещи будут хоститься в IIS у администраторов моего приложения и как на их работоспособность повлияет смена учётной записи.
>> No.28234 Reply
>>28228
Практика не просто хуёвая, она систематически хуёвая. Один послал на хуй всю эту вашу информационную безопасность, второй провернул на хую свои права, чтобы проги от второго могли посылать на хуй все ограничения, третий не смог достучаться до первых двух хуёв и провернул на хую собственный сервер, выставив жопой в интернет все данные пользователей. Так и живём!
>> No.28235 Reply
>>28234
> проги от первого
Self-fix
>> No.28242 Reply
>>28234
Разглагольствовать о безопасности я тоже неплохо умею. Конструктивные предложения будут?
>> No.28277 Reply
>>28242
В виртуалке запускай.
>> No.28312 Reply
Доброкодеры, что нужно скачать для начала функционирования C# и оптимальной работы с ним для ньюфага кроме учебников?
>> No.28313 Reply
>>28312
Начнём с того, что язык программирования не может функционировать. Очевидно, что ответ на твой вопрос зависит от того, что же на самом деле ты хочешь заставить функционировать. Вообще в учебнике всё написано.
>> No.28314 Reply
>> No.28578 Reply
File: pr-guide-v2_3_1.jpg
Jpg, 1975.13 KB, 4000×4000
edit Find source with google Find source with iqdb
pr-guide-v2_3_1.jpg
File: Pro-C-2010-and-th...
Jpg, 34.84 KB, 303×400
edit Find source with google Find source with iqdb
Pro-C-2010-and-the-.NET-4-Platform,-5th-Edition-20.jpg
File: Pro-C-5.0-and-the...
Jpg, 31.99 KB, 227×299
edit Find source with google Find source with iqdb
Pro-C-5.0-and-the-.NET-4.5-Framework.jpg

Аноны, скажите, что лучше читать ньюфагу который только что поставил 2012-ю студию:
Pro C# 2010 and the .NET 4 Platform, 5th Edition 2010
или
Pro C# 5.0 and the .NET 4.5 Framework (The Expert's Voice in .NET) - 2012
Везде, в том числе и на пикрелейтеде советуют издание 2010, но я тут посмотрел, гляжу - есть издание о 2012.
Я вообще не в курсе настроений и традиций .NET-сообщества, поэтому может быть умный анон скажет мне, что нужно читать самое свежее или наоборот, посоветует не спешить, т.к. в новой версии есть нововведения, несовместимые со старой.
>> No.28579 Reply
>>28578
Чем новее, тем лучше. Автор тот же тем более.
>> No.28856 Reply
File: CSharp.jpeg
Jpeg, 7.20 KB, 225×225 - Click the image to expand
edit Find source with google Find source with iqdb
CSharp.jpeg
Поднимаю глупым вопросом.

Поясните за:
List<T>.Find( Predicate<T> match )
Для каждого параметрического предиката писать класс-обёртку, или запихнуть параметры и сами предикаты в хранилище содержащее лист?

Как ещё можно организовать поиск по листу?
>> No.28858 Reply
>>28856
Не понял, а чем
  
List<T> l = ...;
l.Find(x => BooleanExpression(x));
не устраивает?
>> No.28861 Reply
>>28858
> l.Find(x => BooleanExpression(x));
а лучше вот так:
l.Find(BooleanExpression);
Только он ещё про какие-то параметры говорил. С дополнительными параметрами такая штука не пройдёт.
>> No.28872 Reply
>>28861
Дело в том что BooleanExpression как Predicate<T> принимает только один параметр, сам обьект для проверки. Если требуется пареметризовать предикат то я пишу такую кашу:
private string mName;
private DateTime mBorn;

// сам предикат
private bool MenWithNameBorn(Men SomeMen)
{
   if ( (SomeMen.Name.Equals(mName)) && (SomeMen.Born.Equals(mBorn)) )
   {
     // ну да 
   }
   // наверно нет
}
>> No.28873 Reply
>>28872
SomeMen => SomeMen.Name.Equals(mName) && SomeMen.Born.Equals(mBorn)
локальные переменные попадают в замыкание и всё будет хорошо. Кстати, нахуя ты вызов функции x(y) записываешь как (x(y))? ЛNШПоёб?
>> No.29241 Reply
File: Dehydrated_Fail_by_SzGfx.png
Png, 702.79 KB, 1500×818 - Click the image to expand
edit Find source with google Find source with iqdb
Dehydrated_Fail_by_SzGfx.png
Анон, у меня странный вопрос: как получить валидный hDC, связанный с дисплеем, из веб-приложения без окон?
Прохладная история для пояснения, зачем это нужно: есть веб-приложение на C#, запускаемое из IIS. На вход этого приложения из отдельного COM-сервера поступает LogFont-подобный объект-описатель шрифта и некая строка. Требуется рассчитать, какой размер займёт эта строка, будучи написанной указанным шрифтом, да так, чтобы результат оказался похожим на результаты рисования этой строки на форме. Способа сделать это без использования Win32 API я не нашёл - LogFont предоставляет возможность масштабирования текста по горизонтали и/или вертикали, причём указывает информацию о масштабе в крайне упоротом формате (если кто-то не верит, предлагаю ознакомиться самостоятельно: http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037%28v=v[...].aspx , описания полей lfWidth и lfHeight). Единственный возможный вариант, который я нашёл, это использование функции DrawText() с флагом DT_CALCRECT, но и с ним есть один нюанс - из-за отсутствия доступа к экрану эта функция даёт далёкие от реальности результаты, близкие скорее к погоде, чем к размерам текста. Отсюда вопрос - как получить валидный DeviceContext, хоть как-то связанный с отображающим устройством (CreateCompatibleDC(null) не подходит) из приложения, не имеющего окон.
>> No.29249 Reply
>>29241
> Способа сделать это без использования Win32 API я не нашёл
Ну так сделай с помощью Win32 API. Сигнатуры на pinvoke.net поищи.
>> No.29252 Reply
>>29241
Временно создать окно, но не показывать его?
>> No.29257 Reply
>>29249
Сделал (см. про DrawText()), получаю неверные результаты.
>>29252
Пробовал и так: создать контрол, получить его HDC, использовать его для DrawText(). Ничего не изменилось - результат тот же, что и для CreateCompatibleDC(null).
>> No.29818 Reply
File: codeslayer_2560x1440.png
Png, 5914.39 KB, 2560×1440 - Click the image to expand
edit Find source with google Find source with iqdb
codeslayer_2560x1440.png
Парни, скажите, а насколько сейчас важно для джуниора и вообще знание .NET версий 3.5 и старше?
>> No.29819 Reply
>>29818
В новых версиях запиливают мало глобальных фич, так что никто не будет спрашивать, какой именно ты знаешь. Also, все стараются писать на версиях 2.0-3.5, так как на клиентских машинах редко стоит что-то новее, то есть, никто не будет огорчён, если ты не знаешь, какой новый параметр добавили к конструктору Task в последней версии.
>> No.29822 Reply
>>29819
Спасибо. Правда, хотел спросить про необходимость знания версий =<3.5, запутался со "старше"/"младше". Я начал с 4.5, т.к. выше посоветовали "чем новее, тем лучше", то есть я скорее всего не буду знать чего в старых версиях нету и это меня настораживает.
>> No.29823 Reply
File: Debug.Assert-Method-(Boolean,-String)-(System.Diag.png
Png, 141.41 KB, 1903×2615 - Click the image to expand
edit Find source with google Find source with iqdb
Debug.Assert-Method-(Boolean,-String)-(System.Diag.png
>>29822
Пикрилейтед же. Сверху ты можешь отфильтровать методы по версии дотнета, снизу - посмотреть совместимость текущего открытого метода.
>> No.29830 Reply
>>29823
Отлично, спасибо.
>> No.29913 Reply
Вопрос на засыпку для дотнетолюбов.
Есть такой сервер - FluorineFx, предназначен для связи флешовых приложений с дотнетными серверами. Где-то в его глубине есть такой код:
class AMF3IntWriter : IAMFWriter
{
    // ...

    public void WriteData(AMFWriter writer, object data)
    {
        int value = Convert.ToInt32(data); // <<< особое внимание вот сюда!
        writer.WriteAMF3Int(value);
    }
}
Назначение этого кода - принять на вход int32, uint32, int16, uint16, byte, sbyte и отправить его... гм, в данном случае не важно куда. Выделенная строка, очевидно, не справляется с этой задачей - на значениях uint32, превышающих int.MaxValue, она приведёт к выбросу исключения OverflowException, роняющего сервер. Внимание, вопрос: как компактно, лаконично, понятно и красиво написать код, принимающий на вход завёрнутое в object число типа Int32 или UInt32 (с двух- и однобайтными типами, очевидно, проблем будет меньше) и выдающий корректный эквивалент этого числа в Int32, имеющий такое же битовое представление?

У меня получилось вот такое решение, но оно слишком страшное. Кто сможет записать это красивее?
int value = BitConverter.ToInt32(BitConverter.GetBytes(Convert.ToInt64(data)), 0);
>> No.29914 Reply
File: scepticNigra.jpg
Jpg, 61.05 KB, 720×951
Your censorship settings forbid this file.
unrated
>>29913
> Вопрос на засыпку
> не понимает разницы между примитивными типами int и uint
>> No.29915 Reply
>>29914
Я знаю разницу между int и uint, не знают её авторы FluorineFx.
>> No.29916 Reply
>>29915
У них во WriteData используется object, а WriteAMF3Int принимает int.
Где написано, что во WriteData можно пропихивать uint'ы?
>> No.29917 Reply
>>29916
http://code.google.com/p/fluorinefx/source/browse/trunk/Source/Fluorin[...]er.cs
Код инициализации:
// ...
Dictionary<Type, IAMFWriter> amf3Writers = new Dictionary<Type, IAMFWriter>();
AMF3IntWriter amf3IntWriter = new AMF3IntWriter();
// ...
amf3Writers.Add(typeof(System.SByte), amf3IntWriter);
amf3Writers.Add(typeof(System.Byte), amf3IntWriter);
amf3Writers.Add(typeof(System.Int16), amf3IntWriter);
amf3Writers.Add(typeof(System.UInt16), amf3IntWriter);
amf3Writers.Add(typeof(System.Int32), amf3IntWriter);
amf3Writers.Add(typeof(System.UInt32), amf3IntWriter);
// ...
AmfWriterTable = new Dictionary<Type, IAMFWriter>[4] { amf0Writers, null, null, amf3Writers };
Собственно использование, сильно порезанный вариант:
public void WriteAMF3Data(object data)
{
    // ...
    Type type = data.GetType();
    // ...
    IAMFWriter amfWriter = null;
    if (AmfWriterTable[3].ContainsKey(type))
        amfWriter = AmfWriterTable[3][type] as IAMFWriter;
    // ...
    if( amfWriter != null )
    {
        amfWriter.WriteData(this, data);
    }
    // ....
}
>> No.29918 Reply
>>29917
Окей, это отсос. Но что ты собираешься делать с числами uint, которые не пролезут в int?
Асло, я бы сделал вот так: https://github.com/bladecoding/LoLNotes/blob/d5084264282279deebc3f90e1[...]er.cs
>> No.29920 Reply
File: nichijou_by_thesdros-d3gu6ng.jpg
Jpg, 1891.83 KB, 2400×1350 - Click the image to expand
edit Find source with google Find source with iqdb
nichijou_by_thesdros-d3gu6ng.jpg
>>29918
> Но что ты собираешься делать с числами uint, которые не пролезут в int?
Превращать их в отрицательный int, очевидно же. Данные, засунутые этим самым AMF3IntWriter'ом в канал связи, предназначаются для клиентов на Flash, а его окружение (AVM) очень просто относится к преобразованиям int <-> uint.
> Асло, я бы сделал вот так
А вот за это огромное спасибо тебе, бро. Может, хоть теперь серверная часть моего приложения перестанет неконтролируемо валиться на каждый чих.
>> No.29959 Reply
File: cdf01b9dbe6d35f697c585d1e9db1f3e.jpg
Jpg, 425.51 KB, 1200×1313 - Click the image to expand
edit Find source with google Find source with iqdb
cdf01b9dbe6d35f697c585d1e9db1f3e.jpg
>>29918
Вдогонку: оно и в самом деле сработало. Ещё раз спасибо тебе, бро. Держи акулу. :3
>> No.34363 Reply
File: Neko_chan.jpg
Jpg, 38.61 KB, 412×600 - Click the image to expand
edit Find source with google Find source with iqdb
Neko_chan.jpg
Снова влезу сюда со своим вопросом.
Суть такова: я пишу библиотеку, работающую с одним приёмопередатчиком. В идеале пользователь будет создавать один класс и подавать ему на вход Stream, а дальше дёргать методы для отправки данных и подписываться на события для приёма данных. Хочу также покрыть этот класс юнит-тестами, чтобы проследить, что именно он пишет в Stream и как реагирует на прилетающие оттуда данные. Как я понимаю, для этого мне нужна будет пара связанных стримов - всё, что пишется в один, будет вылезать из другого, и наоборот. Вопрос: как это реализовать?
>> No.34367 Reply
>>34363
Тащемта отбой вопросу - я плюнул и наклепал свой интерфейс для получения и записи данных и реализовал на его основе тестовую заглушку и обёртки для COM-портов и сокетов.
>> No.34618 Reply
Как лучше, основной код запихать в отдельный класс, или можно в Main?
>> No.34624 Reply
>>34618
define "основной код"
>> No.36425 Reply
File: there_is_no_escape_by_little_bit_louder-d4elcq4.png
Png, 263.29 KB, 400×573 - Click the image to expand
edit Find source with google Find source with iqdb
there_is_no_escape_by_little_bit_louder-d4elcq4.png
Братишки, кто может пояснить за паттерны всяких там фабрик?
Вот не могу я пока понять зачем это все. Ладно паттерн билдер, как я понял, он просто связывает много классов в один. Но фабрика, абстрактная фабрика. Зачем это все, в чем мы потеряем, если будем напрямую создавать экземпляры классов?
Гугл немного покопал, все равно не понял.

Растолкуйте немного, пожалуйста. В каких случаях надо применять и как? Дайте какое-то задание пример, а я попробую его решить и выдать на суд.
>> No.36433 Reply
>>36425
Так почитай книгу Фрименов о паттернах (Head First Patterns). Они доступно, в примерах, объяснят, в каких случаях следует применять основные паттерны и какой профит это даст.
>> No.36441 Reply
Анон, помоги. Есть база данных MySQL и в ней таблица около 5.000.000 записей, порядка 4GB. Нужно эти записи изменить. Причём одним sql этого не сделать. Нужно взять запись, обработать в программе, положить на место. И вот проблема в том, что это работает страшно медленно.
Я считываю данные из таблицы с помощью DataReader'а, записываю обратно с помощью ExecuteNonQuery. И на 1000 записей уходит почти минута! И почти вся эта минута тратится на отправку данных в таблицу. Что не так? Всё ведь должно работать в тысячу раз быстрее.
Можно взять пример проще.
        MySqlCommand insertCommand = new MySqlCommand("insert into table1 (data1) values (@val1);");
        MySqlParameter newParameter = new MySqlParameter("@val1", MySqlDbType.Int64);
        insertCommand.Parameters.Add(newParameter);
        insertCommand.Connection = myConnection;
        myConnection.Open();
        for (int i = 0; i <= 1000; i++ )
        {
            insertCommand.Parameters[0].Value = i;
            insertCommand.ExecuteNonQuery();
        }
Выполнение этого кода занимает столько же, 56 секунд.
Типизированные DataSet работают нормально, EntityFramework тоже, но все 5000000 записей в один датасет не влезут, а как обработать всё это с помощью датасета по частям (с начала первые 10000 записей, потом следующие 10000, потом следующие и т. д.) я не знаю. Разве что с помощью запросов where id>10000 and id<10000, но это как-то криво.
Уже долго гуглю и так и не понял, в чём тут дело.
Заранее спасибо.
>> No.36445 Reply
>>36441
> Уже долго гуглю и так и не понял, в чём тут дело.
Поскольку тебе нужно изменить каждую запись, проще читать из одной базы, а писать - в другую. Будет намного быстрее, чем редактировать одну базу.
>> No.36451 Reply
>>36441
1) Покажи результаты профилирования. Мы же не знаем где тормозит.
2) Обертки над sql медленнее чем чистый sql.
3) Делай несколько update в одном запросе.
4) деление по id не так уж и плохо если они у тебя линейные, но даже если нет подумай как разбить их на группы. Проведи предварительную подготовку получи границы этих груп.
5) распаралель обработку
6) посмотри настройки сервера, возможно нужно увеличить количество одновременных подключений или еще чтонить подкрутить.
Сталкивался с похожей проблемой, решал приведенными вверху шагами.
>> No.36453 Reply
>>36451
> 3) Делай несколько update в одном запросе.
Вот этому я бы присвоил номер 1.
>> No.36461 Reply
File: 03.jpg
Jpg, 266.60 KB, 1000×1500 - Click the image to expand
edit Find source with google Find source with iqdb
03.jpg
>>36445
>>36451
>>36453
Спасибо за ответы.
> 4) деление по id не так уж и плохо если они у тебя линейные, но даже если нет подумай как разбить их на группы. Проведи предварительную подготовку получи границы этих груп.
Так и сделал. Но всё-таки интересно, в чём была проблема.
> Покажи результаты профилирования. Мы же не знаем где тормозит.
Вот выполнение этой строчки:
insertCommand.ExecuteNonQuery();
Занимает больше 99% времени.
> Делай несколько update в одном запросе.
Пробовал объединять по тысяче в один запрос. Как ни странно, не помогает. Алсо, обычный DataSet, не типизированный, тормозит точно также.
> посмотри настройки сервера, возможно нужно увеличить количество одновременных подключений или еще чтонить подкрутить.
Эх, я в этом совсем не разбираюсь, не представляюсь себе, что искать. Алсо, тоже самое c MS SQL Server работает всего лишь в десять раз быстрее. То есть, та же проблема, видимо.
>> No.36470 Reply
>>36461
> > Так и сделал. Но всё-таки интересно, в чём была проблема.
В моем случае все упиралось в линейность выполнения, и лишних блокировках внутри mssql во время запроса, распаралелил стало лучше, возможно у тебя та-же ситуация.
> > Пробовал объединять по тысяче в один запрос.
В единую транзакцию заворачивал?
http://www.mysql.ru/docs/man/ANSI_diff_Transactions.html

Если соберешься переезжать на другую бд, попробуй postgresql http://www.postgresql.org/ там говорят можно функции которые внутри бд исполняться будут, писать на произвольном языке (из коробки на няшной), но я не вникал, так что ничего путного по этому поводу сказать не могу.
> > Эх, я в этом совсем не разбираюсь, не представляюсь себе, что искать.
я к сожелению тоже. Говорят по умолчанию Mysql держит свой кеш на диске, но как его пихнуть в оперативку под виндой(приложение же под неё? я так из за с# решил извини если ошибся) я не знаю, и опять же это палка о двух концах,память может и закончиться.
>> No.36496 Reply
>>36470
> В единую транзакцию заворачивал?
Вот оно! Вот в чём было дело! Теперь всё летает. И в один запрос инсерты можно было не объединять.
>> No.36555 Reply
Никто hash-bang в MVC4 не реализовывал?

Вот, допустим, у меня есть таб-панелька, в которую по кнопкам подгружается контент. Как мне в зависимости от параметров ссылки при загрузке полностью сгененрировать страничку с заполненной панелькой?
>> No.36662 Reply
File: g1387468120607223108.jpg.png
Png, 87.45 KB, 265×265 - Click the image to expand
edit Find source with google Find source with iqdb
g1387468120607223108.jpg.png
>>36425
Шаблоны(не люблю я слово паттерны) не существуют в вакууме.Шаблоны это инструмент.
Посмотри GRASP и SOLID. Думаю станут яснее те задачи, которые решаются шаблонами.
Потом шаблоны не применяются обособленно. Скорее они выделяются в ходе рефакторинга и органично вписываются объектную модель. Бывают ситуации когда применение шаблонов вредно.

Фабрика. Бывает разная. Можно сделать статический класс и создавать объекты с помощью статических методов. Можно сделать простой класс-фабрику и создавать его объект и пользоваться им для создания других объектов. А можно выделить интерфейс или абстрактный класс и наследовать от него конкретную фабрику. А в чём разница? Разница в степени связанности (coupling). GRASP рекомендует делать low coupling. По большей части это относится к модулям.

Грубый пример. Нужно создавать объекты, не суть какие. Когда код использует интерфейс или абстрактный класс ему во время исполнения можно подсунуть любую реализацию данного интерфейса или абстрактного класса. Чтобы не быть голословным лучше покажу код c морковками.
pastebin.com/4GLkLZZg

В примере для трёх фабрик используются разные переменные, но можно использовать и одну.
>> No.36756 Reply
File: fMR5GX-aZ_w.jpg
Jpg, 50.67 KB, 536×825 - Click the image to expand
edit Find source with google Find source with iqdb
fMR5GX-aZ_w.jpg
>>36662
Wow. Спасибо.

А чем слово "паттерн" хуже слова "шаблон"?
Шаблон как-то сходу ассоциируется с СКОЧАТЬ 9999 УЕБ 2.0 ШАБЛОНОВ НА ВОРДПРЕСС
>> No.36768 Reply
>>36756
Веб-макака детектед:3 У меня шаблоны ассоциируются с крестами.
>> No.37801 Reply
Не даёт покоя странный вопрос по асинхронным делегатам.
Допустим есть такой код (взятый из книги Нейгела, но не суть):

''
public delegate void MyDelegate();

public void Foo() { }

static void Main()
{
MyDelegate dl = Foo;
dl.BeginInvoke(Completed, dl);
//всякие инструкции
}

void Completed(IAsyncResult ar)
{
MyDelegate dl = (MyDelegate)ar.AsyncState;
dl.EndInvoke(ar);
}
''

Суть вопроса: в какой момент в каком месте асинхронному методу передаётся параметр (IAsyncResult ar)? Я усвоил, что вторым обязательным параметром в BeginInvoke передаётся его член ar.AsyncState, а вот с самим ar непонятно.
>> No.37802 Reply
>>36662
> Шаблоны(не люблю я слово паттерны)
Проблема в то, что шаблоны в русском языке ещё избитее чем в инглише. Там же были паттерны и темплейты. Шаблон легко спутать с темплейтом из крестов или с представлением из MVC именно что.
>> No.37824 Reply
File: 11111.png
Png, 4.86 KB, 351×184 - Click the image to expand
edit Find source with google Find source with iqdb
11111.png
>> No.37870 Reply
Доброкодер, посоветуй пожалуйста каких-нибудь книжек по C# для самых тупых и не понимающих сути ООП даже после прослушанного лекционного курса.
>> No.37876 Reply
Несколько вопросов по оформлению кода.
1. Допустимо ли использование статических классов в качестве глобальных?
2. Нужно ли в каждом объявлении параметра класса дописывать {get; set;}, или не обязательно?
3. Допустимы ли конструкции вида List<List<MyClass>>, или лучше объявить List<MyClass> отдельным классом? Если второе, то есть смысл создавать отдельный файл ради двух-трёх строк, или реализовывать в существующем?
4. Если в солюшене имеется проект-либа, то нужно ли описывать функции и их параметры перед объявлением, если эта либа будет распространяться вместе со всем солюшеном по какой-нибудь свободной лицензии?
>> No.37877 Reply
>>37876
1) Очень не желательно, можешь описать зачем они тебе понадобились подробнее? Если для настроек гугли Properties.Settings
2) Нет, зависит от внутренней кухни класса.
3) Да вполне допустимы. Чтобы не писать длинное объявление переменной такого типа используй var
4) Необходимо описывать функции и параметры даже если ты пишешь закрытый код который сам же и будешь использовать. В С# есть специальные языковые конструкции для документирования кода, используй их.
>>37870
Что тебе не понятно? Опиши то как ты это понимаешь.
Маловероятно что тебе помогут книги, только хардкор только человеческое общение.
>> No.37882 Reply
Есть textbox. В нем есть текст.
Как сделать, чтобы текст удалялся в первый раз при клике по полю?
>> No.37884 Reply
>>37882
private void TextBox1_Click(object sender, MouseEventArgs e)
{
    TextBox1.Text = String.Empty;
}
>> No.37886 Reply
>>37870
Стиллмен Э., Грин Дж. - Изучаем C#. Включая C# .NET 4.0 и Visual Studio 2010. 2-е издание (Бестселлеры O'Reilly) - 2012
Троелсен Э. - Язык программирования C# 2010 и платформа .NET 4 - 2010.djvu (не знаю какая редакция лучше, но это справочник больше)
Jon Skeet - C# in Depth, 2nd Edition - 2010 (есть и на русском) (автор увлекательно повествует о пути шарпца с 1 версии и отмечает те фичи которые появились в языке)

По Ооп для начала:
Ларман-Крэг-Применение-UML-и-шаблонов-проектирования


>>37876
> Допустимо ли использование статических классов в качестве глобальных
Лучше не делать так. Глобальное состояние сложнее сопровождать, тестировать и если говорить проще, тебе нужно всегда учитывать его когда пишешь код. Посмотри ещё в сторону функций-без-побочных эффектов. Глобал стейт это штука которая ударит в спину при расширении и модификации приложения, особенно при изменении глобального контекста придётся изменять всё, что от него зависит.
> Допустимы ли конструкции вида List<List<MyClass>>, или лучше объявить List<MyClass> отдельным классом? Если второе, то есть смысл создавать отдельный файл ради двух-трёх строк, или реализовывать в существующем?
Смотря чего ты хочешь достичь. Я кажется знаю, что ты хочешь. Сделай List<MyClasses> где class MyClasses { List <MyClass> }. Это называется инкапсуляция коллекции. В классе MyClasses можно реализовать IEnumerable или выделить интерфейс с нужными тебе методами аля MyClass Get<T>(TKey key).
>> No.37887 Reply
>>37884
Спасибо, няша, но я уже так пробовал. У меня просто из-за того что я
TextChanged заменяю на Click была ошибка компиляции. Не понятно почему.
Хотя даже на msdn.microsoft подобное решение описано.
В общем, решил отказаться от этого.
>> No.37890 Reply
>>37877
>>37886
Ну смотрите, у меня есть различные классы-менеджеры, которые отвечают за управление, отрисовку, конфиг и тд, и к этим классам обращаются другие (вызывают методы, получают/изменяют значения параметров и тд). Если эти менеджеры убрать, то придётся либо распихивать их функции по остальным классам, что не очень удобно, либо передавать ссылки на них в конструкторе каждого класса из тех, которые к ним обращаются, что громоздко и некрасиво.
>> No.37892 Reply
>>37890
Посмотри на Inversion Of Control Container и Dependency Injection.
С IoCC приложение гибче и легче писать блочные тесты, а значит и потом производить рефакторинг.
Без IoC можно пользоваться глобальным состоянием или свалить ответственность за выбор менеджера на фабрику, возможно и статическую. При ОО проектировании нужно выбирать, какая степень гибкости тебе нужна. Работать оно будет в любом случае, как не распределяй зависимости, но вот как будет сопровождаться это другое дело.
>> No.37900 Reply
Доброанон, помоги.
Имеется шиндовский путь к директории. Но неизвестно какой.
Как проверить с помощью регекспов, заполнено ли поле в данном случае textBox1 адресом к папке?
Можно попробовать так: ^[A-Za-z]\:\w+ Но ведь так работать не будет, потому что \w не учитывает ничего кроме букв и цифр.
>> No.37901 Reply
>>37900
Совсем забыл, что можно использовать ".+". Теперь всё нормально.
>> No.37902 Reply
>>37900
> Как проверить (...), заполнено ли поле адресом к папке?
http://msdn.microsoft.com/ru-ru/library/system.io.directory.exists%28v[...].aspx
>> No.37904 Reply
Хочу написать еще одну имиджборду на этом языке. Какие подводные камни?
>> No.37905 Reply
>>37904
Бери да пиши, туториалов много http://www.asp.net/mvc/tutorials
>> No.37906 Reply
Ничего в голову не приходит.
Вот есть исходный код сайта, полученный через HttpWebResponse.
Есть регексп, который выбирает нужные мне ссылки на странице.
Как теперь все эти ссылки, найденные регекспом, добавить в массив?
>> No.37908 Reply
File: tPGe5oOoTdQ.jpg
Jpg, 111.29 KB, 689×1000 - Click the image to expand
edit Find source with google Find source with iqdb
tPGe5oOoTdQ.jpg
Никто не знает библиотек или методов как можно, внимание, виндовую приложуху юзать онлайн?
То есть, нужен функционал как в удаленных рабочих столах. Стримит изображение и отлавливает клики.
>> No.37914 Reply
На каком языке нужно читать литературу по шарпу?
В принципе английский я неплохо знаю, словарный запас только хромает. Но я всё никак определиться не могу.
>> No.37915 Reply
>>37914
Очевидно же. На всех доступных. Если есть более свежее издание на английском, читаю его.
Способность извлекать занания из текста не зависит от языка на котором этот текст написан, а зависит она скорее от способности автора излагать мысли. MSDN, на мой взгляд, лучше читать на английском, так как перевод на русский осуществляется автоматически.
>> No.37918 Reply
>>37908
> как можно, внимание, виндовую приложуху юзать онлайн?
"онлайн" == "из браузера"? Если да, в общем случае самое простое решение - это RDP/VNC-клиент на HTML5/JS, который специфичным образом подключается к вендосерверу с нужной софтиной и показывает только её окно. Могут быть ещё частные варианты в зависимости от того, как и с использованием каких тулкитов написана нужная тебе софтина.
>> No.37919 Reply
>>37908
Советую годноту: Citrix XenApp. kekeke
>> No.37939 Reply
>>37918
> "онлайн" == "из браузера"?
Да. И для нескольких юзеров.
> как и с использованием каких тулкитов написана нужная тебе софтина.
Древняя сишная программа.
>>37919
> Citrix XenApp
Платновато. Но что-то похожее, вроде, да. хотя я так до конца и понял, что она делает
>> No.37971 Reply
Есть задача: написать единый интерфейс для кнопок мыши и клавиатуры (Keys и MouseButtons соответственно).
Далее, у фреймворка есть метод для получения состояния кнопки клавиатуры и метод для кнопки мыши. Нужно узнать состояние кнопки, используя данный интерфейс, причём без приведения типа.

Что здесь можно сделать?
>> No.37976 Reply
>>37971
Ладно, больше конкретики.
Есть следующий класс:
public class KeyStateListener
    {
        private readonly Keys _key;
        private readonly IControlsObserver _observer;
        private KeyState _lastState;

        public KeyStateListener(Keys key, IControlsObserver observer)
        {
            _key = key;
            _observer = observer;
            _lastState = KeyState.Down;
        }

        public void SetState(KeyState state)
        {
            if (_lastState == state) return;
            _observer.KeyUpdated(_key, state);
            _lastState = state;
        }

        public Keys GetKey()
        {
            return _key;
        }
    }
Есть список объектов данного класса, с каждым элементом которого производится следующее действие:
foreach(var listener in _listeners)
    listener.SetState(Keyboard.GetState(0).IsKeyDown(listener.GetKey()) ? KeyState.Down : KeyState.Up);
И теперь мне надо реализовать то же самое, только для кнопок мыши. То есть вместо Keys будет MouseButtons, вместо Keyboard.GetState... будет другой вызов другого метода, а в остальном всё то же самое.
>> No.37992 Reply
>>37976
Не понимат. Ты хочешь заставить тот же класс слушателя понимать события не только от клавиатуры, но теперь ещё и от мыши? Или твоя задача - запилить аналогичного слушателя для мыши и каким-то образом научиться отличать их друг от друга?
>> No.37993 Reply
>>37992
> заставить тот же класс слушателя понимать события не только от клавиатуры, но теперь ещё и от мыши
Это, и чтобы по возможности без дублирования кода.
>> No.37996 Reply
File: alchemy8.jpg
Jpg, 31.48 KB, 450×454 - Click the image to expand
edit Find source with google Find source with iqdb
alchemy8.jpg
>>37993
>>37976

Накодил такой вариант:
http://pastebin.com/FL9qgfyr
Самому не нравится, но работает. Есть коллекция handler'ов.
Проект целиком:
http://rghost.net/52873270


p.s: Посмотри в сторону «The Reactive Extensions (Rx)»
msdn.microsoft.com/en-us/data/gg577609
Вдруг оно решит твою проблему лучше самописного кода.
>> No.38249 Reply
File: 1330555595659.png
Png, 145.38 KB, 300×975 - Click the image to expand
edit Find source with google Find source with iqdb
1330555595659.png
А что это за технология такая, когда разметка почти вся берется из БД и все это на тысячах регулярок? В чем профиты и фейлы?
>> No.38251 Reply
>>38249
Мне кажется, это pizdets.
>> No.38254 Reply
>>27541
Луркай WPF+MVVM, конкретно тебя интересует ItemsControl и DataTemplate с указанием DataType. Суть в том, что передаешь контролу коллекцию объектов на биндинг, а шаблон, которым каждый элемент будет представлен определяется динамически на основе типа элемента.
>> No.38255 Reply
>>38249
В большинстве случаев доступ до БД является самым медленным местом в приложении. Хранить шаблоны в ней - тупость неимоверная, таким онанизмом помнится страдали всякие говноцмс на пхп.
Регулярные выражения тоже вещь не самая быстрая на свете. Ибо по ним строится недетерминированные конечные автоматы, по которым прогоняются потоки символов.
В общем архитектуру приложения по-человечески делать надо, а говнокодить как ссаный похэпист.
>> No.38324 Reply
>>38255
А где ты предлагаешь хранить шаблоны? Доступ к диску еще медленней. Другое дело что нужно их кешировать у себя, тогда и в базу не придется каждый раз ходить.
>>38249
Профит в том что не нужно писать кучу кода на каждую страничку ты его собираешь как мозайку из бд.
>> No.38327 Reply
>>38324
Операционные системы кешируют часто читаемые файлы в оперативу.
>> No.38344 Reply
Вопрос по WPF и MVVM. Где и как реализовать взаимодействия пользователя с GUI?

Например, нужно сделать вызов окна с настройками из главного окна. Где будет находится код его вызова? Какой модуль отвечает за состояние графической части приложения?

Т.е. речь о взаимодействии пользователя с GUI в контексте состояния модели.
>> No.38394 Reply
Доброчаны, разъясните нубу. Если у меня есть проект на шарпе с использованием базы данных SQL, я ведь не могу просто exe-файл и базу данных на другой комп перетащить, чтобы заработало? Насколько понимаю, там должен как минимум стоять SQL Server.
>> No.38416 Reply
>>38394
Да, а еще не плохо настройку подключения к бд куда нибудь вывести.
>> No.38421 Reply
>>38416
А как в таком случае я могу использовать локальную базу данных на компе без sql server'а? На ум приходят только всякие костыли типа exel-файла в качестве базы данных.
>> No.38422 Reply
>> No.38426 Reply
>>38422
Добра.
>> No.38427 Reply
>>38426
Алсо есть Microsoft SQL Server Compact.
>> No.38630 Reply
File: 123.png
Png, 775.20 KB, 1273×715 - Click the image to expand
edit Find source with google Find source with iqdb
123.png
>>38344
Сам вопрошай @ Сам отвечай
Кнопка или пункт меню (Options) биндится на ICommand или RelayCommand свойство в VM главного окна или меню.
С помощью команды задействуется Messenger, который броадкастит мессадж VM настройки(в данном примере). При получении мессаджа VM настроек изменяет свойство видимости (как правило булево IsEnabled) которое уже заблаговременно было связано биндингом со свойстами V настроек. Цирк вообщем. Такая цена за труЪ разделение ответственности или я что-то не так понял? Вопрос, как сделать LazyLoad окошек тогда?
Кстати пишут, что можно использовать AutoMapper для VM. Интересно в каком контексте? И какие плюсы от этого будут?
>> No.38687 Reply
>>38630
Так а что тебе мешает создавать окно, когда оно тебе нужно, вместо того, чтобы видимость дёргать?
>> No.38725 Reply
Пытаюсь разобраться с ссаным WPF, и он медленно сводит меня с ума.
Вот как там биндингами пользоваться, а? Как указать там на конкретный класс?
Вроде делаю все по гайду, но нихуя не работает..
Есть такой вот Window.xaml: http://pastebin.com/rNYmR5Ye
Сразу после его запуска контекст передается в DashboardView, который вот такой: http://pastebin.com/XzrCD5Wu
BookListViewModel: http://pastebin.com/3e2jSiDF
BookViewModel: http://pastebin.com/U2erU3Ua
>> No.38746 Reply
>>38725
>>38725
Мне кажется, что ты сильно всё переусложняешь.
Во-первых, в биндинг должен быть вот таким: ItemsSource = { Binding BookListViewModel.Books }
Во-вторых, не проще ли было сразу в DashboardView сделать св-во Books, к которому и прибиндиться.
>> No.38921 Reply
Решил искать работу.
Дали задание написать прогу, чтобы отображала данные в клиенте на wpf, а изменения могли вноситься в сервере\хосте.

Я решил использовать wcf, но у меня возник вопрос, я никогда не работал с бд. Судя по всему мне придется использовать ее для хранения данных для отображения. Так вот, как лучше хранить и легче всего для новичка? И другой вопрос.
Вот в wcf базовая композиция - сборка службы, хост, клиент.
Данные мне хранить надо будет в сборке?
>> No.39031 Reply
File: 0abdae6c6d4200cd49d63832e0c6fe77.jpg
Jpg, 75.20 KB, 400×571 - Click the image to expand
edit Find source with google Find source with iqdb
0abdae6c6d4200cd49d63832e0c6fe77.jpg
Разбираю это — http://igoro.com/archive/self-printing-game-of-life-in-c/
   Скажи, что происходит в этой строчке?
r+=b==3 ||(S[i][j]==''&&b==4)?'':' ' // r - string, b - int    Вторая часть понятна — мы проверяем клетку тернаркой и в зависимости от числа соседей (b) удаляем или оставляем в ней жизнь (хотя по правилам и должно быть иначе).
   Что в первой части? В стринг дописывают выражение b==3, которое преобразовалось в boolean и подверглось ИЛИ с char? Что за дела?
   Я не очень знаком с синтаксисом решеток, как ты уже понял.
>> No.39032 Reply
>>39031
Приоритет операций другой. Если б 3 или б 4 и в s пусто, то дописываем пустую строчку иначе пробел.
>> No.39128 Reply
pastebin.com/vjRK645Y

Компилятор не может понять без приведения, что Item унаследован от ItemBase? Где я неправ?
>> No.39155 Reply
Анон, расскажи пожалуйста вкратце, почему в вузы стали резко внедрять сисярп?
>> No.39162 Reply
>>39155
> резко
У нас ещё в 2009 был шарп на каком-то курсе, вроде. А внедряют, потому что довольно много вакансий с требованием шарпа.
>> No.39166 Reply
File: 702702969.png
Png, 263.97 KB, 381×485 - Click the image to expand
edit Find source with google Find source with iqdb
702702969.png
Анон, заклинаю тебя: если тебе дороги жизнь и рассудок, держись подальше от вызова неуправляемого кода из .NET. Эта гибкая и полезная штука хороша, когда её использование сводится к Add reference... > COM > Soopah Library v1.0 или подключению сборки, сгенерированной TLBIMP - там всё использование сводится к банальному "Вау, посоны, смотрите, я использую COM-объекты в сишарпике так, словно это самые обычные объекты! Ни смартпойнтеров, ни всяких CoInitializeEx/CoCreateInstance/CoRegisterClassObject и прочих страшных винапишных ко-ко-ко, всё просто и беззаботно!". Но как только тебе придётся описывать интерфейсы вручную, со всеми указаниями маршаллеру и соответствием типов, да ещё и если это будет для использования всяких говнобиблиотек от Microsoft типа MSI или APC, вся эта беззаботная система превратится в эффективный и элегантный аппарат для ног со встроенной гильотиной, срабатывающий в самые непредсказуемые моменты. Я две недели, две ёбаных недели, искал ошибку в своём коде, а её причиной оказалось неполное описание интерфейса IPersistStorage в MSDN и, как результат, неверные смещения методов интерфейса-наследника IUnknown и вызовы, уходящие в ебеня. Зла на этих рукожопых дебилов не хватает, блджад.
>> No.39167 Reply
>>39166
Быстрофикс:
> эффективный и элегантный аппарат для отстреливания ног со встроенной гильотиной
>> No.39170 Reply
>>39166
> Вау, посоны, смотрите, я использую COM-объекты в сишарпике
Мазохист, поди. Я как-то биндинг к простой сишной библиотеке писал для кацкеля, мне уже этих впечатлений хватило. Кстати, .NET умеет в FFI c крестами? Он прибит к MSVC?
>> No.39174 Reply
>>39170
> Кстати, .NET умеет в FFI c крестами? Он прибит к MSVC?
Вопрос поставлен неправильно. Ты можешь подключить какой-нибудь COM-сервер (неважно, in-process или out-of-process), и в этом случае Visual Studio или TLBIMP сделают всю работу по подключению и использованию за тебя. Ты можешь подключить dll (неважно, на чём она написана), но при этом придётся вручную импортировать функции и объяснять маршаллеру, как их вызывать. Если вдруг тебе в жизни не хватает извращений, ты можешь вызывать функции Win32 API, т.к. их вызов тоже будет сводиться к импорту функций из какой-нибудь системной dll-ки. Но при этом, насколько я знаю, ты не можешь подключать объектные файлы MSVC и статические либы (.lib).
>> No.39262 Reply
File: 1334681566122.jpg
Jpg, 608.54 KB, 2560×1600 - Click the image to expand
edit Find source with google Find source with iqdb
1334681566122.jpg
>>27510
Доброанон, с выдающимся успехом прогулял большую часть пар по С#, если у кого нибудь есть лишнее время , напишите на форме ЭТО: Дан массив A размера N и целое число K (1<=K<=N). Вывести элементы массива с порядковыми номерами, кратными K, а то тону ведь.
>> No.39269 Reply
>>39262
pastebin.com/1F0Lc8YQ
Вроде работает. Смотри.
>> No.39271 Reply
File: un.jpg
Jpg, 575.59 KB, 1400×785 - Click the image to expand
edit Find source with google Find source with iqdb
un.jpg
>>39269
Подчистил от мусора.
pastebin.com/N2KkFuSr
Если возникнут вопросы, то спрашивай. Не буду спать ещё пару часов.
>> No.39274 Reply
File: 123.png
Png, 10.56 KB, 455×326 - Click the image to expand
edit Find source with google Find source with iqdb
123.png
>>39271
Только заметил, что реквест был:
> на форме
Ну ок.
http://rghost.net/private/56152001/ad0691adcde91c4ac9388e4b930cd9a6
>> No.39275 Reply
>>39274
Вот теперь залил солюшен вместо проджекта.
rghost.net/private/56152046/85cfef1cfe723cedab465c5e234bfd58
>> No.39276 Reply
>>39275
Я думал, ты там уже шиндовс написал, чтобы было под чем запускать, лол.
мимоваганыч
>> No.39277 Reply
>>39275
Спасибо, добра тебе.
>> No.39619 Reply
>>39128
Да может, но не хочет, наверно. Если бы он принимал классы, которые наследуют интерфейсный класс, то тогда бы обязанности контракта перекатились бы на два класса - который реализует интерфейс и которым ты реализовываешь его. Хз, короч.
>> No.40235 Reply
Платиновый вопрос, какую книгу взять? Нашел Дрейера "Шарп для школьников", но там половина примеров не робит. Желательно не сразу в омут, а с простыми примерами и картинками.
>> No.40237 Reply
>>40235
Heads first? Там вроде как раз недавно новая вышла.
Они меня пугают своим видом книжек для даунов, но высокая популярность какбы намекае. Тем более, если тебе для школьников подходит.
мимо
>> No.40239 Reply
>>40237
Вполне. Спасибо.
>> No.40278 Reply
>>39271
хм выкинь вычисление размера и индекса результирующего массива. Чуть отредактировал твой код выкинул явно лишние части. За логику ничего не скажу мимопроходил задание не читал.
http://ideone.com/WqgKOt
>> No.40279 Reply
>>40235
Внезапно мсдн для языка. Что ни будь наподобии кнута и SICP для программирования. И да напиши змейку. Будет трудно но такой вариант сразу качественно левел апнут твой уровень владения программированием.
>> No.40442 Reply
File: 1411689495444.png
Png, 0.93 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1411689495444.png
Анон, смотри задачу. На компе запущено несколько (допустим, 5) одинаковых приложений, которые довольно активно должны общаться друг с другом (1х1), допустим 5 сообщений по ~100Б каждое подряд, и так каждые пару секунд.
Вопрос - как такое дело наиболее красиво организовать исходя из того, что это на курсач, с учетом того, что подразумевается, что каждое приложение запущено как будто на отдельном компьютере.
Просто сделать N сокет-серверов и N^2 клиентов все-ко-всем со своей структурой и парсером сообщений? Или есть что-то более вменяемое?
>> No.40444 Reply
>>40442
> N^2 почему так много?
>> No.40445 Reply
>>40444
Аррр.
Я забыл перевод строки. Или доброчан его съел.
>> No.40447 Reply
>>40444
Криво выразился, будет N клиентов ко всем у каждого (общаться каждый должен уметь напрямую с каждым), итого в целом N^2
>> No.40448 Reply
>>40447
N-1 у каждого, с самим собой не надо ведь соединяться. Энивей это не так уж и много, как по мне. Либо делай один сервер, к которому все будут обращаться и который будет пересылать сообщения.
>> No.40475 Reply
>>40442
Веб сервер у каждого приложения, вешаешь просто на разные порты раз уж на 1 машинке запускаешь.
Список тех с кем приложение будет общаться в конфиг файл. Все нет проблем. Реализацию сервера на решетках можешь легко нагуглить, например http://habrahabr.ru/post/120157/. А вобще лучше расскажи что ты от своих приложений хочешь. Может быть мы и api тебе подберем и архитектуру продумаем.
>> No.40509 Reply
>>40278
>>39271
а зачем такой психоз
если можно длину массива минус один поделить с остатком на К
отнять от длины остаток
и получившееся снова поделить на К
без всяких циклов и в одну строчку
>> No.40510 Reply
>>40509
Ох ты-ж ежик. Прочитал задние. Ты прав это наркомания. Вот исправленное решение http://ideone.com/SG8iYD

>>40278 кун.
А да порядковый номер в массивах начинается с 0.
>> No.40512 Reply
>>40510
я тоже читать не умею
мне почему то показалось что надо количество кратных элементов вывести
>> No.40866 Reply
File: csharp.jpg
Jpg, 18.22 KB, 560×383 - Click the image to expand
edit Find source with google Find source with iqdb
csharp.jpg
Котаны, посоветуйте краткий, но ёмкий туториал, чтоб без лишней воды и соплей, за пару часов узнал всё необходимое и в бой. Пока что решил читнуть http://www.tutorialspoint.com/csharp/ наверно потому что тня на баннере понравилась, но я хз какое у него качество подачи материала.
В универе умел обжект поцкаль и кресты, потом долго работал пхп-говнокодером, слегка умею js, python, ruby.
>> No.40871 Reply
File: cuteness-overload-rage-face.png
Png, 115.88 KB, 600×597 - Click the image to expand
edit Find source with google Find source with iqdb
cuteness-overload-rage-face.png
http://www.opennet.ru/opennews/art.shtml?num=41045
Компания Microsoft анонсировала открытие платформы .Net и её портирование для Linux

Компания Microsoft объявила о переводе платформы .Net в разряд открытых проектов и обеспечении поддержки Linux и OS X. Исходные тексты .Net будут опубликованы на GitHub и будут развиваться в рамках открытого процесса разработки, в котором сможет принять участие любой желающий. Код будет открыт под лицензией MIT, документация будет поставляться под лицензией Creative Commons Attribution 4.0.

Координацией проекта займётся независимая некоммерческая организация .NET Foundation, созданная Microsoft в сотрудничестве с созданной Мигелем де Икаса компанией Xamarin. Начиная со следующего выпуска планируется полностью открыть весь серверный стек .NET, включая ASP.NET 5, JIT-компилятор, Common Language Runtime и основные библиотеки классов. Кроме того, все компоненты серверной платформы .Net будут портированы для операционных систем Linux и OS X, которые будут готовы для промышленного применения и будут поддерживаться наряду с Windows.

Для упрощения участия в разработке Microsoft предоставит новую редакцию среды разработки Visual Studio Community 2013, которую смогут бесплатно использовать небольшие команды разработчиков, которых насчитывается 5 и менее участников. В отличие от бесплатной версии Express новая редакция позволит использовать дополнения и предоставить комплексный набор средств для разработки программ для десктопа, web-приложений и мобильных программ.
>> No.40872 Reply
File: came-rainbows-11586-1278313096-5.jpg
Jpg, 59.38 KB, 398×393 - Click the image to expand
edit Find source with google Find source with iqdb
came-rainbows-11586-1278313096-5.jpg
>>40871
Сегодня же не первое апреля? Скажите мне, что сегодня не первое апреля!
>> No.40875 Reply
File: predskaznostrna2014g.png
Png, 31.05 KB, 435×300 - Click the image to expand
edit Find source with google Find source with iqdb
predskaznostrna2014g.png
>>40872
Нет, это не первое апреля, и вообще погугли Merril Chapman, "In Search of Stupidity", главы о том, что если твой софт работает под все платформы, то никто не купит твою...

Сатья Наделла разрушит компанию, вот увидите.
>> No.40876 Reply
>>40871
Отныне Mono здох.
>> No.40883 Reply
>>40876
Хочу дождаться комментария "Отныне ReactOS сдох".
>> No.40884 Reply
>>40883
Лучше бы под линух появились фотошоп, ворд и эксель.
>> No.40885 Reply
>>40884
Худо-бедно под вайном ворочаются, но да, было бы неплохо.
>> No.40886 Reply
File: 2547410d677df1f1ec5f292fae7f345e.jpeg
Jpeg, 80.39 KB, 700×700 - Click the image to expand
edit Find source with google Find source with iqdb
2547410d677df1f1ec5f292fae7f345e.jpeg
>>40884
> фотошоп
Было бы неплохо иметь хотяб нормальный конвертер из psd в человеческие форматы. Альтернатив фотошопу легион.
> ворд и эксель
Гуглодоки неплохо справляются.
>> No.40887 Reply
>>40886
> Было бы неплохо иметь хотяб нормальный конвертер из psd в человеческие форматы.
Ну или так.
> Гуглодоки неплохо справляются.
До тех пор, пока тебе не становится нужно, чтобы в каких-то там таблицах, колонтитулах и прочем всё было ровно и аккуратно. А текст и в .txt хранить можно.
>> No.40888 Reply
>>40876
А может переродился в более полную версию? Деньги то Xamarin все-равно за IDE будут брать, некоторые предпочитают ее студии т.к. она более легковесная.
>> No.40889 Reply
>>40875
> если твой софт работает под все платформы, то никто не купит твою
Но их платформу и без точканета все покупают, так почему нет?
>> No.40894 Reply
>>40889
Да они, платформы эти, проносятся перед нами, как болиды на скоростной трассе.
Все хипсторы уже под Mac OS X.
>> No.40895 Reply
>>40894
Это потому что практически всё нативное что есть под винду или под линупс, есть и под ос х, ну и айос разработка без этого невозможно.
>> No.40925 Reply
Антоны, никто не пытался писать extensions для Visual Studio?
Очень хочу multirow табы с открытыми файлами.
>> No.40926 Reply
>> No.40927 Reply
Ребята, на русском по ASP.NET никто ничего не посоветует?
>> No.40928 Reply
>>40927
Почему бы один раз не взять русскую книжку по инглишу, а потом не напрягаться?
>> No.40929 Reply
>>40926
Кстати, удваиваю Tabs Studio, очень годная штука. Заплатил за неё и с тех пор ни капли не пожалел об этом.
>> No.40931 Reply
>>40926
Ага, только бесплатно. Кстати, этот экстеншон не так уж и хорош. Ну, может, хорош, но моим нуждам не удовлетворяет.
Я сначала думал, почему на весь MSDN только один вменяемый более-менее экстеншон для табов. Потом взялся писать свой и понял, что api для расширения табов нет. Как это сделали те чуваки — неясно. Вот подумал, что тут кто-то мог бы что подсказать по этому поводу.
>> No.40932 Reply
>>40928
Какую посоветуешь?
>> No.40933 Reply
>>40932
Happy English I, II.
>> No.40941 Reply
Анон с табами reportin' in. Прогнал Tabs Studio через ildasm и понял, что они всего лишь создают контрол на месте старого таб бара, обычный винформовский. И зачем-то юзают boost. Для регекспов, кажется. Энивей, этот экстэншон всё равно не умел делать рандомное количество табов на любой строке. И прикреплять табы не позволял. Из сего вывод, что больше двух линий в таб баре сделать не получится никак, кроме запила своего же винформовского контрола. Я опечален, братюни.
>> No.41397 Reply
Растолкуйте, плиз, какого именно сорта кроссплатформенные приложения можно будет писать на новом опенсорсном и кроссплатформенном дотнете. ГУИ на WPF писать можно будет? Или только серверный код? Как-то не смог найти внятного описания что именно входит в тот core, который MS собирается открывать.
>> No.41406 Reply
>>41397
> ГУИ на WPF писать можно будет?
Насколько я понимат, поддержка WPF ограничена кусочком Silverlight, который был портирован в рамках проекта Mono (там было какое-то особое название, но я его забыл).
>> No.41407 Reply
>>41397
Под прыщами gtk# пользуется вроде.
>> No.41681 Reply
Господа, у меня тут небольшой вопросик возник. Есть банальная задачка: комбобокс с записями из БД, при выборе айтема в лейблы вписывается нужная информация. Всё отлично до тех пор, пока в БД не добавляется новая запись. Вместе с ней в комбобокс добавляется новый айтем, а кейса-то к нему в свитче нет. Как его добавить? Добавить, в смысле, на лету, в процессе выполнения.
>> No.41682 Reply
>>41681
Использовать перебор, очевидно же.
>> No.41683 Reply
>>41682
Поясни, пожалуйста.
>> No.41684 Reply
>>41681
Надо сделать хэшмап, или что там у вас, и выбирать по нему, а не хардкодить свитчи, очевидно же.
мимо
>> No.41685 Reply
>>41684
Выбирать по нему, хорошо, но как в таком случае назначить заранее на айтемы действия? А если назначать по ходу дела, то мы возвращаемся к моему вопросу.
>> No.41690 Reply
>>41685
> действия
Насколько различны эти действия? Ответ очень сильно зависит от этого. Не видя задачу по таким вещам трудно что-то насоветовать.

1) Если действие "вписать в лейблы значения" всегда одинаковое - выкинь свич и используй какую-нибудь инфу из БД (табличку со списком поле-значение и т.п., я твою задачу не видел, так что хер знает).
2) Если метаинфой описать не получается, но действия можно объединить в похожие группы - делаешь свич/мап<группа, делегат>, и айдишку группы хранишь в БД у каждого айтема.
3) Если действия разные, и добавляются редко - тупо добавляй новые ветки в свич да не парься (или замути интерфейс и пачку реализаций).
4) Если действия совсем-совсем-совсем разные и добавляют каждый день - прикрути движок жс.

В общем - какой вопрос, такой и ответ.
>> No.41691 Reply
>>41690
В смысле, "не видя задачу"? Вон же она, парой постов выше: >>41681
>> No.41710 Reply
>>41691
И это ты называешь постановкой задачи? Ок, няш, попробую наводящими вопросами из тебя что-нибудь вытянуть...

1) Откуда берутся значения, которые проставляются в лейблы?
а) Из базы данных.
б) Захардкожены прямо в свиче.
в) Вычисляются по невъебенно сложным алгоритмам.

2) Если значения вычисляются алгоритмически, то можно ли их как-то объединить в похожие по алгоритму группы?
а) Да, можно, причем все группы известны сразу.
б) Да, можно, но потом может появиться несколько новых групп.
в) Нет, никакого общего алгоритма не придумать, каждый пункт уникален.

3) Как часто будут добавлять новые пункты (в случае с группами - группы)?
а) Почти никогда.
б) Довольно редко.
в) Часто.

4) Кто добавляет новые пункты?
а) Разраб.
б) Админ.
в) Конечный пользователь.

Не обижайся, но без этого минимума мне реально трудно что-то полезное тебе посоветовать...
>> No.41939 Reply
Я тут немного не успеваю по дедлайну. Анон, не поможешь? Как лучше всего сереализировать структуры с масивами разной длинны и строками, что бы их можно было десериализировать на стороне получателя?
к:совет тащемта
>> No.41940 Reply
>>41939
JSON для большинства случаев. В порядке исключения может потребоваться какой либо MessagePack, BSON, CBOR. В крайнем случае Protocol Buffers. В самом крайнем случае XML.
>> No.41942 Reply
>>41940
Спасибо за развёрнутый ответ, я посмотрел на варианты и остановился на MessagePack и даже успел к сроку.
>> No.41973 Reply
File: 1-Odr-tQ3CXrHRxkRNS43GZA.jpeg
Jpeg, 115.86 KB, 600×398 - Click the image to expand
edit Find source with google Find source with iqdb
1-Odr-tQ3CXrHRxkRNS43GZA.jpeg
Имеется редактор, сделанный на winforms, с кучей закладок, на каждой из которых отображается свой редактор, являющийся самостоятельным классом. У этих редакторов, понятное дело, много практически одинакового кода (всякие undo/redo и т.п.). Хочется вынести этот общий код в класс родитель и сделать редакторы его наследниками. Но возникает следующая проблема с дизайнером: если я делаю некий класс-наследник UserControl и редакотры наследую от него, дизайнер отказывается работать с таким контролом. (Изначально я делаю обычный наследник UserControl (Add -> User Control), рисую в дизайнере нужные мне layout-ы и кнопочки, а потом в .cs файле вместо public partial class BrandEditor : UserControl пишу public partial class BrandEditor : MyEditor, проект даже собирается, но когда, открываешь дизайнер он пишет, что не может редактировать этот контрол). Наверное, должно быть какое-то решение - вряд ли я первый столкнулся с такой проблемой, но гугление совсем не помогло.
>> No.42007 Reply
Memento, Command, Делегирование вместо наследования. Разделение ответственночти представления от логики. Все зависит от того сколько у тебя есть времени и желания.
>> No.42144 Reply
File: -.jpg
Jpg, 62.72 KB, 667×1000 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
Привет, Анон! У меня вопрос по самым основам.
Прошу не отсылать к литературе, а объяснить «на пальцах».
Есть некоторый объект (textbox) с событиями (click, change, …) и действиями, которые происходят при их наступлении (алерт, смена цвета, что-нибудь ещё).
Событие — член класса (определен со словом event), представляющий из себя нечто вроде множественной ссылки на функцию. Эти функции (делегаты) вызываются когда система детектит нужное событие через какие-то свои абстракции-библиотеки. Вся эта пежня не очень прозрачна для кодера.
Делегат представляет из себя объект типа EventHandler, состоящий из ссылки на функцию, принимающей в качестве параметров инициировавший событие объект и массив аргументов события (например, координаты мыши). Делегаты ведут себя так, как будто их последовательные вызовы завернуты ещё в одну функцию.
А теперь вопросы.
1. Я что-нибудь переврал?
2. Зачем нужно передавать в делегат ссылку на объект, который её же и вызывает?
3. Где и как определяется какие поля должен содержать EventArgs для этого объекта?
>> No.42145 Reply
File: -.jpg
Jpg, 67.40 KB, 1280×772 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
4. Если структура с аргументами завернута в отдельный для каждого события класс, унаследованный от EventArgs, то он как вычисляется (ведь ссылка в EventHandler имеет тип родителя)?
this->textBox1->Click += gcnew System::EventHandler(this, &Form1::textBox1_Click);
>> No.42147 Reply
>>42144
1. Прочитал по диагонали, вроде верно, не вдаваясь в ньюансы add remove на эвент
2. Передавать не обязательно (наверно). Нужно, например, если у тебя несколько текстбоксов с одинаковым эвентом, ты на них подвязывает одну функцию, а в ней уже разбираешься кто тебе лучи добра шлет и разную логику пилишь
3. В документации или смотри в коде как поднимают. Если эвент пилишь ты сам, то делай YourCustomEventArgs:EventArgs, так читаемее
>> No.42151 Reply
>>42144
3. Если ты используешь какой-то готовый класс с событием c каким-нибудь YobaEventArgs : EventArgs, то список полей YobaEventArgs должен быть описан в документации. Если класс с событием пишешь лично ты, подумай, что может быть интересно слушателям, и запили свой класс-наследник EventArgs с нужными полями.
https://msdn.microsoft.com/en-us/library/w369ty8x.aspx

4. ЯННП. Давай посмотрим на простой пример (я не силён в плюсовых закорючках, поэтому пример на C#).
Предположим, у тебя есть какой-нибудь класс с событием:
public class CustomEventEnabledClass
{
    // ...

    public event CustomEventHandler CustomActionHappened;

    protected void RaiseCustomAction()
    {
        if (CustomActionHappened == null)
            return;

        var args = new CustomEventArgs(someCustomDataFromElsewhere);
        CustomActionHappened(this, args);
    }

    // ...
}

public delegate void CustomEventHandler(object sender, CustomEventArgs e);

public class CustomEventArgs : EventArgs
{
    public CustomEventArgs(CustomData data)
    {
        this.Data = data;
    }

    // Здесь лежат какие-то данные, которые ты хочешь передать слушателям события.
    public CustomData Data { get; private set; }
}
Стало быть, подписываться на него ты будешь как-то так:
public class CustomActionListener
{
    private CustomEventEnabledClass _someObject;

    // ...

    private void HandleCustomAction(object sender, CustomEventArgs e)
    {
        DoSomethingWith(e.Data);
    }

    private void SubscribeToCustomAction()
    {
        _someObject.CustomActionHappened += new CustomEventHandler(this.HandleCustomAction);
    }

    // ...
}
Где здесь должны быть ссылки родительского типа (EventArgs)?
>> No.42296 Reply
File: -.jpeg
Jpeg, 286.58 KB, 800×1200 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpeg
Привет всем.
У меня есть Graphics, в котором что-то нарисовано, и это что-то нужно сохранить в файл. Записав всё, как я понял, в Bitmap и сделав Bitmap.Save(string path);
Проблема с переносом из Graphics в Bitmap, я не вижу никаких подходящих методов ни там, ни там!
У битмапа есть конструктор вида Bitmap(width, height, Graphics), но последний аргумент там только сообщает свой resolution.
На разных форумах советуют делать Graphics.DrawImage(Bitmap, координаты), но ведь это значит положить картинку в Graphics из битмапа, а мне нужно наоборот!
Нашел ещё GraphicsToBitmap, но он, кажется, устаревший - моя студия ничего о нем не знает.

Психнуть уже хочется!
>> No.42298 Reply
>>42296
Я не шарпист, но, если верить гуглу, тебе надо изначально указать, что ты рисуешь в Bitmap. Как тут, например: http://stackoverflow.com/questions/2928845/saving-system-drawing-graph[...]r-bmp
>> No.42300 Reply
>>42296
Хуясе у нее ноги короткие.
>> No.42302 Reply
File: -.jpeg
Jpeg, 327.81 KB, 800×1200 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpeg
>>42298
Вот к сожалению.
Graphics - штука абстрактная, она хранит в себе какой-то рисунок, но он просто лежит в памяти.
Нужно привязать его к компоненту, который отображается на форме, но одновременно с битмапом это сделать нельзя.

И ниже там опять drawImage, который копирует bitmap в graphics, а не наоборот.
>> No.42305 Reply
>>42302
Попой читаешь.
> If your Graphics is on a form, you can use this:
> private void DrawImagePointF(PaintEventArgs e)
> ... Above code goes here ...
> e.Graphics.DrawImage(bitmap, 0, 0);
А потом вызываешь тот же метод для формы, не переопределенный. Если ваша решетка в такое может, конечно.
>> No.42309 Reply
>>42302
Разобрался.
Правильный компонент (pictureBox) и так должен содержать внутри себя Image, с которым можно делать что хочешь, изменяя Graphics.
У меня же был неправильный (Panel), потому что так советовал неправильный учебник.
>> No.42353 Reply
>>42302
> жпег
Пак есть? Молю.
>> No.42768 Reply
/r/ легковесную иде для этого вашего шарпа. Студия просит 8 гигов даже безо всех опциональных перделок и видимо предоставляет еще полтора десятка ненужных языков в нагрузку.
>> No.42769 Reply
>>42768
http://www.monodevelop.com/ лол.
А вообще попробуй удалить просмотренное анимцо и прон.
>> No.42770 Reply
>>42769
У меня есть место на системном диске, где и стоит большая часть софта, мне просто влом качать это дело через официальный говнозагрузчик.
> http://www.monodevelop.com/
Ок, посмотрю.
>> No.42771 Reply
>>42768
> предоставляет еще полтора десятка ненужных языков в нагрузку
Не хочешь ненужных языков - снимай галочки при установке. Так ты сможешь оставить только шарп, если тебе припекает от нескольких дополнительных сотен мегабайт.
> официальный говнозагрузчик
MSDNAA штоле? Тогда наслаждайся своей лицензией, пока торрентобоги качают те же образы во всю ширину своего канала.
>> No.42772 Reply
>>42771
> Не хочешь ненужных языков - снимай галочки при установке
Какие нахуй галочки, оно качает вообще все, отключить можно только 2 гига библиотек.
Ну извините, джетбрейнс подсадили меня на комьюнити едишены, я нынче только кинцо да игоры иногда с торрентов качаю. Естественно я предпочел бесплатную лицензию, чем искать чистую пиратку.
>> No.42886 Reply
Есть такая иерархия классов:
base
-baseVariation
--A
--B

base и baseVariation абстрактные. Т.е. реально существовать могут A или B.

У меня есть нечто типа base. Как мне проверить и преобразовать это к типу baseVariation? При этом без преобразования к A или B. Это ведь будет работать с генериками?
>> No.42887 Reply
>>42886
> base и baseVariation абстрактные.
Абстрактность влияет только на возможность создания экземпляра класса. Она никак не мешает приведению типов и хранению ссылок.
> Как мне проверить и преобразовать это к типу baseVariation?
Например, так:
Base a = new A();
// ...
baseVariation b = a as baseVariation;
if (b != null)
{
    // работаем над ссылкой типа baseVariation
}
Или, если ты смелый человек и знаешь, что делаешь:
baseVariation b = (baseVariation)a;
// работаем над ссылкой типа baseVariation
> Это ведь будет работать с генериками?
Да, будет - ты можешь привести ссылку на List<TValue> к типу object, а эту ссылку, например, - к IEnumerable<TValue>. Попробуй!
>> No.42891 Reply
>>42887
Спасибо. Разобрался вроде.

Ещё вопрос. Есть такое:
Base
--A<T>
--B<T>

Как сериализовать System.Generics.List<Base>?
>> No.42902 Reply
>>42891
Имхо, каждый из наследников должен быть помечен как serializable, со всеми причиндалами, тогда List<Base> нормально сериализнется.
мимокрокодил
>> No.42934 Reply
File: emojiprotest2-704x469.jpg
Jpg, 66.34 KB, 704×469 - Click the image to expand
edit Find source with google Find source with iqdb
emojiprotest2-704x469.jpg
Анон, привет!
В ресурсах моего проекта есть каталог со множеством картинок.
Нужно распихать их все по нескольким коллекциям по определенному критерию (скорее всего, части имени файла).
То есть, нужно получить список ресурсов, удовлетворяющих условию.
Как это сделать?

Resources.ResourceManager для этого не очень-то годится.
>> No.42935 Reply
>>42934
#!/bin/zsh
ls -la **/*.{jpg,jpeg,png,gif}
Типа так?
>> No.42936 Reply
>>42935
Эм-м… причем здесь файлы на диске и вообще баш-заш?
Мне нужно забить коллекции в программе картинками, уже лежащими в ресурсах (прошиты в экзешник) и дальше работать с ними.
>> No.42941 Reply
File: graph.png
Png, 16.80 KB, 1116×365 - Click the image to expand
edit Find source with google Find source with iqdb
graph.png
Есть программа, пикрилейтед. Модель управляет логикой программы, вью — UI, презентер рулит обоими.
В идеале ни вью, ни модель не знают про презентер и об изменении состояния оповещают событиями. Но есть такие UI-зависимые функции, вроде отображения сообщения об ошибке, которые нужно вызывать напрямую.
Вопрос, собственно, в том, как это реализовать.
Посредством презентера через ограниченный интерфейс? Посредством вью через ограниченный интерфейс? Статическим классом? Или ещё как-нибудь?
>> No.43004 Reply
Насколько совместима программа написанная в Моно с виндой?
>> No.43005 Reply
>>43004
Никак, см. lm://Фатальный_недостаток
Исторически так сложилось, что у каждой платформы свои инструменты.
>> No.43146 Reply
>> No.43147 Reply
>>42941
О, хорошая схемка, до меня, кажись, дошло дао MVP.
>> No.43255 Reply
File: 41b06546046ebc510...
Png, 509.46 KB, 840×850
edit Find source with google Find source with iqdb
41b06546046ebc510cadfcb49534f632.png
File: 2.png
Png, 324.92 KB, 1366×768
edit Find source with google Find source with iqdb
2.png

Сап, Добрач. Пишет тебе очередной быдлоайтишник. Суть такова: мне стало скучно и я решил запилить нагло спиздить идею и ресурсы из игры Kantai Collection. А сделать я хочу часы в виде чиби-анимудевки (на первое время взят пикрелейтед, а вообще хочу анимацию, но это надо художника искать), которая, собственно, каждый час будет этот самый час провозглашать. Типа, "Адмирал Анон-кун, полдень!". C# выбрал потому, что я чуть-чуть работал с ним в универе и уже не падаю в обморок от того, как всё непривычно нас нормально учили только делфи, так что да, всё очень плохо. Что у меня есть на данный момент - прозрачная форма с картинкой, при нажатии на которую воспроизводится звук компонентом PlaySoundAction. А ещё у меня есть следующие вопросы:
1) как сделать так, чтобы размеры формы зависели от разрешения? Чтобы, скажем, чибик занимал только 5-10% экрана, автоматически подстраиваясь под разрешение;
2) как сделать так, чтобы несколько быстрых кликов не приводили к тому, что звук воспроизводится несколько раз и накладывается друг на друга? Полагаю, нужно как-то заблокировать этот элемент на время воспроизведения, но как? А в идеале - как воспроизводить звук без этого компонента? Мне всё равно придётся что-то придумывать для часов, так что совет (а лучше пример) лишним не будет. Порылся на киберфоруме, ничерта не понял, пришёл сюда;
3) и самое главное, как добавить лейбл поверх изображения? Я не придумал ничего лучше, кроме как выводить время через него, но при добавлении на форму, он мне удаляет изображение.
>> No.43258 Reply
>>43255
> как сделать так, чтобы размеры формы зависели от разрешения? Чтобы, скажем, чибик занимал только 5-10% экрана, автоматически подстраиваясь под разрешение;
  • получаем ширину экрана
  • берём ширину картинки
  • берём некоторое разрешение за единицу
  • делим ширину на коэффициент
  • полученное умножаем на размер картинки
k=1000 // коэффициент
img=200 // размер пикчи
w=2000 // размер экрана
new= img * w/k // новый размеръ
> как сделать так, чтобы несколько быстрых кликов не приводили к тому, что звук воспроизводится несколько раз и накладывается друг на друга?
Проверять какой нибудь IsPlaying или что там может быть. Или сконструировать свой. Типа так:
  • берём текущее время
  • ищем разницу с предыдущим запомненным временем
  • сравниваем длинну звука с разницей во времени
  • если больше чем дофига, то играем звук
  • запоминаем текущее время
Псевдокод:
current = GetTime()
len = GetSoundLength()
if(len > current - last)
  PlaySound()
last = current
При первом заходе last закономерно где-то в самом старом прошлом, так что всё окей.
> А в идеале - как воспроизводить звук без этого компонента?
Гугл говорит, что google://c#+system.media.soundplayer
> и самое главное, как добавить лейбл поверх изображения? Я не придумал ничего лучше, кроме как выводить время через него, но при добавлении на форму, он мне удаляет изображение.
Хз. Я не знаю либы шарпа.
>> No.43260 Reply
>>43258
> получаем ширину экрана
Вот как получить это меня и интересует. Но фиг с ним, с разрешением, это потом можно сделать.
> Проверять какой нибудь IsPlaying или что там может быть
Надо будет поискать информацию на эту тему. Я сделал звук через SoundPlayer, теперь при каждом клике дорожка воспроизводится с начала, что тоже не есть гуд.
>> No.43261 Reply
>>43260
> Вот как получить это меня и интересует
https://msdn.microsoft.com/en-us/library/system.windows.forms.screen.aspx
Ты бы погуглил хоть, что ли.
>> No.43262 Reply
>>43261
Я гуглил, и даже находил что-то, но оно не работало. Потому и решил спросить анона.
>> No.43270 Reply
>>43255
Запилил в WPF с MediaPlayer'ом.
<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        AllowsTransparency="True" WindowStyle="None"
        Title="MainWindow" ResizeMode="NoResize"
        Width="{Binding ComputedWidth, Mode=OneWay}"
        Height="{Binding ComputedHeight, Mode=OneWay}" MouseLeftButtonDown="Window_MouseLeftButtonDown" >
    <Window.Background>
        <ImageBrush ImageSource="Resources/chibi.png" Stretch="Uniform" RenderOptions.BitmapScalingMode="HighQuality" />
    </Window.Background>
</Window>
public partial class MainWindow : Window {
    private MediaPlayer _mediaplayer = new MediaPlayer();
    private readonly double _sizeIndex = 0.42; // 42% - коффициент размера картинки
    private double _imageRatio; // image width / image height
    // подгоняем размеры так, чтобы они не превышали заданного коэффициента по вертикали и горизонатли
    public int ComputedWidth {
        get {
            return (int)Math.Round(Math.Min(SystemParameters.PrimaryScreenWidth * _sizeIndex, 
                                            SystemParameters.PrimaryScreenHeight * _imageRatio * _sizeIndex));
        }
    }
    // подгоняем размеры так, чтобы они не превышали заданного коэффициента по вертикали и горизонатли
    public int ComputedHeight {
        get {
            return (int)Math.Round(Math.Min(SystemParameters.PrimaryScreenHeight * _sizeIndex, 
                                            SystemParameters.PrimaryScreenWidth / _imageRatio * _sizeIndex));
        }
    }
    public MainWindow() {
        InitializeComponent();
        DataContext = this;
        var imageSrc = (Background as ImageBrush).ImageSource;
        _imageRatio = imageSrc.Width / imageSrc.Height;
        _mediaplayer.Open(new Uri(@"Resources/moan.mp3", UriKind.Relative));
    }
    private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
        // проверяем закончил ли воспроизведение плеер (или ещё не начинал)
        if (_mediaplayer.Position == _mediaplayer.NaturalDuration.TimeSpan || _mediaplayer.Position == new TimeSpan(0)) {
            _mediaplayer.Position = new TimeSpan(0);
            _mediaplayer.Play();
        }
        // Drag & Drop
        this.DragMove();
    }
}
мимо
>> No.43443 Reply
File: CfXzJTDMrek.jpg
Jpg, 265.25 KB, 1063×886 - Click the image to expand
edit Find source with google Find source with iqdb
CfXzJTDMrek.jpg
Привет, Анон.
Такая ситуация, нужно разработать учебный проект, но того, что преподают мало, чтобы более менее разобраться.
Помоги советом.

Нужно разработать клиент-серверное приложение с использованием WinAPI или POSIX.
Поясните вкратце, какие у них плюсы/минусы.
>> No.43445 Reply
>>43443
> с использованием WinAPI или POSIX
Минусы обоих - слишком низкий уровень. В плане сокетов - разницы между ними почти нет, т.к. сокеты в винапи содраны с позикса чуть менее чем полностью.

Просто нагугли примеры по сокетам для сишки. Всяко должны найтись.

P.S. А тебе точно надо юзать WinAPI/POSIX на C#?
>> No.43446 Reply
>>43445
Язык не оговаривался, но мне лично удобнее на C#. Привык за последние пару лет.
Обязательно WinAPI/POSIX, ага. У C# с ними какие-то проблемы или, просто, звучит как странная идея?
>> No.43447 Reply
>>43446
> звучит как странная идея
This. Если ты привык к стандартной библиотеке .NET и знаком с основами ООП, WinAPI своим ущербным сишным API вызовет у тебя острые приступы анального дискомфорта. К тому же P/Invoke, который ты будешь использовать для обращений к функциям WinAPI, откроет тебе массу новых, доселе неизведанных способов отстрелить себе обе ноги сразу.
>> No.43448 Reply
>>43447
Ой вей.
А с POSIX аналогично?
>> No.43664 Reply
Что первым делом читать неофиту? Пока что скачал "0 5.0 СПРАВОЧНИК. Полное описание языка"("C# in a nutshell", который). Да, английским владею плохо.
>> No.43667 Reply
>>43664
Деннис Ричи, «Язык программирования Си».
>> No.43669 Reply
>>43667
Анон, не надо так. Он же про шарпик спрашивает. Зачем ему си?
>> No.43670 Reply
>>43669
Это болезный, который кроме си ничего не осилил и теперь форсит его повсюду.
>> No.43673 Reply
File: zhrite-rybu_5084_demotivatorz.ru.jpg
Jpg, 65.18 KB, 640×630 - Click the image to expand
edit Find source with google Find source with iqdb
zhrite-rybu_5084_demotivatorz.ru.jpg
>>43670
Ты CJDEHITYYJ непонимаеш в чом суть Си.
>> No.43682 Reply
Анон, а ты можешь мне привести пример оправданного использования IEnumerable, если есть разновидности ICollection? Я никак не могу придумать ему использования.
>> No.43683 Reply
>>43682
Читай про паттерны ОО-проектирования, причём особенное внимание удели слабой связанности и её плюсам. Как только на тебя снизойдут Просветление и Понимание, задумайся вот над чем: если тебе нужен исключительно последовательный обход некоторого readonly-множества элементов (а в подавляющем большинстве случаев использования коллекций тебе нужен именно он), зачем реализовать довольно жирный ICollection (я уже даже не говорю про IList)? Зачем лепить заглушки на месте методов, изменяющих последовательность (Add(), Remove(), CopyTo()...), если в процессе последовательного обхода они тебе никогда не понадобятся? Даже в относительно новом интерфейсе IReadOnlyCollection, запиленном исключительно для таких как ты, есть избыточное свойство Count, которое не нужно для последовательного обхода, а для некоторых последовательностей и вовсе не определено.
>> No.43685 Reply
>>43683
Но в ICollection из бонусных членов относительно IEnumerable только Count. Мне интересно, в каких случаях, я не могу узнать количество членов последовательности. Да, я знаю, что можно использовать yield return какой-нибудь, тогда количество елементов будет неизвестным. Но зачем?
А про паттерны я несколько книг читал, да.
>> No.43686 Reply
>>43685
> Да, я знаю, что можно использовать yield return какой-нибудь, тогда количество елементов будет неизвестным. Но зачем?
Ты можешь не хранить последовательность в памяти целиком. Может быть реализован поиск определённых элементов в структуре данных таким образом. Например есть массив с пользователями. А надо послать письмо всем админам в массиве. Функция найилдивает админов и ты обходишь и шлёшь им письма. Если бы админы не найилдивались, а возвращался бы массив админов, то съелось бы больше памяти. Можешь в виде функции с йилдами реализовать не структуру данных, а алгоритм её обхода или просто алгоритм обхода чего-нибудь. В форме найилдивающейся последовательности может быть реализован ввод данных откуда-то. Из курсора базы данных, например.

Кроме того ICollection наследует IEnumerable, они не отдельные полностью. И это может быть использовано, чтобы интерфейсы были не такие жирные. Interface segregation principle тоже.
>> No.43689 Reply
File: 1406576224_anime-gif-cirno-touhou-project-1289007.png
Png, 194.02 KB, 388×475 - Click the image to expand
edit Find source with google Find source with iqdb
1406576224_anime-gif-cirno-touhou-project-1289007.png
Имеется ли у кого опыт удаленной работы?
Хотелось бы узнать, какие перспективы имеются у .Net-разработчика из далёкой глубинки, который не хочет ехать в большой город. Интересно, куда стоит развиваться и стоит ли оно того.

С учетом того, что я готов как следует изучать технологии и браться за неблагодарную работу (до поры до времени) ради опыта и перспектив.
>> No.43696 Reply
>>43689
> который не хочет ехать в большой город
Оторви жопу от стула и ехай в большой город. В хорошей фирме тебя прокачают гораздо быстрее, чем на удалёнке.
>> No.43697 Reply
>>43689
Немногие компании берутся за такое. А если и берутся, то за гроши и в этой стране очень просто столкнуться с кидаловом. Если так уж лень выезжать из города, призадумайся о фрилансе. Для этого скорей всего придется изучить что-нибудь из популярного в сфере мобильной и/или веб-разработки, + осилить проблему первого заказа. Но профита от фриланса, я бы сказал, даже больше чем от работы на компанию. Спрос большой, если при голове и ответственнен, то без работы не останешься. Крайне желательно владеть английским.
>> No.43698 Reply
Анон, поясни по-хардкору, я все никак нагуглить не могу.
Задача такова: написал я контейнер для ресурсов, которые можно получать по ключу. Ресурсы эти держатся в WeakReference, который в свою очередь, находится в некотором классе-враппере, который может держать ссылку на объект для того, что бы его GC не схавал.
Когда я удаляю все ссылки на объект внутри WeakReference, я хочу и удалить объект-враппер из хранилища репозитория.
Я решил, что сделаю себе нотификатор о успешном сборе мусора, после которого я и буду удалять все эти объекты из хралища. Нагуглил статью https://msdn.microsoft.com/en-us/library/cc713687.aspx . Вроде как всё должно работать. Но нет.
Когда объект в WeakReference уже null, GC.WaitForFullGCComplete() все еще не возвращает мне необходимый статус, даже если долго ждать.
Почему так происходит?
И почему после GC.Collect() WaitForFullGCComplete всё равно не срабатывает?
>> No.43821 Reply
File: 14264270685600.jpg
Jpg, 64.78 KB, 850×777 - Click the image to expand
edit Find source with google Find source with iqdb
14264270685600.jpg
Как передавать с бизнес слоя сервисные сообщения? Ну вот, например, у меня в бизнес слое есть метод, который возвращает какие-то ДТО-шки. Ну и нам надо провалидировать входящие параметры. Как мы будем возвращать с этого метода сообщения? Ну там ексепшн кидать или еще как. Потом это все нужно будет в слое представления обработать же.
>> No.43849 Reply
>>43698
Прошу прощения за слоупочность, но этожи вроде ни разу не событие.

>>43821
А с какими технологиями работаешь?
Просто есть докучи разнообразных стандартных подходов, вроде атрибутов валидации или интерфейса IValidatableObject. При этом поддержка этой хрени как правило реализована в том числе на уровне интерфейса.

В целом, если можешь проверить что-либо руками - проверяй руками (в контроллере/коде формы либо ещё где-нибудь). Исключения, имхо, должны использоваться только в том случае, если состояние программы некорректно, и быть такого не должно.
>> No.43853 Reply
>>43849
MVC. Ну вот проверю я руками, а как вернуть то, что напроверял? Один из вариантов - кидать ексепшн, кастомный или нет.
>> No.43854 Reply
>>43853
Эксепшены только для незапланированного поведения, для обработки ошибок. В самом алгоритме их противопоказано юзать.
>> No.43856 Reply
>>43854
Но почему?
>> No.43857 Reply
>>43856
Код будет очень неочевидным. Эксепшены похожи на goto. Они появились как нечто вроде goto, заточенное под обработку ошибок. Потому что если код сломался, то дальше ему ненужно выполняться и тогда из кода перескакивают на обработку. Это был типа как частый случай хорошего использования goto и его привели к отдельному виду.

Честно говоря хз, как там в шарпе с этими слоями, но идея использовать экспешены не по назначению однозначно плохая. Уж лучше тогда просто goto. Не намного лучше.
>> No.43860 Reply
>>43849
> Прошу прощения за слоупочность, но этожи вроде ни разу не событие.
Ну да, я и ничего не говорил о событиях (не о event'ax по крайней мере). Идея была в том, что бы сделать таску, которая будет ждать сборки и уведомлять об этом контейнерам с помощью event'ов. Но это почему-то не работает.
Значит мне нужен какой-то другой способ узнавать о сборке мусора, либо ещё какая статья о том, как же всё же работать с GC.WaitForFullCollectionComplete().
>> No.43862 Reply
>>43696
>>43697
Спасибо, учту.
>> No.43865 Reply
>>43860
Прошу прощения - затупил. Т.е. ты хочешь сказать, что статус тупо не меняется? Странно. Боюсь тут тебе не смогу помочь, потому что ни разу с этой штукой не работал.
Кстати, а почему бы не выполнять эту проверку при изменении самих свойств или добавления нового элемента в контейнер, например? Просто с этим подходом, как я понял, тебе всегда нужен будет поток, который мониторит статус сборки мусора. Не есть кошерно, имхо.
>>43853
> Ну вот проверю я руками, а как вернуть то, что напроверял?
В методе контроллера, который принимает данные POST, ты можешь сделать ModelState.AddModelError(property, message). Принимает две строки. Первая - путь к свойству модели, вторая - сообщение. Если проверка не привязана к свойству, а к самой модели, в property передаёшь пустую строку (string.Empty). Далее рендерить это на странице можно с помощью хелперов Html.ValidationMessageFor(m => m.property) и Html.ValidationSummary(bool). Последнее в зависимости от параметра рендерит все ошибки либо только ошибки модели. Как-то так.

Писал по памяти, так что могут быть ошибки.
>> No.43867 Reply
>>43865
Он меняется, но только тогда, когда память совсем уж забита. При GC.Collect() ничего не срабатывает.
Ну у меня была идея ресурсных объектов для плагинов, которые можно получить и юзать. Когда плагин, объекты которого используются, отключается, програма должна диспоузнуть только те, что не используются, а остальные только тогда, когда на него больше не ведёт ни одна ссылка. А значит, я не могу точно знать, когда ресурс освободится и объект-хранилище можно поместить назад в пул.
Так что я пока проверяю раз в 10 секунд, но это как херовый gc поверх gc, так что продолжаю искать способы получше.
>> No.43868 Reply
>>43867
GC-кун
>> No.43870 Reply
>>43857
М. Думаешь, что всовывать во все объекты, которые возвращают методы сервиса что-то типа IsSuccess и Message? Как-то тоже не оч.

>>43865
Да не, спасибо, но как работать с вьюхами я знаю. Мы еще не дошли до контроллера вообще, мы говорим о том, когда и как контроллер должен понять, что он делает что-то не так. Ну вот пример: юзер вводит несуществующий логин. Контроллер дергает метод сервиса ГетЮзер (забудем о валидации вьюмодели), в этом методе юзера нифига не находит, что дальше? Можно возвращать нулл, конечно, и соответственный меседж, но мы в таком случае не будем знать точную причину, нулл и в других случаях может возвращаться.
>> No.43871 Reply
File: 14169421457460.jpg
Jpg, 69.06 KB, 960×825 - Click the image to expand
edit Find source with google Find source with iqdb
14169421457460.jpg
Кто-то работал тут еще с Ентити Фреймворком тесно?
Не получается сделать джойн с инклюдом, замучался вообще, хоть бери хранимку делай.

Есть две таблицы (по сути таблица и вьюха) и у них конечно же нет связей. То есть в table1 ентити нет table2 свойства.
нужно что-то типа такого

db.table1.Include(d => d.IncludeProp).Join(db.table2, // target
  c => c.CategoryId,          // FK
  cm => cm.ChildCategoryId,   // PK
  (c, cm) => new { Category = c, CategoryMaps = cm })
>> No.43873 Reply
>>27510
Я хочу кодить на СиСярп, но не хочу использовать Студию и Винду.
Как мне кодить и запускать свойй быдлокод на каком-нибудь Минте?
>> No.43874 Reply
>>43871
А мне за картинку из анатомического справочника предупреждение дали.
>> No.43877 Reply
>>43867
Если мне не изменяет память, ручной вызов сборки мусора таки не гарантирует его запуск (да и ОЧЕ не рекомендуется, ибо затратно). А самостоятельно он действительно запускается только при выжирании n-ного количества памяти, бида-печаль, desu.

>>43870
Так через этот же механизм. Предположительно как-то так:
[HttpPost]
public ActionResult Authenticate(AuthModel model) {
    var user = _service.GetUserByName(model.Name); // а там щито-то вроде context.Users.SingleOrDefault(x => x.Name == name);
    if (user == null || model.Password != user.Password) { // так делать нельзя. Хранить нужно хэш и сравнивать хэши но примера ради...
        ModelState.AddModelError(string.Empty, "Неправильное имя пользователя или пароль.");
    }
    if (!ModelState.IsValid) {
        return View(model);
    }
    else {
        FormsAuthentication.SetAuthCookie(user.Name, model.RememberMe);
        return Redirect("ProtectedContent");
    }
}
>>43871
Боюсь, не смогу тебе помочь, ибо нет пока возможности потеститься. На стэке нашёл вопрос, где говорилось, что EF - бака, игнорирует Include перед Join'ом и, дескать, нужно либо делать его после Join'а или доставать данные (а-ля ToList()). ( http://stackoverflow.com/questions/20722859/include-before-join-doesnt[...]ork-6 )
>> No.43878 Reply
>>43877
*RedirectToAction
самофикс
Всё, я спать, ибо моск не варит чуть более чем полностью. Извиняюсь, если где ошибки.
>> No.43881 Reply
>>43873
Но зачем? Есть же няшная Java.
>> No.43882 Reply
>> No.43883 Reply
>>43873
Кстати, есть ещё такая вещь, как Visual Studio Code: https://www.visualstudio.com/products/code-vs
Разработана в Microsoft, доступна под винду/мак/линупс, умеет кучу языков, умеет(?) компилить код, бесплатна. Где-то тут должен быть подвох, но я не понимат, где.
>> No.43884 Reply
>>43873
Ещё можешь юзать VS online. Облака и всё такое.
>> No.43886 Reply
>>43883
Просто читай иногда EULA (https://code.visualstudio.com/License):
> > TIME-SENSITIVE SOFTWARE. The software will stop running on 31/12/2016 (day/month/year). You will not receive any other notice. You may not be able to access data used with the software when it stops running.
> > PRE-RELEASE SOFTWARE. This software is a pre-release version. It may not operate correctly or work the way a final version of the software will. Microsoft may change it for the final, commercial version. Microsoft also may not release a commercial version. Microsoft is not obligated to provide maintenance, technical support or updates to you for the software.
Кратко: в новый год с 2016 на 2017 год Студия превратится в тыкву и Мелкософт не гарантирует, что оно после этого вообще будет существовать. Ещё там есть пункты, что это софтваре будет собирать о тебе всякую информацию и ты можешь возместить ущерб величиной не более пяти баксов, если оно тебе что-то поломает.
>> No.43888 Reply
>>43886
5 баксов тоже неплохо, можно игру в стиме купить.
>> No.43891 Reply
File: dreamscape1.jpg
Jpg, 828.90 KB, 1920×1200 - Click the image to expand
edit Find source with google Find source with iqdb
dreamscape1.jpg
Привет.
Есть няшный СиШарп.
Вот.
Есть няшное приложение под ВинФон.
Как привязать данные из какого-нибудь класса к контроллам, например, чтобы в комбобоксе после загрузки с сайта были названия блюд, которые можно заказать сейчас.
Т.е. я смог получить с сайта инфу, а как ее отобразить в приложении не знаю.
Это чисто учебное задание, просто не нравится мне учиться на всяких хеллоВордах или там калькуляторах.
>> No.43892 Reply
>> No.43905 Reply
Как вы работает с инклюдами в Ентити?
Ну вот есть метод, он возвращает сущность, но нам в другом методе нужно чтоб он возвращал себя и связанные сущности, в другом месте другие и т.д.
Вот как это все зафигарить в параметры? Енумом, что ли?
>> No.43913 Reply
>>43905
Зависит от ситуации, имхо. Но я бы предпочёл несколько методов enum'у.
>> No.43952 Reply
>>27510
Научите меня программировать на С#, во имя тёмных богов. Я должен научиться, ибо игоры требуют от меня автоматизации.
>> No.43954 Reply
>>43952
Для автоматизации люто-бешено рекомендую AutoHotkey или Sikuli. Шарпом автоматизировать можно, но далеко не так удобно.
>> No.43955 Reply
>>43954
Sikuli енто фреймворк для тестирования интерфейсов на питоне? Помню запилил бота для какой-то эроге-гриндилки. Был доволен (хотя питона таки не знаю).
>> No.43956 Reply
>>43955
Именно так. Довольно многофункциональная штука. Очень удобно её использовать если нужна какая-то реакция на что-то на экране.
>> No.44328 Reply
File: 1.png
Png, 5.22 KB, 305×170 - Click the image to expand
edit Find source with google Find source with iqdb
1.png
Привет, /s/. Разбираюсь с EntityFramework в связке с MySQL, столкнулся с рядом проблем.

Файлы .csdl, .msl и .ssdl создавал с помощью edmGen, подключил их к ресурсам программы. Создаю connectionString, пытаюсь выбрать данные из таблицы и получаю Exception - unable to load the specified metadata resource. Строка выглядит так

m_connectionString = "metadata=res:///outcsdl.csdl|res:///outssdl.ssdl|res://*/outmsl.msl;provider = MySql.Data.MySqlClient;provider connection string='server=localhost;port=3306;database=deviceReference;uid=root;password=123'";

Она у меня непосредственно подается в конструктор класса, который сгенерировала утилита edmGen

Если скопирую указанные выше три файлы в папку debug и в connectionString укажу явный к ним путь, т.е. connectionString выглядит тогда так

m_connectionString = "metadata=./outcsdl.csdl|./outssdl.ssdl|./outmsl.msl;provider = MySql.Data.MySqlClient;provider connection string='server=localhost;port=3306;database=deviceReference;uid=root;password=123'";

то все работает, но я не хочу эти файлы с собой везде таскать. Судя по гуглу ошибка в том, что неправильно ссылаюсь на имена ресурсов. Они уменя лежат в папке Resources, как на картинке показано. Но как правильно сослаться на них?
>> No.44579 Reply
Анон, подскажи, пожалуйста, неопытному падавану: в наше время нужно знание windows form? Даже вопрос скорее так поставлю: является ли WPF панацеей для замены winform или нет?
>> No.44580 Reply
>>44579
Это надстройка над винформами, вроде как.
>> No.44581 Reply
>>44580
нет, WPF это самостоятельная технология, в книгах пишут, что за ней будущее, правда с оговоркой, что Windows Forms еще будет приличное время жить в уже имеющемся коде
>> No.44582 Reply
>>44581
У нас отказались от WPF и всё сделали на винформах. Поля в объектах имеют аннотации, список объектов передаётся окну как его источник данных (data source), сами окна рисуем наполовину мышкой, дописывая потом код вручную. Мне норм.
>> No.44586 Reply
А в чем разница?
Одно на винапи, а второе новый велосипед?
мимо
>> No.44590 Reply
>>44586
И то и другое на Win API, только WPF кагбэ уровнем повыше, там формы рисуют с помощью XML-подобного языка разметки, см. ruwiki://XAML
А логика на C# и там и там.
>> No.44591 Reply
>>44586
Да нет, скорее всего оба построены на WinAPI, просто Windows Forms используют малость устаревшие подходы. Вся логика забивается на события, и довольно тяжело отделяется от представления. Плюс, с точки зрения построения UI всё жётско привязано к пикселям, что, прямо скажем, ниоч.

В основе WPF лежит привязка данных (паттерн MVVM), что потенциально упрощает создание всяких разных интерфейсов для представления данных и работы с ними, но требует дополнительного вкуривания. При этом есть жёсткое разделение интерфейса (xaml) и кода (C#, VB, e.c.t.), благодаря чему интерфейс может рисовать человек, понятия не имеющий о программировании. Причём для этого есть даже специальная вундервафля, которая называется Blender. Сам xaml - XML с разметкой (чем-то напоминающий HTML), поддерживающий хитроотняшенные анимации, векторную графику и прочая и прочая. Однако когда я на этом добре кодил (а это было давно), всякие продвинутые штуки вроде работы на нескольких мониторах / поддержки трея в WPF реализованы не были, и требовали импорта форм и написания небольших костылей.

мимо-кодил-за-еду-будучи-студентом
>> No.44594 Reply
>>44328
> m_connectionString = "metadata=res:///outcsdl.csdl|res:///outssdl.ssdl
Там звездочки должны быть. Я так понимаю, это парсер поел. У тебя файлы метаданных в ресурсах той же сборки, где конструируется сгенеренный класс? Если нет, то вместо res://*/ надо будет писать полное имя сборки. По-моему.

>>44580
>>44591
>>44581
>>44586

WinForms - по сути простая .NET обертка над WinAPI, такой себе переродившийся MFC. Формы портированы в моно.
WPF - windows-only радуга из свистелок-перделок, паттернов, и попытка рисовать гуй с апаратным ускорением и шейдерами.
>> No.44658 Reply
File: 14328056477330.jpg
Jpg, 30.17 KB, 502×438 - Click the image to expand
edit Find source with google Find source with iqdb
14328056477330.jpg
Доброаноны, пишу говноигру(типа лабы, времени переделывать с помощью библиотеки нет) и потребовалось рисовать на pictureBox-е маленьких человечков .png, я загрузил файлы в ресурсы, как их теперь рисовать? В DrawImage есть только отрисовка с указанием пути до файла, но тогда зачем я их в ресурсы загружал тогда.
>> No.44659 Reply
File: 1454878632435.png
Png, 0.81 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1454878632435.png
>>44658
Всем спасибо, разобрался.
>> No.44708 Reply
>>27510
Стоит ли упарываться этим добром, сидя на линексах?
Зачем моно собирают в экзешник?
>> No.44710 Reply
>>44708
Если серверно, то точно не стоит.
>> No.44711 Reply
>>44708
>>44710
Да уже можно и серверно, бро. Microsoft сменил политику и теперь они во-первых с большего Open Source, во-вторых есть стильная-модная-молодёжная технология OWIN (которую разрабатывает команда Katana), позволяющая хостить MVC и WebAPI проекты вне IIS (она таки работает и активно используется даже на венде, ибо позволяет переопределять стандартные модули обработки запроса). Ну и Xamarin запилили в Visual Studio из коробки, что тоже о многом говорит.
Впрочем, сам я, к сожалению, на линуксах не работал вообще, так что с большего пересказываю услышанное и прочитанное. Хотя с OWIN'ом таки познакомился, когда нужно было сделать точку входа для внешних мобильных приложений (OAuth 2), используя нашу систему авторизации.
>> No.44714 Reply
>>44711
Вспоминаются попытки IBM перенести PL/I на пекарни, 10 лет спустя даже скриншотов не найти было.
>> No.44728 Reply
>>44711
> Xamarin
Работал я с этим говном. Лучше бы не работал.
>> No.44742 Reply
Котаны, подскажите какие книги по паттернам лучше для конаби С# програмера. Банду прочитал, но многих вещей не уяснил изза С++ пирмеров.
>> No.44744 Reply
>>44742
Плохо читал, бро. Суть не в примерах на Си++, а в диаграмах на UML и куче текста, поясняющего за сам шаблон - как он появился, какую проблему решил и в каком месте применялся.

Алсо гугл, блядь. http://www.dofactory.com/net/abstract-factory-design-pattern - первая же ссылка, перевод паттернов банды на шарп.
>> No.44745 Reply
>> No.44751 Reply
>>44745
Спасибо, бро. Я и не задумывался над таким подходом.
>> No.44957 Reply
File: Безымянный.jpg
Jpg, 38.04 KB, 800×314 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.jpg
Ладно, в /b/ не ответили. Спрошу тут.

Смотрите, я сначала использовал отдельный метод Swap(в красном прямоугольнике), чтобы свапать объекты. Но было исключение System.ArrayTypeMismatchException.

Вот.

Почему, когда я заменил не то, что в салатовом прямоугольнике все стало нормально работать?

Мне препод сказал, что, наверное, что-то с ссылками, но раз теперь работает можно не париться.
>> No.44962 Reply
File: Test.png
Png, 20.63 KB, 642×699 - Click the image to expand
edit Find source with google Find source with iqdb
Test.png
>>44957
Хз, бро. На самом деле всё должно быть норм.
Полагаю ты уже загуглил, что эта ошибка возникает при попытке занести в массив элемент неправильного типа. Энивей, я попытался сорт оф воспроизвести твой пример (пикрелейтед), но данной ошибки у меня не возникло.
>> No.44965 Reply
>>44962
Полагаю, >>44957-кун в своём методе Main (который он, конечно же, не показал) сделал что-то вроде такого:
var array = new int[] { 1, 2, 3, 4, 5 };

// ...

var arr2 = (T[])array;
var sortedArray = Sort(arr2);

// ...
Судя по описанию ArrayTypeMismatchException в MSDN, это самый простой способ получить такое исключение при записи в массив.
>> No.44969 Reply
>>44957
> Compere
>> No.44979 Reply
>>44965
Но, похоже, мы никогда об это не узнаем :3.
>>44969
Бывает, чоужтам.
>> No.44983 Reply
File: Безымянный.png
Png, 18.67 KB, 579×386 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
>>44965
Ничего такого я не делал.
Да и сделай я так, ничего бы не поменялось от того, что я свап не вынес а запихнул внутрь сортировки.
>> No.44984 Reply
>>44983
> IRectangle[] rectArray = new Shapes.Mock.Mock.Rectangle[10];
В этом твоя ошибка. IRectangle[] и Rectangle[] - это разные типы.
Г-споди, почему все студенты так по-уебански оформляют код? Неужели вас действительно бьют по рукам за каждый пробел, насилуют за каждую объявленную переменную и отрезают пальцы, если вы напишете using Shapes.Mock.Mock; в начале файла с кодом?
>> No.44985 Reply
>>44984
Rectangle не реализует IRectangle?
>> No.44986 Reply
>>44985
Реализует, но, повторюсь ещё раз, массив из IRectangle и массив из Rectangle - это разные типы. IRectangle[] может хранить любую реализацию IRectangle, в то время как Rectangle[] позволит положить в себя только одну реализацию - Rectangle. Иди читай свою методичку, она как раз для этого и была написана.
>> No.44987 Reply
>>44986
Я, честно говоря, не знаю шарп, просто проходил мимо. Тут же как-то делается полиморфнная коллекция? Сам же сказал, что в IRectangle[] можно положить Rectangle. Значит, ошибка в другой строчке?
>> No.44988 Reply
>>44987
(продолжение) - в фориче скорее неправильный тип, так? Там должно было быть IRectangle вместо конкретики.
>> No.44989 Reply
>>44987
> Я, честно говоря, не знаю шарп, просто проходил мимо.
Если ты не >>44983-кун, то прошу прощения, я тебя с ним перепутал.
> Тут же как-то делается полиморфнная коллекция?
Именно так, IRectangle[] будет такой полиморфной коллекцией. В неё можно положить Rectangle, DummyRectangle, Win32Rectangle и ещё кучу всяких реализаций IRectangle, которые ты напишешь. Однако храниться они будут как ссылки на IRectangle, и без явного приведения к более конкретному типу ты не сможешь получить ссылку ссылку на Rectangle.

Странно, конечно, что компилятор допускает присвоение вида IRectangle[] arr = new Rectangle[]. Возможно, я ошибаюсь, и причина не в несовместимости типов IRectangle[] и Rectangle[], а в том, как компилятор вывел тип элементов массива при замене элементов. В методе void Swap<T>(ref T, ref T) он полагал, что в массиве лежат переменные типа IRectangle (т.к. именно этот тип был указан при создании экземпляра класса Sorter), но... чисто технически, при замене без метода Swap, массив ar тоже должен был быть составлен из IRectangle, поэтому переменная a тоже должна была иметь тип IRectangle. Не знаю, в общем.

Энивей, вот упрощённый пример: http://ideone.com/9cWsEu
Предлагаю форкнуть его и поиграться с типом переменной под массив и самого массива в строке 38. Легко убедиться, что если тип переменной array и присвоенного ей массива совпадёт, то ошибка при вызове метода DoFaultySwap() исчезнет.

>>44988
> в фориче скорее неправильный тип, так? Там должно было быть IRectangle вместо конкретики.
Технически - да, это так. Однако C# позволяет указывать более конкретный тип в foreach - в этом случае компилятор сам попытается выполнить преобразование к указанному типу. Если очередной элемент массива IRectangle не будет являться типом Rectangle или его производной, будет сгенерировано исключение InvalidCastException. Однако в коде из >>44983 оно не возникнет, поскольку по факту в массиве лежат именно объекты типа Rectangle, и поэтому приведение элементов массива к типу Rectangle пройдёт успешно.
>> No.44990 Reply
>>44989
> Странно, конечно, что компилятор допускает присвоение вида IRectangle[] arr = new Rectangle[]
А оно не такое безобидное, как кажется на первый взгляд. В массив из IRectangle ты можешь засунуть любую фигню, реализующую IRectangle (т.е. не только Rectangle). Что явно не понравится массиву из Rectangle. Поэтому и не допускает.
>> No.44991 Reply
>>44990
В том-то и дело, что оно не безобидно, поэтому компилятор должен был трактовать такое присвоение как ошибку и отказаться компилировать этот код. Странно, что он этого не сделал.
> Что явно не понравится массиву из Rectangle.
Причём хорошо ещё, что в C# массивы контролируют тип объектов, которые в них кладёт программист, и в случае ошибки кидают ArrayTypeMismatchException. В плюсах или C попытка положить в Rectangle[] любой другой тип прошла бы успешно (при использовании явного приведения типа), но могла бы привести к порче соседних элементов массива и/или памяти, расположенной рядом с массивом, а также к спонтанным сегфолтам/AV при обращении к этому элементу в будущем.
>> No.44994 Reply
>>44991
> В плюсах или C
Там всё гораздо хуже, анон...
class B : public A { ... }
B* bs = new B[100]; // всё ок, в bs указатель на массив из 100 элементов
A* as = bs; // компилятор молчит, т.к. думает, что кастанул указатель на один элемент
as[1].some(); // UB-КРОВЬ-КИШКИ-РАСПИДОРАСИЛО
>> No.44995 Reply
>>44984
Тогда почему, когда я Свап засунул внутрь сортировки все сразу заработало и после 100 прогонок ни разу не было исключения?
>> No.44996 Reply
>>44991
Кстати, IEnumerable<TDescendant> сконвертить к IEnumerable<TParent> таки можно (поскольку в интерфейсе нет метода Add). А поскольку foreach использует его для итерации, ошибки с приведением типа не возникает.

А мне казалось, что этот тредик мёртв...
мимо-вклинился-в-беседу
>> No.44997 Reply
>>44995
Полагаю, беда в типе аргументов, которые принимает твой метод Swap. Попробуй сделать его генериком, например. По идее таки заработает.

вклинившийся-анон
>> No.45446 Reply
File: Безымянный.png
Png, 7.78 KB, 590×377 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
Хочу сделать форму для поиска по таблице с кучей параметров.
1. Нажимаю кнопку
2. Открывается окно
3. Выбираю параметры
4. Нажимаю кнопку
5. Составляется SQL запрос
6. Результат запроса забивается в датагрид в первом окне

Каким способом в такой ситуации можно грамотно передать переменную между окнами?

Использую WPF.
>> No.45447 Reply
>>45446
Пожалуй, окно поиска лучше держать открытым.
>> No.45453 Reply
>>45446
Грамотно это делается через датаконтекст. Но можно поступить грязно - у дочернего окна завести свойство типа Window, при создании заполнять его родительским окном и обращаться к свойствам родительского окна.
>> No.45454 Reply
>>45453
Спасибо.
>> No.45565 Reply
>>45453
А почему это грязно? Я всегда так делаю, но я только учусь при этом не использую книг, онли реализую идеи, которые иногда в голове возникают, а то чего не знаю гуглю.

Думаю мой метод обучения не очень эффективен.
>> No.45566 Reply
>>45565
Зачем ты так спойлерами злоупотребляешь?
>> No.45567 Reply
>>45566
Ну, под спойлерами типо то, что не особо относится к сообщению. Я просто хочу узнать, почему так делать - грязно, о обсуждать мои методы обучения не думаю, что кому-то интересно.
>> No.45578 Reply
>>45446
Если это WPF, то новое окно можно открыть как модальное (создать окно, метод ShowDialog), тем самым блокируя основное окно. В модальном окне задаешь параметры и записываешь их в какое-нибудь публичное свойство. Потом закрываешь окно по какой-нибудь кнопке, предварительно задав в DialogResult нужное значение (если ок, то true, если не ок, то false)
Если ShowDialog вернул true, то составляешь запрос на основе тех данных, что хранится в окне.

Если тебе не нужно блокировать главное окно, то поступаем по-другому.
Так же создаем новое окно, но туда уже в конструктор передаем делегат, который принимает те параметры, что нужны для составления запроса. Он будет производить поиск. Окно открываем методом Show. По какой-нибудь кнопке "поиск" во втором окне вызываем делегат с введенными пользователем параметрами и вуаля.
>> No.45768 Reply
Аноны, я тут получил задачку - поработать над игрой. Пока смотрел исходники я вдруг понял, что она на unity и что она на android.

В общем, в чём проблема. А проблема в том, что у меня Debian. Так-то mono стоит, но что делать с Unity? Допустим редактор очень сырой, но ведь меня устроит и MonoDevelop, а сам код на Unity кроссплатформенный. Значит должна же быть возможность это компилировать, отлаживать и запускать? или невзлетит?
>> No.45803 Reply
>>45768
Для кодирования тебе хоть блокнот подойдет, а по поводу всего остального - не уверен, нагугли что-то вроде https://docs.unity3d.com/Manual/MonoDevelop.html только для линукс. Алсо, мои соболезнования.
>> No.45804 Reply
>>45803
микробамп, случайно нажал "не поднимать тред"
>> No.45861 Reply
>>45566
Его метод написания постов на Доброчан столь же эфективен, сколь и его метод обучения.
>> No.46011 Reply
File: qwe.JPG
Jpg, 72.27 KB, 876×504 - Click the image to expand
edit Find source with google Find source with iqdb
qwe.JPG
В чем может быть проблема при подключении к sql? Гугл не помогает, везде написано, как пердолиться с SQL SERVER, который у меня не установлен, но я точно знаю, что и без него можно, потому что я когда-то уже писал подобный код, и все работало заебись. Может, со строкой что-то не так?
>> No.46012 Reply
>>46011
> пердолиться с SQL SERVER, который у меня не установлен
А к чему ты тогда коннектишься?
>> No.46013 Reply
>>46011
Вроде с аксесовскими файлами можно так делать аля sqlite, но строка подключения должна быть соответствующая. Вспоминаю что-то такое из школоподелий.
>> No.46014 Reply
>>46011
Ты используешь имплементацию подключения для SQL Server, но при этом у тебя не установлен SQL Server. Тебе читать ADO.NET и смотреть в connectionstrings.com.
>> No.46015 Reply
>>46012
Ну я так понимаю, что Sql Server - это приложение, позволяющее полностью управлять бд, просматривать и вносить изменеия в них, но и без него можно обойтись за счет установленного в студию Sql Server VSS Writer, который и отвечает за создание и подключение. Ведь мне всего лишь нужно создать локальный mdf файл, и затем подключаться к нему. Я даже не понимаю, к чему здесь какие-то подключения к серверам нужны.
>>46014
Спасибо, гляну. А нельзя ли в других вариантах (Sql Express, localDB) обойтись без Sql Server, чтобы просто создать локальный mdf-файл?
>> No.46016 Reply
>>46015
Думаю, тебя интересует SQL Compact. Другие решения - SQLite, H2DB.
>> No.46017 Reply
>>46016
Я уже выбрал sqlite. Но меня все же интересует один вопрос. Раньше я занимался только ASP.NET, веб-сайты, все дела, и понятно, что там используется только одна база на сервере, и все важные клиентские данные хранятся там. А как насчет десктопных приложений, где используется локальная бд? Это что получается, что приложение, написанное с использованием sql server, всегда требует установки его на свой комплюктер? То есть все клиенты перед использованием приложения обязаны установить себе sql server?
>> No.46018 Reply
>>46017
В десктопных приложениях используются embedded БД, так что пользователям кроме самого приложения больше ничего устанавливать не нужно.
>> No.46519 Reply
>>46017
> А как насчет десктопных приложений, где используется локальная бд?
А что ты собрался хранить в десктопных приложениях? ну если настройки там всякие то есть "Properties.Settings" - хранит в файле https://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx.
Если что сам придумываешь то можно хранить в архиве, или сериализовать в файл - с этим проблем тоже никаких.
А так, если нужна бд то лучше всего локальную, в файл - для этого достаточно подключить sqlite. https://system.data.sqlite.org
>> No.46624 Reply
File: Crash_Test_Dummy.png
Png, 10.75 KB, 338×640 - Click the image to expand
edit Find source with google Find source with iqdb
Crash_Test_Dummy.png
Подскажите, каким образом можно программно вызвать команду выключения ПК от лица администратора.
Не спрашивайте зачем. Мне, действительно нужно именно это.

Имеется в виду, что пользователь не имеет права на выключение ПК. Он запускает программу, в которой уже введён логин/пароль.

Можно пойти двумя путями:
- использовать системные средства
- программно вызвать cmd.exe

Ничего рабочего не могу найти.
Например, способ из ответа приводит только к открытию окна cmd и всё:
http://stackoverflow.com/questions/13807429/running-cmd-commands-with-administrator-rights
>> No.46629 Reply
>>46624
Напиши программу на С++ которая бы запускалась с правами администратора и выключала комп, и из сишарпа делай Process.Start
>> No.46633 Reply
>>46629
> Напиши программу на С++ которая бы запускалась с правами администратора и выключала комп
Что тебе там от C++ понадобилось, вузовский ребенок? Для такой программы хватит си или ассемблера. На масме часто системный софт даже получается лаконичнее такого же софта на си, потому что исчезают ебаные приведения типов и уменьшается количество указателей. Всякий высокоуровневый язык состоит из: бойлерплейт.
>> No.46634 Reply
>>46633
Для операции выключения компьютера все эти замечательные аргументы не имеют абсолютно никакой силы. Вообще. Как тебе вообще может это придти в голову. Уменьшить количество указателей => команда, чтобы вырубить комп. И приснится же.
>> No.46668 Reply
File: Безымянный.png
Png, 11.72 KB, 744×1240 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
Спрошу еще и тут.

Я тупой, потому.
Смотрите. Делаю фиговину на сярпе с WPF.
Суть в том, что в левой колонке есть некий элемент интерфейса, который хранит коллекцию разнообразных объектов(картинки, видео, рецепты, хтмлСтраницы, Архивы ну вы поняли), например ЛистБокс или ТриВью.
Так вот. Суть в том, что я не совсем понимаю, как не нарушая концепций MVVM сделать так, чтобы в правой колонке отображалась информация об объекте. Ну, т.е. в коллекции, например, могут быть фильмы, музычка и картинки и хотелось бы, чтобы в зависимости от выбранного типа(класса) объекта, справа представлялись соответствующие поля.

Конечно можно все упростить и в сам класс добавить какой-нибудь метод, который будет возвращать описание и просто текстбоксом запилить. Или наоборот, можно добавить методы, которые при изменении выбранного элемента будут переопределять то как выглядит правая часть.
Просто хотелось бы красивенько с лейблами и прочей сранью, но при этом без писанины в кодБихаинд и не отходя от MVVM.
>> No.46673 Reply
>>46629
>>46633
Какие-то вы фанатичные, лол.

В итоге проблема сама собой решилась.
>> No.46732 Reply
>>46668
можно попробовать сделать несколко ViewModel - одну для правой части, другую для левой и одну, которая будет включать в себя эти две и быть ViewModel всего окна. Когда у тебя в левой части выбирается объект, то поднимаешь event, передаешь в него параметры для отображения в правой колонке, затем ловишь этот event в главной viewModel, передаешь его во ViewModel правой колонки, в которой делаешь все, что нужно, затем поднимаешь event PropertyChanged и с помощью DataBinding у тебя обновляется интерфейс
>> No.46827 Reply
Хочу странного.

В студии есть дофига способов свернуть куски кода, например, соответствующие вложенной области видимости, или регионы, или что там ещё. А я хочу, чтобы можно было скрыть объявление неймспейса, и при этом весь код внутри него "выравнялся" (но только визуально, конечно же) на отступ влево. Объясняя на пальцах: предположим, имеется код типа такого

namespace MyNS
{
using System;
using System.Linq;

public class MyAwesomeClass
{
public void Foo() {}
}
}

Хочу, чтобы по нажатию на кнопку он визуально преобразовывался в нечто вроде

//тут пометка с именем неймспейса, внутри которого мы находимся
//что-то вроде того, как выглядит свёрнутый регион
using System;
using System.Linq;

public class MyAwesomeClass
{
public void Foo() {}
}
//конец неймспейса

Студия должна помнить, что уровнеь отступа внутри неймспейса - +1, и редактировать ввод исходя из этого, но этот бессмысленный отступ программисту не мозолит глаз, вот. Best practice гласят, что на один файл - один класс, так почему бы и нет? Может, кто-то уже запилил такой функционал, но я не знаю, как нагуглить подобное. Хотелка возникла под впечатлением от джавовского определения package'а, да.
>> No.46828 Reply
>>46827
Простите идиота, но я так и не понял, как в разметке сохранить отступы. Надеюсь, понятно, что я пытался донести.
>> No.46834 Reply
>>46828
Отступы поломаны с момента попытки взлома и переезда сервера Доброчана в мае месяце этого года ебать-колотить сколько времени уже прошло.
>> No.46870 Reply
Есть ли у ASP.net простой и удобный способ ловить определенные куски запроса для обработки до отправки в контроллер?

Ну, т.е. у меня есть куча контроллеров, но если в get/post запросе будет нужный параметр, хотелось бы чтобы сразу выполнялся определенный метод. Я кроме как в каждом контроллере проверять наличие параметра ничего придумать не могу, вот и спрашиваю про какой-нибудь более красивый и лаконичный способ.
Например, есть
site/home и site/profile
хотелось бы чтобы если передается параметр getRandomAnimePicure, пусть пока get'ом выполнялся не тот код, что в контроллере home или profile, а тот что картинки рандомные возвращает.

не бейте тапками, просто я вообще никогда раньше с вебом дело не имел, а всю жизнь делал простенькие игрушки на джаве, для мобилок.
>> No.46871 Reply
>> No.47077 Reply
>> No.47120 Reply
File: fdHY85txuOc.jpg
Jpg, 70.84 KB, 480×480 - Click the image to expand
edit Find source with google Find source with iqdb
fdHY85txuOc.jpg
Няши, такая херня. Учу Шарп уже несколько лет. Знаю много но поверхностнотак понимаю, для джуна пока больше и не нужно
Вопрос в том, что хочу найти работу, но резюме все игнорят. Куда стучаться, няши? Заебало вилкой парашу драять. Хочу работу нормальную.
>> No.47121 Reply
>>47120
Как такое может быть, что резюме игнорят и уже несколько лет? Ты на собеседовании хоть раз был? И тебе ничего не говорят, что у тебя плохо? Ты пробовал спрашивать? Сам подавал резюме на вакансии? Требованиям соответствуешь? В какой-то мере "поверхностно" оно будет всегда, оно не бывает полным.
>> No.47122 Reply
>>47121
Я же не начал бросать резюме как только за учебу взялся. Сначала учил, потом решил побросать резюме. На сайтах по-выкладывать. Но вот беда - либо их не смотрят, либо не отвечают. Куда вообще есть смысл их бросать? Может я не там ищу?
>> No.47123 Reply
>>47122
Попробуй сделать проект на гитхабе и вставить в резюме. Попробуй переписать резюме, чтобы без глупости, перечисли технологии. Ты действительно соответствуешь требованиям по стеку? Мне кажется, так не бывает. У нас приглашают на собеседования даже совсем зелёных нубов.
>> No.47124 Reply
File: LogoPABCNET2010_Rus.png
Png, 13.06 KB, 619×108 - Click the image to expand
edit Find source with google Find source with iqdb
LogoPABCNET2010_Rus.png
Доброго утра, доброкодеры! Нужна твоя помощь в реализации алгоритма шифрования Blowfish. Проблема состоит в неком баге, который мешает дешифровать 2, 3 и 5 байты в блоке, превращая их в какую-то белиберду. 2 часа разбора моего кода с преподом никакого результата не дали. Возможно во всем виноват б-гомерзкий паскальABC. Надеюсь на тебя.
Вот код: http://pastebin.ru/vvhsIYB1
>> No.47125 Reply
>>47120
А на каких сайтах ты резюме выкладывал? Например мне (сраному пхп-макаку) на moikrug чаще приходят предложения о работе чем на hh, superjob и прочих. И да, ссылка на гитхаб очень помогает, даже если там небольшой проект, но с паттернами, юнит-тестами и всё по код-стайлу.
>> No.47126 Reply
>>47125
Резюме делал на hh и вручную паре компаний отправил на мыло. На hh всего пару просмотров.
Понял. Значит буду выкладывать на большем количестве сайтов. На гите есть проект, но там без комментов. Насчет паттернов, конечно, запара. Буду, значит, делать проект, ориентированный на красоту.

Еще вопрос, няши: пытался вчера поиграться с SQL по Троелсену, но вот запара. Не могу связаться с базой. Прописывал как в книге (local)\SQLEXPRESS, но выдает ошибку 26. Если только локал, то пишет что строка соединения не та. Ставил SQLExpress 2012. 2016 пробовал, но выдавало ошибку что не поддерживается. 2008 не хочет становится без .НЕТ 3,5.
>> No.47127 Reply
>>47126
git != github
>> No.47128 Reply
>>47126
> На гите есть проект, но там без комментов.
Путать гит и гитхаб - это очень серьёзный прокол для аппликанта. Требуется относительно уверенное владение гитом, включая использование веток и мерджей.
> но там без комментов
"Комментарий - это извинения, принесённые за плохо читаемый код". Это, конечно, не нужно понимать абсолютно, но смысл в том, что ты должен уметь писать код так, чтобы он и без комментариев был понятен, по крайней мере частично.
> Буду, значит, делать проект, ориентированный на красоту.
Если ты не понимаешь, какие последствия "красота" имеет для будущности программы, то это жирный минус. Эти моменты требуют изучения. Даже без твоего кода интервьюер быстро поймёт, что ты не сечёшь.
> Прописывал как в книге
А должен был разобраться, что как работает, и написать как у лично тебя должно быть, а не как в книге. Что такое ошибка 26? Ты же читаешь сами сообщения об ошибках?

Вообще как-то заметно, что за "несколько лет" у тебя всё совсем вяло. Если с таким багажом ты скажешь, что учил "несколько лет", они лишь подумают, что обучаемость у тебя не очень, это ещё хуже чем просто быть нубом.
>> No.47213 Reply
Господа, дайте линк на книжку c# headfirst или посоветуйте другую годную литературу для быстрого вкатывания в шершавый.
Буду осваивать после C и C++. Есть один RAT и p2p-ботнет, к которым надо написать админки с гуем + хочу знать еще один популярный язык.
>> No.47217 Reply
>>47213
> c# headfirst
> p2p-ботнет
Экий вы, батенька, неформал.
Все книжки из этой серии хуйня для наивных хочунов стать погромистом, бери просто от орайлей или ещё что.
Я ещё люблю почитывать pocket reference, если нужно быстро вкатиться.
>> No.47218 Reply
Напомнило веселые времена троянов на дельфи.
>> No.47219 Reply
>>47213
Трей Нэш, «C# 2010. Ускоренный курс для профессионалов».
Не смотри что книга 2010 года, там хорошо разобраны принципы ООП, хотя и без патЭринов.
> для быстрого вкатывания
Вполне.
>> No.47224 Reply
File: 220px-Xo_game.svg.png
Png, 12.98 KB, 220×205 - Click the image to expand
edit Find source with google Find source with iqdb
220px-Xo_game.svg.png
Нужно написать курсач на шарпе (срок - месяц), с комментариями, всё как положено. Заплачу. Предлагайте цену.

Логическая игра “Крестики-нолики” на неограниченном поле

Приложение является реализацией известной логической игры “Крестики-нолики” В данной реализации предусматривается игра двух игроков на неограниченном поле. Цель игры . построить непрерывную линию из пяти или более фишек (крестиков или ноликов) по горизонтали, вертикали или диагонали.
Возможны два режима игры, когда выигрывает тот, кто первым построит линию, или кто больше наберет очков за определенное количество времени. Во втором случае количество построенных линий не ограничено, каждая фишка в линии приносит игроку одно очко. Приложение должно обеспечивать начало новой игры на чистом поле, а также проверку соответствия действий игроков правилам игры и условия окончания игры. Роль одного из игроков (по выбору пользователя) может выполнять компьютер.
Для исключения возможности образования изолированных игр на одном поле и неоправданного увеличения размера поля следует установить максимально допустимое расстояние (не более пяти) от уже существующих фишек до новой, размещаемой игроком.
>> No.47226 Reply
>>47224
имхо, сложноватое задание для "курсача". например вот это

> Роль одного из игроков (по выбору пользователя) может выполнять компьютер.
требует знакомства с теорией игр, а вот это

> на неограниченном поле
> количество построенных линий не ограничено,
требует интересной работы с памятью (когда заданное время достаточно велико и общее количество фишек превышает объем свободной памяти)

что это за предмет и какой курс?

вообще, вот это очень неоднозначная фраза:
> каждая фишка в линии приносит игроку одно очко

и вот это попросту неверно, т.е. "максимально допустимое расстояние" не исключит образование изолированных игр:
> Для исключения возможности образования изолированных игр на одном поле и неоправданного увеличения размера поля следует установить максимально допустимое расстояние (не более пяти) от уже существующих фишек до новой

или ты ведешь группу и это задание придумал для своих учеников?
>> No.47227 Reply
>>47226
> требует знакомства с теорией игр, а вот это
Ты уверен, что это та теория игр? Ты знаком ней?
> заданное время достаточно велико и общее количество фишек превышает объем свободной памяти
Нереалистично, я считаю. Сколько они могут их понаставить по твоему? Миллиард?
>> No.47228 Reply
>>47227
> Ты уверен, что это та теория игр? Ты знаком ней?
уверен. знаком поверхностно, но достаточно, чтобы оценить трудоемкость.
> Нереалистично, я считаю.
в учебных заданиях нет понятий реалистично-нереалистично.

странное задание. какие темы проходили? знание чего именно нужно продемонстрировать этим "курсачом"?
>> No.47229 Reply
>>47228
Курсач же не по проходимым темам, а по теме, по которой ты с научником занимаешься. Типа научная работа.
>> No.47237 Reply
>>47226
> требует знакомства с теорией игр, а вот это
Ох уж этот доброчан.

Помню писал простенький ИИ для шашек, почему-то никакой теории игр не понадобилось. Пишешь функцию примерной оценки состояния игрового поля и анализируешь ей на несколько ходов вперёд, ища максимально выгодную позицию.
>> No.47238 Reply
>>47237
> Помню писал простенький ИИ для шашек, почему-то никакой теории игр не понадобилось.
потому что не знал про неё. в результате сам изобрёл какой-то велосипед. "функция примерной оценки состояния игрового поля", "максимально выгодную" - под этими словами и скрывается вся сложность.
>> No.47239 Reply
>>47238
Я думаю, что у этого анона под "примерной" скрывается "от балды" или, в лучшем случае "весьма условной". Кам он, это же курсач на "отвали" в какой-то шараге.
>> No.47240 Reply
>>47238
Ой да ладно, давай на чистоту - ты просто сноб, которому везде хочется впихнуть свои знания. Молодец, знаешь, знания полезные наверняка, серьёзно, круто, я вот не знают теорию игр.

Можно нагуглить несколько статей про то, как оценивать игровое поле, там же нагуглилть алгоритмы построения дерева ходов, всякие штуки вроде отсечения заведомо неверных решений и всё остальное. Вот и всё. Задача выполнена, играбельный ИИ написан.
>> No.47241 Reply
>>47240
> играбельный
Ты бы поиграл в такой?
>> No.47242 Reply
>>47241
Да я ему проигрывал в общем-то поначалу. Играбельный, но конечно тупой, это да. Чтобы сделать его более умным - нужно было бы добавить базу дебютов и прочих позиций. Дальше уже всякие нейросетки идут. Это всё равно достаточно далеко от теории игр, как я понимаю.
>> No.47243 Reply
>>47242
"Всё сложнее чем то, что я понимаю - это "всякие нейросетки"". Чуваки слишком много фантазируют о возможностях нейросеток из-за того, что они мало о чём ещё слышали.
>> No.47244 Reply
>>47243
Твоё сообщение не дало мне никакой информации.
>> No.47245 Reply
>>47240
> Можно нагуглить несколько статей про то, как оценивать игровое поле, там же нагуглилть алгоритмы построения дерева ходов, всякие штуки вроде отсечения заведомо неверных решений и всё остальное. Вот и всё. Задача выполнена
ну вот именно так ты и познакомился с теорией.
можно знакомиться читая учебник, можно - занимаясь гуглением. во втором случае часто остаются пробелы в знаниях, причем пробелы, о наличии которых ты у себя не подозреваешь.
хотя найти хороший учебник тоже непросто.
>> No.47276 Reply
>>47224
Ну как, нашел уже человека для этой задачи? Объяснять как работает все это потребуется по скайпу или нет?
>> No.47277 Reply
>>47276
Просто делал в студенчестве крестики-нолики на кубе в С++, там правда абсолютно наркоманский ИИ был, без рекурсивного расчета хода в глубину, что было бы правильнее.
>> No.47278 Reply
File: temp.png
Png, 151.10 KB, 801×800
edit Find source with google Find source with iqdb
temp.png
File: 1487910371695.png
Png, 1.86 KB, 300×20
edit Find source with google Find source with iqdb
1487910371695.png

>>47277
А саму картинку забыл :|
>> No.47600 Reply
File: 1495093143637.jpeg
Jpeg, 608.20 KB, 800×1198 - Click the image to expand
edit Find source with google Find source with iqdb
1495093143637.jpeg
Как сократить кусок этого говнокода? https://ideone.com/6XMfx5
>> No.47603 Reply
>>47600
Сделать условие в if через цикл
>> No.47604 Reply
>>47603
Это как? Я вот так переделал, но все равно этот if не нравится. http://ideone.com/dyLv6K
>> No.47605 Reply
>>47604
Для начала давай попробуем его в более удобночитаемом виде записать
if (
(
list[i][j].Text != String.Empty &&
list[i + 1][j].Text != String.Empty &&
list[i + 2][j].Text != String.Empty &&
list[i + 3][j].Text != String.Empty &&
list[i + 4][j].Text != String.Empty
) ||
(
list[i][j].Text != String.Empty &&
list[i][j + 1].Text != String.Empty &&
list[i][j + 2].Text != String.Empty &&
list[i][j + 3].Text != String.Empty &&
list[i][j + 4].Text != String.Empty
) ||
(
list[i][j].Text != String.Empty &&
list[i + 1][j + 1].Text != String.Empty &&
list[i + 2][j + 2].Text != String.Empty &&
list[i + 3][j + 3].Text != String.Empty &&
list[i + 4][j + 4].Text != String.Empty
) ||
(
list[i][j].Text != String.Empty &&
list[i + 1][j - 1].Text != String.Empty &&
list[i + 2][j - 2].Text != String.Empty &&
list[i + 3][j - 3].Text != String.Empty &&
list[i + 4][j - 4].Text != String.Empty
)
)
И тут сразу видно, что условие `list[i][j].Text != String.Empty` повторяется аж 4 раза. Это можно упростить.

Далее, можно сделать цикл for который бы считал от 0 до 4 и сравнивал... Ну, разве не очевидно?
>> No.47607 Reply
>>47605
Так что ли?
for (int k = 0; k < 4; k++)
{
if (list[i + k][j].Text != String.Empty ||
list[i][j + k].Text != String.Empty ||
list[i + k][j + k].Text != String.Empty ||
list[i + k][j - k].Text != String.Empty)
)
...
}
Хотя не, не так. Анончик, ну помоги, меня уже тошнит целый месяц смотреть на это.
>> No.47608 Reply
Привет дотнет-анон. Снова я на связи. У меня депрессия. Знаю, что это не /рф, но все же прошу помочь. Ищу работу. Учу С-шарп давно и как мне кажется уже могу быть джуном. Понятное дело, что еще учить и учить. Но трабла в том, что никто даже не приглашает на собеседование. Я уже даже сконцентрировался на ASP core MVC и всем, что с ним связано, но все равно никто не интересуется. Читаю книгу по МВС Фримена, изучал МВС по нескольким видеокурсам. Учил первый ангуляр, сейчас учу второй...
В целом я понимаю в чем причина: я старпочти 30 лет и у меня нет профильного образования.экономист фу бля фу нахуй
Но неужели нет возможности найти хоть и херовенькую работу? Неужели всем нужны студенты с опытом работы, знающие дотнет на зубок?

Скажите хоть что-то хорошее, руки опускаются.
>> No.47609 Reply
>>47608
upwork.com
>> No.47610 Reply
>>47607
string ijText = list[i][j].Text;
String.IsNullOrEmpty(ijText);
>>47605
Плохо?
>> No.47611 Reply
>>47609
Спасиб, анон. Я думал про фриланс, но боюсь что по незнанке быстро испорчу себе репутацию и потом все пропало. Не подскажешь с чего лучше начать и каких глупостей лучше не делать?
>> No.47612 Reply
>>47611
Заполни профиль - скиллы, био, вся хуйня. Поставь низкий рейт для начала и лезь на нравящиеся проекты, ничего сложного там нет.
>> No.47614 Reply
File: tumblr_inline_mr2ng7x3IR1qz4rgp.gif
Gif, 592.85 KB, 500×281 - Click the image to expand
edit Find source with google Find source with iqdb
tumblr_inline_mr2ng7x3IR1qz4rgp.gif
Преподаватель тут дал 300 вопросов теории, из них на 16 не могу найти ответы. http://telegra.ph/S-05-21 вот ссылочка

Пример вопроса:
Ключевое слово this
a) Описывает виртуальную функцию
b) Верных ответов нет
c) Требует предварительного объявления
d) Объявляет указатель на базовый класс
e) Не требует объявлений

Анон, пожалуйста, помоги, всего 16 штук. Завтра утром уже сдавать надо экзамен.
>> No.47620 Reply
>>47614
LOL. Ты хоть что-то учил?
>> No.47623 Reply
File: 577089_original.jpg
Jpg, 282.78 KB, 1500×925 - Click the image to expand
edit Find source with google Find source with iqdb
577089_original.jpg
Привет, Анон.

Моя задача — сделать программу для общения с железкой через последовательный порт. Платформа — C#, четвертая версия (это постановка задачи, а не прихоть).

Я посылаю сообщения в объект serialPort, у которого есть обработчик события "что-то пришло" и член класса, содержащий число готовых к считыванию байт.

Диалог у между ПК и железкой не очень простой: сообщений много, присутствуют ветвления и обработка ошибок, то есть, не хотелось бы раскидывать код по множеству функций, сделав всё в одном месте.

Можно было бы сделать это с помощью async и await, но это для чуть более поздних версий дотнета, в четверке их нет.
Что можешь посоветовать?
>> No.47629 Reply
>>47623
async & await это же вроде всего лишь синтаксический сахар. И без них можна справиться.
>> No.47691 Reply
Народ, может кто сможет подсказать?
Есть производная форма в VS 15 на C#.
Но внутри производной формы я не могу изменить ни один элемент, который создавался наследованием из родительской. Хоть и в родительской форме я ставил модификатор Public.
Что за фигня такая?
>> No.47695 Reply
Что, НАСТОЛЬКО дохлый раздел?
>> No.47696 Reply
>>47695
Ну ещё дело в том, что вопрос геморойный. Мало инфы, надо разбираться, и т.д.
>> No.47697 Reply
>>47696
Могу пояснить.
Visual Studio 2015 Community Edition.
Проект на Windows Forms.
На базовой форме имеется менюшка с выбором действий.
По нажатию на кнопку - открывается производная форма, заимствующая основные элементы из родительской формы. Там я программно изменяю инфу, которая выводится.
Но после выполнения вычислений - мне надо изменить элементы, которые были заимствованы от родителя. Но они стоят в локе и я не могу открыть доступ на переход к другим формам, отключить и включить на форме нужные кнопки в меню, ибо они заимствованы из менюшки главной формы.
>> No.47698 Reply
>>47696
А если правильно поставить вопрос, то на стаке будет ответ...
>> No.47699 Reply
>>47697
А попрятать/сделать неактивными не вариант?
>> No.47701 Reply
>>47698
Пробовал разные вариации на русском и английском. Был ответ, но он тупо не сработал, ибо я уже ставил компоненты в родительской форме с допуском и "Protected", и"Public".
>>47699
В смысле? Я унаследовал элементы управления и панель для отрисовки графики. Родительскую панель скрываю, работаю с производной от неё. Работаю с ней, скрываю, работаю со следующей производной от основной.
>> No.47794 Reply
Няши, кто знает что нужно сделать, чтобы делегат закончил свою работу когда один из его методов вызвал исключение? Ответ не обязателен, скажите где искать.
>> No.48367 Reply
Где можно почитать про асп.нет'овский ViewState - приемы применения, сериализация, всякие сопутствующие параметры. Интересуют именно подробности и кишки, а не хауту и рецепты для нубов.
>> No.48443 Reply
File: 1501177088323.png
Png, 8.14 KB, 376×260 - Click the image to expand
edit Find source with google Find source with iqdb
1501177088323.png
Аноны , как повторно использовать описанные мной классы в других програмах-(соурсфайлах? они вообще есть в шарпе или там все в одном текстешнике пишется?). Ну что то вроде include из С , ну чтобы я онисал мои класы в отдельном файлике а потом подключал там где они нужны ? есть такое ? куда копать ?
>> No.48444 Reply
>>48443
Using.
>> No.48445 Reply
>> No.48451 Reply
File: large_p19d7nh1hm1i37tnuim11ebqo5c1.jpg
Jpg, 94.29 KB, 604×512 - Click the image to expand
edit Find source with google Find source with iqdb
large_p19d7nh1hm1i37tnuim11ebqo5c1.jpg
АаааааАААААААААааААА!!!! Я ненавижу этот гребаный C# с его гребаными дот нет компиляторами и гребаный майкрософтвввввыфв который ска не может блять сделать все ска по путю хоть раз в жизни чтобы бл не приходилось ска все допиливать или идти нахуй, качать 13 гигов блять 13 гигов утилиток чтобы что сука может быть в этих 13 гигах, этот выебаный мсдн который блять ска ну нехуя не полезеннн ааааа, этот кребанвыа фываолр блять вижуал студия которая жрет ска ресов ввв, у меня игры меньше ресов ска жрут , да что за гавно. Фууххх. Я извеняюсь за то что мог когото оскорбить , обидит или просто показался неприятен за вышенаписанное , но наболело , это блин 3 дня просто боли, ну вот вродк полехче стало , так а теперь вопрос, я компилирую DLL билиотеку через csc, в ней 1 буличный класс с 2мя публичными методами, компилируется без ошибок, но в DLL отсутсвует таблица експорта. Я потом компилирую ехе приложение этим же csc с добавление в /r:MyProjectLibrary.dll той самой библиотекой которую компилировал до этого , в exe приложении я делаю DLLIMPORT методов из DLL библиотеки , компилируется без ошибок, но при запуске срабатывает исключение и пишет что не может быть найдна точка входа в импортируемый из DLL метода . Как адекватно компилировать DLL C# библиотеки на csc и добавлять их в другие програмы ?
>> No.48452 Reply
>>48451
исходники

программа
https://pastebin.com/jsuVDi2W

библиотека
https://pastebin.com/CTiM2n3Y
>> No.48453 Reply
File: DOfsGRiWkAANBfD.jpg_large.jpg
Jpg, 73.92 KB, 1188×656 - Click the image to expand
edit Find source with google Find source with iqdb
DOfsGRiWkAANBfD.jpg_large.jpg
>>48452
аа забейте ,я уже разобрался.
Вот этот парнишка рассказал https://www.youtube.com/watch?v=sbg993POJ6Y
, мдяя 1день ебался с этой хренью, и тут за 5 минут все нашлось , сказачное дцп.
Теперь я совсем не понимаю правдв как в этом C# работает позднее связываие , если у DLL пустой экспорт , и у EXE нет в зависимостях этого DLL, загадка.

вот исходники если кому интересно, там просто нужно было юзнуть наймспаис , мдяяяя.
программа
https://pastebin.com/GeQYHZSu
библиотека
https://pastebin.com/u0ck628Y
>> No.48463 Reply
File: toptal-blog-image-1460406405672-52ec53e6624f51828d.jpg
Jpg, 80.78 KB, 640×640 - Click the image to expand
edit Find source with google Find source with iqdb
toptal-blog-image-1460406405672-52ec53e6624f51828d.jpg
Случилось нечто странное.
Запустил релизную версию своей программы, которая должна была обработать тысячи файлов на жестком диске.
Работает себе спокойно, как, внезапно, окно блокируется и выходит системное сообщение "произошел сбой" или типа того.
Там ещё предлагается закрыть/отладить.
В описании было IOException.

Что может приводить к такому?
Выглядит как необработанное исключение.
Вот только программа была в блоке try/catch и ловила все исключения.
>> No.48464 Reply
>>48463
> Вот только программа была в блоке try/catch и ловила все исключения.
Однопоточная софтина? Если нет, то в других потоках обертку try/catch сделал?
> релизную версию
Оптимизация мне в сборку!
В дебажной версии все переменные инициализируются нулями для плюсов это так, для шарпа, вроде, тоже, в релизной может где-то забыл проинициализировать переменную и вот итог смотри варнинги при сборке.
> IOException
Это, вроде как, "я не мочь прочитать/записать в файл".
>> No.48466 Reply
>>48464
Однопоточная. Всё проинициализировано и работает.
Поломалось на крохотном куске кода, который скармливает файл библиотеке, обновляет некоторые метаданные и по новой их читает. И всё это в try/catch.
По сути, что-то пошло не так, когда шла обработка 6000+ файла.

Причем следующий за ними finally так и не был выполнен, как, скорее всего, и catch.
>> No.48467 Reply
>>48464
А всё, разобрался, добавив нормальный вывод содержимого необработанных исключений.

Я забыл ловить исключения при копировании файлов для бекапа.
>> No.48472 Reply
File: slide_3.jpg
Jpg, 97.47 KB, 960×720 - Click the image to expand
edit Find source with google Find source with iqdb
slide_3.jpg
Помогите советом.
Решил распараллелить выполнение куска кода и теперь ломаю голову, как правильно обработать исключения.
Этот код: бекапит файл из списка -> обрабатывает файл -> удаляет бекап, если с файлом всё в порядке -> берёт следующий файл.

Проблема в том, что, во избежание лишних жертв, при завершении приложения из-за непредвиденного исключения (или рук пользователя) каждый поток должен завершить текущую итерацию.

Пришел в голову такой вариант:
Ловлю Exception (после предусмотренных исключений) и сигнализирую об этом через статическую переменную, которую проверяет каждый поток в конце итерации и, в случае непредвиденного выходит из рабочего цикла и завершается.

Как думаете, адекватное решение?
Или можно сделать лучше?
>> No.48473 Reply
>>48472
Можно и так, главное не забудь мутексы понапихать.

Вариант Б:
Первым делом создаешь список всех файлов которые надо обработать.
Потом каждый поток безопасно достает по одному файлу и обрабатывает его.
Если где-то эксепшон - список чистится, другие потоки не могут получить файл и завершаются.

> бекапит файл из списка -> обрабатывает файл -> удаляет бекап
Чтение + запись + в несколько потоков. Не слишком ли плохо винту может быть от этого?
>> No.48474 Reply
>>48473
Пожалуй так и сделаю.

> список чистится
Сначала подумал, что мой вариант как-то интуитивнее, а потом понял, что так будет меньше кода + можно пояснить комментарием.
Спасибо.

> Не слишком ли плохо винту может быть от этого?
Там больше нагрузки на процессор, на самом деле.
Попробую затестить с (количество_ядер) потоков.
Вроде, должно быть в самый раз.
>> No.48497 Reply
Привет. Решил поизучать это ваше программирование. Так вот, для развлечения, решил, сделать змейку на разных языках.
Так вот, оказывается что в коносле шарпа нельзя отлавливать нажатия клавишивернее, как я понял, только клавишу отмены можно отловить. Так вот, можно ли самому дописать нужные события(keyDown, keyUp, KeyPress) или не возиться с консолью и сделать на формах, лол? Или как иначе реализовать консольный ввод, чтобы он не ждал пока я нажму клавишу а выполнял игровой цикл?
>> No.48511 Reply
File: Screenshot_2.png
Png, 42.58 KB, 1131×534 - Click the image to expand
edit Find source with google Find source with iqdb
Screenshot_2.png
Помогите новичку в работе с файлами.
Мне нужно внутри цикла каждый раз перезаписывать файл в изолированном хранилище (для временного хранения).

Обнаружил, что мне нужно каждый раз по новой открывать IsolatedStorageFileStream, чтобы перезаписать файл, иначе при повторной записи ловлю исключение о том, что не имею права на запись.

Мне кажется, что лучше держать IsolatedStorageFileStream открытым в течение всего цикла, но возможно ли так сделать (и стоит ли)?
>> No.48512 Reply
>>48511
Так это ж глобальная переменная. Думаю, что не стоит. Кеш файловой системы поможет.
>> No.48513 Reply
>>48512
> Кеш файловой системы
А что для этого используется? System.Runtime.Caching?
>> No.48514 Reply
>>48513
ЛОЛШТО.
Кеш — часть операцiонной системы.
>> No.48516 Reply
>>48514
Ок, разберусь.
Спасибо.
>> No.48581 Reply
Как в Asp.Net MVC добавить генерацию ID в HTML?
Например, у меня в базе данных есть книги с ID, мне бы хотелось, чтобы при генерации HTML у div'а, который служит для представления информации о книге, в id было что-то типа "Book"+ID, где это ID берется из БД.
Например:
<div id="Book1"></div>
<div id="Book2"></div>
...
<div id="Book999"></div>
>> No.48598 Reply
File: 1471815666195025723.jpg
Jpg, 47.98 KB, 517×517 - Click the image to expand
edit Find source with google Find source with iqdb
1471815666195025723.jpg
>> No.48745 Reply
File: 785px-Inheritance.svg.png
Png, 10.33 KB, 785×487 - Click the image to expand
edit Find source with google Find source with iqdb
785px-Inheritance.svg.png
Имеется абстрактный класс и 4 производных от него.
Всё вместе представляет собой 60 строчек кода.
По-моему, вся эта кучка классов удобнее для восприятия в виде одного файла.
Стоит ли выносить каждый производный класс в отдельный файл?
Даже не представляю, как гуглить подобные стандарты.
>> No.48746 Reply
>>48745
Стоит.
Классы имеют привычку разрастаться.
>> No.48748 Reply
>>48746
Спасибо.
Учту.
>> No.48816 Reply
Що про эф сярп сказать можете, комрады?
>> No.48820 Reply
File: shirai-kuroko.jpg
Jpg, 204.48 KB, 1050×1400 - Click the image to expand
edit Find source with google Find source with iqdb
shirai-kuroko.jpg
>>48816
Вакансий море, в отрасли — жуткий кадровый голод, выбирайте эф сярп, комрады.
>> No.49071 Reply
File: konachan-com-63238-sample.jpg
Jpg, 157.81 KB, 1800×1013 - Click the image to expand
edit Find source with google Find source with iqdb
konachan-com-63238-sample.jpg
Расскажите про .net core.
Я правильно понимаю, что можно сделать что-то под шиндовс на шарпе, а потом отпилить гуи, сконпелять под эту кору и запускать на линупс сервере?
Насколько трудоемка установка этих зависимостей и смогу ли я юзать все доступные стандартные либы или кастомные?
>> No.49073 Reply
>>49071
> Я правильно понимаю, что можно сделать что-то под шиндовс на шарпе, а потом отпилить гуи, сконпелять под эту кору и запускать на линупс сервере?
Так ведь это можно было и до .NET Core делать, через Mono. Кстати, если использовать Mono и если гуи написано на Windows Forms, его можно не отпиливать, в Mono нет поддержки WPF, но Windows Forms поддерживается. А в .NET Core нет ни того, ни другого, но можно использовать например Avalonia, Electron.NET, ASP.NET Core или какие-нибудь привязки к Qt например
>> No.49103 Reply
File: 91180856.jpg
Jpg, 11.42 KB, 165×232
edit Find source with google Find source with iqdb
91180856.jpg
File: 1386054315513.gif
Gif, 403.03 KB, 408×462
edit Find source with google Find source with iqdb
1386054315513.gif

Нет у кого этой книги в скане? https://www.piter.com/product/otladka-prilozheniy-dlya-microsoft-net-master-klass
У меня была бумажная много лет назад, а потом вроде цветная дежавюха, но теперь не найти.
В гуглях встречается только какая-то предыдущая версия, это не то.
>> No.49108 Reply
>> No.49109 Reply
>>49108
Это старая, упомянутая в посте.
>> No.49900 Reply
>>27510
Доброкодер, что скажешь о новом .NET Core? Зачем они отделили ядро от стандартной библиотеки? Модно или практично? Сыро или стабильно? Дипломный проект или коммершиал?
>> No.49910 Reply
>>49900
> новом .NET Core
Ты о коре в целом или какой-то последней версии (хотя это теперь снова "просто" .Net 5)?
>> No.49911 Reply
Я вот побегал по собесам...
А есть ли тут синиоры-помидоры интервьюеры? Прособесите меня на... ну пусть будет синиорную позицию веб фулстек?
>> No.49912 Reply
File: 1381398671594.jpg
Jpg, 101.70 KB, 400×400 - Click the image to expand
edit Find source with google Find source with iqdb
1381398671594.jpg
>>49911
Ты делал тестовые задания. Никто с тобой и срать рядом не сядет, вот да.
>> No.49913 Reply
>>49912
Чевокаво?
К чему ты это крякнул?
>> No.49915 Reply
File: kirpich_127384164...
Jpg, 41.27 KB, 600×327
edit Find source with google Find source with iqdb
kirpich_127384164_orig_.jpg
File: 1611058957400.png
Png, 1.24 KB, 300×20
edit Find source with google Find source with iqdb
1611058957400.png

>>49913
Вон из профессии.
>> No.49916 Reply
>>49915
Почему?
>> No.49917 Reply
>>49912
Как ты определил что он делал тестовые задания?
>> No.50073 Reply
>>27510
> Microsoft - это тысяча возможностей и только один правильный способ их использовать. Шаг влево или вправо и все это богатство функционала уже не работает.
Я несколько лет разбирался с ASP.NET MVC и первыми версиями .NET Core, пока не понял, что у Майкрософт все как всегда. В документации набор классов и скудный текст описания в стиле это функция, это параметр. Примеры написаны для того, что всё нагромождение функционала работает только так и никак больше. Все это приправлено запутывающими марвеловскими названиями технологий и множеством посвященных компаний-партнеров на валютном подсосе.
>> No.50078 Reply
>>27510
В корпоративной 7ке нашел Unix Subsystem For Windows, который как обычно дропнули и на его обломках сделали WSL.
Если приглядеться то это далеко не первый случай хорошо забытого старого.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]