• В чём секрет конкурентоспособности или чего хотят потребители/пользователи?

    Jump
    @Jump
    Системный администратор со стажем.
    В мире тысячи всяких проектов, начиная от откровенного шлака, до очень приличных.
    Но я их не знаю. И многие другие их не знают.
    И желания искать нет, ибо хватает того что есть.

    Думаете все игроки неделями сидят в сети и ищут ваш проект?
    Вот придете к ним, убедите что вашим проектом стоит пользоваться, и тогда, возможно, некоторые немного заинтересуются.
    Ответ написан
    Комментировать
  • Как из MainForm.cs вынести DllImport в другой файл?

    @Sumor
    Ну во-первых, вы можете создать отдельный статический класс и там всё прописать.
    А во-вторых, если вы всё-таки хотите, чтобы внешние функции всё-таки были в классе MainForm, то не зря в объявлении класса указано слово partial. Оно говорит, что вы можете описывать класс в нескольких файлах. Для этого можно создать новый файл, начать его также: public partial class MainForm, и в него вынести внешние функции.
    Ответ написан
    1 комментарий
  • Нужно ли программисту c#/c++ знание математики?

    @jackroll
    Сверхразум
    Даже если я скажу, что математика нужна, вы не будете ею заниматься.
    Ответ написан
    2 комментария
  • Как преобразовать строку в C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    string data = "FF CA 00 00 00";
    string result = "0x" + String.Join(",0x", data.Split());
    Console.WriteLine(result);

    Посмотреть пример в .NET Fiddle.

    Еще можно регулярные выражения задействовать, но через обычный Split и Join проще всего.
    Ответ написан
    1 комментарий
  • Как засунуть n - мерный массив в аргумент функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ну вот, опять знатоки советуют добавить звёздочек и указателей на указатели ):

    Все примеры дальше передают в функцию трёхмерный массив и присваивают v значение его элемента p[1][2][3].

    Если функция принимает массив фиксированных размерностей, то прямо так можно и написать:
    int f(int p[][20][30])
    {
        int i = 1, j = 2, k = 3;
        int v = p[i][j][k];
    }
    ...
    int p[10][20][30];
    f(p);

    Первую размерность (самую старшую) можно опустить.

    Если же нет, то перед вами следующий выбор:

    - у вас старый стандарт С (до С99) -- передавайте указатель на самый первый элемент и значения размерностей. Внутри функции пересчитывайте набор индексов многомерного массива в линейный индекс:
    int f(int *p, int n2, int n3) // p[][n2][n3]
    {
        int i = 1, j= 2, k = 3;
        int v = p[(((i * n2) + j) * n3) + k]; // v = p[i][j][k];
    }
    ...
    int p[10][20][30];
    f(&p[0][0][0], 20, 30);


    - у вас С99 или новее: воспользуйтесь поддержкой языка:
    int f(int n2, int n3, int p[][n2][n3])
    {
        int i = 1, j = 2, k = 3;
        int v = p[i][j][k];
    }
    ...
    int p[10][20][30];
    f(20, 30, p);
    Ответ написан
    5 комментариев
  • Как засунуть n - мерный массив в аргумент функции?

    Как-то так:

    int function(int [2][3][4][5]); // возможно не все размерности нужно указывать, точно не помню
    или
    int function(int ******); // количество звёздочек определяет цену коньяка количество измерений массива

    Вообще, больше двух звёздочек нежелательно, можно запутаться.
    Ответ написан
    Комментировать
  • Блоговедение или программирование?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    Если выбор стоит между "наполнять Интернет говностатьями" и "наполнять Интернет говнокодом", мой вам совет -- займитесь-ка лучше инвестициями. Это такое дело, где результат виден на лице. Или реально что-то сделаете, или профукаете все полимеры и успокоитесь.
    Ответ написан
    Комментировать
  • Блоговедение или программирование?

    @Evsign
    Я понимаю, что "нельзя сравнивать"

    Вот и не сравнивайте.

    Я вот тоже думаю... Подскажите что лучше, открыть магазин колбасы или построить завод по её производству?

    Ответ: делайте то, что нравится. А впрочем, лучше делайте то что нравится, но не программируйте. Лучше и дальше оставайтесь потребителем интеллектуальной собственности.
    Ответ написан
    3 комментария
  • Как уведомить коллекцию об изменениях в UI элементе?

    @mayorovp
    Попробуйте просто присвоить коллекцию в DataSource. Если не получится - смотрите класс BindingList<>
    Ответ написан
  • Зачем нужен ООП?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    Не везде и не всегда нужны классы. Вы верно заметили. НО! Прежде чем принять решение о том, что в конкретном месте кода класс только вредит, нужен профайлер или другие инструменты позволяющие принять такое решение. К примеру в Python словарь значительно выигрывает по скорости чем класс с методами.

    Фишка ООП в том, что человек уже думает классами! Поднимаем голову к небу и видим "Птица летит", другими словами "У объекта "Птица" был вызван метод "Лететь"", но мы так сложно не думаем и для нас это просто "Летящая птица".
    Вспомните детство и моменты когда родители посылали за хлебом. Как это происходило? Возможно это было так: "Объект сын в твое поле ложу объект "Задача" с полями "хлеб", "комод" и "100 рублей", в поле "результат" ложу "Хлеб". Объект сын вызываю метод "Купить"". Не думаю что это было так, мне кажется это было так: "Сын возьми 100 рублей и купи хлеба". В неявном виде обратились к объекту "Сын", вызвали метод "Взять" и передали аргумент "100 рублей" и ожидаем результат вызова в виде значения "Хлеб".

    Попробуйте процедурный подход переложить в нашу естественную жизнь? ;) Попробуйте так общаться, процедурно. Это очень сложно. Потому что человек привык думать объектами! Самолет, кошка, лошадь, дерево и др. Для нас вроде есть концепция "кошка", но конкретная кошка "Масяня" сильно отличается от другой конкретной кошки "Машка".

    Изучая задачу мы прежде всего должны задать вопрос : "Что является условием завершения задачи?" и вторым не менее важным "Что используется при достижении результата?". Вот это "что используется" как правило и есть объекты.
    Ответ написан
    8 комментариев
  • Клиент много задает вопросов, как быть?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Если эти вопросы не касаются вашей половой жизни, а относятся к работе, то стоит на них отвечать.
    Разжевывая все, что бы клиенту было понятно. Или говорить так, что бы клиент интуитивно понимал, что вы правы и так надо.
    Ответ написан
    Комментировать
  • Клиент много задает вопросов, как быть?

    opium
    @opium
    Просто люблю качественно работать
    Отвечать на них.
    Ответ написан
    Комментировать
  • Клиент много задает вопросов, как быть?

    newross
    @newross
    Product owner
    Отвечать на эти вопросы, если это занимает немного времени.
    Хуже когда клиент не задает вопросов. Скорее всего он начнет задавать их после окончания работы и перед оплатой.
    Ответ написан
    Комментировать
  • Как правильно сравнить массивы и оценить их схожесть?

    nowm
    @nowm
    Если два массива имеют одинаковую длину, можно просто двигать по кругу первый массив и сравнивать его элементы с элементами второго. Потом можно просто выбрать максимальное совпадение и перегнать в проценты. Примерно так:

    $arr1 = [1,2,3,4,5,7,2,8];
    $arr2 = [2,9,5,5,7,2,8,1];
    
    $len = count($arr1);
    $conformity = [];
    
    for($i = 0; $i < $len; $i++) {
    	/**
    	 * $temp содержит нули в позициях, где числа в двух массивах 
    	 * по одному и тому же индексу не равны. Единицы — там, где равны.
    	 */
    	$temp = array_map(function($x,$y){return intval($x==$y);}, $arr1, $arr2);
    	
    	// Элементы полученного массива суммируются и добавляются в отчётный массив
    	$conformity[] = array_sum($temp);
    	
    	// Массив прокручивается на одну позицию
    	$arr1[] = array_shift($arr1);
    }
    
    //С помощью max($conformity) выбирается максимальное совпадение элементов
    echo sprintf("Max conformity is %s%%\n", number_format(100*(max($conformity)/$len), 2));


    Это конкретно для ситуации, когда длина «колец» одинаковая.

    Update: ещё один вариант:

    $arr1 = [1,2,3,4,5,7,2,8];
    $arr2 = [2,9,5,5,7,2,8,1];
    
    function conformity($arr1, $arr2) {
    	$len = count($arr1);
    	$max = $curr = 0;
    	
    	for($i = 0; $i < $len; $i++) {
    		array_map(function($x,$y)use(&$curr){$curr += intval($x==$y);}, $arr1, $arr2);
    		
    		if($curr == $len) {
    			return 100;
    		}
    
    		$max = $max > $curr ? $max : $curr;
    		$curr = 0;
    		
    		$arr1[] = array_shift($arr1);
    	}
    	
    	return 100*($max/$len);
    };
    
    echo sprintf("Max conformity is %s%%\n", number_format(conformity($arr1, $arr2), 2));
    Ответ написан
    6 комментариев
  • На что вы зря потратили время в изучении программирования и веб-разработки в целом?

    "Кому это кроме меня нужно"
    если это нужно тебе - с чего тебя будет волновать кто-то еще?

    любой опыт идет в копилку, ничего лишнего не бывает.
    Ответ написан
    3 комментария
  • Никак не могу разобраться с Json в c#?

    atri24
    @atri24
    .net developer
    1) С помощью Newtonsoft .Json переводишь json в xml документ, например XDocument
    2) Потом из xml с помощью XPath добираешься до нужного элемента

    Предположим, что в txt1.txt лежит твой json
    var str1 = File.ReadAllText(@"Data\txt1.txt");
    var xdoc = JsonConvert.DeserializeXNode(str1);
    
    var title = xdoc.XPathSelectElements("response/items/title").Select(x => x.Value).FirstOrDefault();
    var url = xdoc.XPathSelectElements("response/items/url").Select(x => x.Value).FirstOrDefault();

    А вообще лучше создать класс, в который можно десериализовать json. И потом десериализуем в него с помощью Newtonsoft .Json
    Ответ написан
    Комментировать
  • Как лучше преобразовать фабричный метод?

    @mayorovp
    Правильный способ - выкинуть обязательный запуск игры. Например, добавив именованный параметр со значением по умолчанию.

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

    @mayorovp
    Начну с ответа на ответ выше. Remoting - это не очень-то и красивое решение, его абстракции всюду текут. "Расшаривание" объекта по сети приводит к сложности с определением времени жизни объекта, а простота вызовов методов соблазняет делать кучу мелких запросов вместо одного крупного - что неизбежно приведет к тормозам.

    WCF - идеальное решение. Оно куда проще, чем правильная работа с сокетами - и не страдает недостатками Remoting.

    Транспорт в этой задаче лучше использовать NetTcp - на нем проще реализуется двусторонняя связь. Соединение с клиентом можно поддерживать средствами ReliableSession - тут только выставьте правильные тайм-ауты, а то результат будет странным. Так, тайм-аут на чтение тут лучше поставить вообще бесконечным, а время жизни сессии, напротив, небольшим.
    Ответ написан
    3 комментария
  • Нельзя изменять данные в структуре на прямую?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Предполагаю, что поле Company в объекте Im.Work описано тоже как свойство:
    public Company Company{ get; set; }

    В этом случае, когда вы пишете Im.Work.Company.CompanyName="Name", вызывается метод get для Company, возвращает копию структуры (потому что вернуть ссылку не может), и дальше вы пытаетесь в этой копии, никуда её не положив, поменять одно из полей. Оригинал от этого точно не изменится, и, по-видимому, компилятор не даёт выполнить заведомо бессмысленное действие (изменить объект, который сейчас будет уничтожен).
    Ответ написан
    8 комментариев
  • Есть ли какой то шаблонизатор для C#?

    @mayorovp
    Нет, Razor Engine сюда не подойдет, потому что оно заточено под вывод html. Но вы можете использовать T4 Text Templates
    Ответ написан
    5 комментариев