Задать вопрос
  • Как на Selenium заполняя поле определить прошло ли верификацию?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    driver.wait(function() {
        return driver.findElement(locator).isDisplayed();
    }, timeout);


    Где locator - это критерий поиска, в вашем случае, по CSS-классу.
    Ответ написан
  • Есть ли парсер для header файлов(С++)?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Сейчас популярный подход - собирать сами типы уже с метаданными с помощью препроцессинга (Qt с его плагинами) или шаблонов (грибные фантазии, вроде этой). Кое-что можно узнать из type traits современных стандартов.

    Но как-то что-то подгружать в рантайме заведомо неизвестное (не обладающее известным интерфейсом), особенно с виртуальными функциями - это вряд ли.
    Ответ написан
    Комментировать
  • Qt Widgets: как обратить внимание на элемент управления?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Можно банально задать бордер через QSS:

    pWgt->setStyleSheet("border: 1px solid red");
    Ответ написан
    4 комментария
  • Как создать массив структур с n длинной?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Более того, у вас необъявленная переменная i =)

    Допустим, вы ошиблись, выпиливая лишний код, пусть эта переменная вычисляется у вас в рантайме (т.е. она не являтся константой). Внутри метода вы пытаетесь создать массив на стеке. Для этого компилятору важно знать заранее (в compile-time), какой буфер там резервировать, т.е. необходима константа или константное выражение, о чем и сказано в сообщении об ошибке.
    А как же C#?
    Но в С# же это было не обязательно, что же нам ответит на это Рихтер?

    Базовым для всех массивов является абстрактный класс System.Array, производный от System.Object. Значит, массивы всегда относятся к ссылочному типу и размещаются в управляемой куче, а переменная в приложении содержит не элементы массива, а ссылку на массив.


    В вашем же случае нужна конструкция вроде:

    array< PARAM_BYNAME_DATA^ >^ rgprmbd 
                       = gcnew array< PARAM_BYNAME_DATA^ >(i);
    Ответ написан
    Комментировать
  • C# как первый язык программирования. Как выстроить план изучения?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Я Студент.

    Студент какого учебного заведения?

    Шилдта в руки и вперед!

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

    А какой результат вам нужен? Хэлловорд сможете написать уже через час, а нормально что-то писать начать средний человек может через полгода-год.
    5-6 часов в день - это очень дофига для изучения. Я бы даже сказал, этого слишком много, ибо поглотить информации можно больше, чем "переварить", в голове образуется стылая плотная масса необработаной информации, которая с разных сторон торчит ключевыми словами. Оптимально - это 3-4 часа (2 на теорию + 1 на эксперименты с кодом) + здоровый сон в 7 часов.

    Во-первых, вы куда-то торопитесь? Не стоит, ничего гениального в ближайший год из-под пера не выйдет, это нормально. Сначала учитесь худо-бедно что-то примитивное писать, параллельно изучая API FCL, потом на этой базе делать маленькие тулы. Затем беретесь за серьезную литературу, вроде Рихтера и познаете суть CLR. Знания C/C++ здесь могли бы пригодиться, если вам их будут преподавать. Затем "Банду четырех" и учитесь примитивы собирать в кучу грамотно, используя паттерны разработки. Параллельно осваиваете кучу новых языков и технологий, экспериментируете (без этого есть риск быстро выгореть и забросить программирование). Полезно устроиться и где-то поработать некоторое время, попилить опенсорс. Ментор - это здорово, но не обязательно. Остерегайтесь платных курсов, любите книжки.

    И, главное, если действительно хотите научиться хорошо программировать, тогда не ограничивайте себя Unity (где C# - это язык скриптов, наравне с JavaScript), оттачивайте знания, копайте глубже фреймворков, интересуйтесь IT, учитесь решать реальные проблемы. Ведь это не самая плохая профессия, которая сможет сделать вам будущее.
    Ответ написан
    1 комментарий
  • Asp Net MVC, гд лучше размещать запросы к БД?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Обычно приложения делят на три слоя:
    • Data Access Layer
    • Business Logic (Domain models)
    • UI (Web).


    BL независим, DAL зависит от BL, UI зависит от DAL и BL (ибо там располагается интерфейсы биндятся на реальные классы).

    Если мы рассматриваем классическую схему доступа к данным через репозитории, то:

    BL содержит: доменные модели, интерфейсы для репозиториев, сервисы (интерфейсы и реализации, которые работают с репозиториями).
    DAL содержит: реализации интерфейсов репозиториев (из BL), т.е. работу с DB, DbContext (от EF) и прочую конкретику о том, откуда и каким образом извлекаются данные.
    UI (для ASP.NET MVC) содержит: собственно веб-проект с котроллерами *Controller.cs (Controllers), вьюшками *.cshtml (Views), вью-модели *.cs (Models, те специфические модели, которыми типизируются вьюхи, они могут отличаться от доменных (маппиться с них в контроллере), например, содержать объект с данными пагинации).

    Также UI сожержит корень внедрения зависимостей, где связываются между собой интерфейсы и их реализации, например, интерфейсы репозиториев из BL и реализации (заточенные на работу с БД) из DAL.

    Пример реализации.

    ЗЫ Азы такой архитектуры применительно к ASP.NET MVC есть в замечательной книжке Фримана.
    Ответ написан
  • Как мержить хотфикс в такой ситуации?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    При мерже хотфикса будет конфликт, который будет разуливаться человеком, он сравнит коммиты и переименует.

    А хорошая практика - чаще подмерживать общий develop в фичебранчи, чтобы такие штуки всплывали как можно скорее.
    Ответ написан
    8 комментариев
  • Как использовать переменные по запросу?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Вы обращаетесь к свойству gt в тот момент, когда передаете его в Foo, где его значение копируется в параметр int x.
    Метод Foo не знает, откуда берется значение, ведь оно приходит через формальный параметр. Если же вы будете обращаться к свойству напрямую, то все будет так, как вы ожидаете:

    static void Foo(int z/*, int x*/)
    {
        Console.WriteLine("метод");
        if (z >= 10)
        {
            Console.WriteLine("переменная больше 10");
        }
        else
        {
            Console.WriteLine("переменная = " + gt);//x);
        }
    }
    Ответ написан
  • Как начать тестирование сайта?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Selenium - на базе обычных юнит-тестов, с ассертами ("сколько пальцев видишь?", "на месте ли кнопка?"). Они медленные, поэтому гонять оптимально ночью, вместе с интеграционными (API, сложные сценарии с данными). Они интеграционные, поэтому покрывать нужно реальные сценарии, т.е. функциональные блоки. У нас, например, тестировщики пишут тест-кейсы (текст вида: "Пойди туда - получишь то."), а по ним программируются автотесты, т.е. точно так, как бы проверял человек. Неплохо бы помимо логов при падении делать скриншоты.
    Чем больше покрытие - тем лучше, хотя нужно как-то балансировать, чтобы не чинить их 50% времени от разработки новой фичи =)

    Юнит тесты гонять каждый коммит (в маленьком проекте можно руками перед коммитом, а в большом - силами CI после каждого коммита).
    Ответ написан
    5 комментариев
  • Java Exceptions. Что делать с большим количеством исключений?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    На разных логических уровнях можно (и нужно) делать re-throw более общих типов исключений (с ссылкой на оригинал внутри), если нет возможности их обработать на месте. Например, TooLongNameException и NegativePriceException где-то выше станут ModelValidationException, т.е. там вам достаточно знать, что модель кривая, вне зависимости от того, по какой причине это произошло.

    Может быть пример не самый удачный, ибо здесь наследование бы подошло. А вообще, большой список исключений - это косвенный признак того, что метод слишком много делает (S - SOLID).
    Ответ написан
    Комментировать
  • Какова судьба MFC и C++?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Важно понимать, что MFC - это тонкая ОО-обертка над WinAPI, которая оживает за счет виззардов и кодогенерации. Кастомность порой там дается слишком большими усилиями. Но если вашей целью является разработка несложных интерфейсов и тесная интеграция с системой - это неплохой выбор. Но серьезно готовиться и идти на рынок с этим, как с основным инструментом, вряд ли стоит.

    многие используют C# и Java.

    Java едва ли чаще используется для десктопа, чем MFC. А вот C# сейчас цветет бурным цветом. Хотя часто встречается тандем из бизнес-логики на C++ и интерфейса на С#.

    З.Ы. Поиск по сайтам с вакансиями и банальное сравнение количества вакансий для различных технологий скажут вам больше, чем юзеры тостера, которым либо повезло, либо не повезло столкнуться с этой потрясающей технологией от Microsoft.
    Ответ написан
    Комментировать
  • Как правильно называется данная компетенция (Кто это)?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    UX-дизайнер. Или просто дизайнер.
    Ответ написан
  • Как лучше называть переменные и функции?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Самое главное правило - чтобы в данном контексте сразу было понятно, что означает переменная. Чем ближе к английскому, тем лучше (порядок слов сохранять). Есть всего пару основных правил:
    - главное слово в названии - это существительное или прилагательное
    - булевые могут иметь префикс is_... (но не isnot_...)
    - артикли не использовать

    Не нужно дублировать смысл, который и так понятен из контекста. Если у нас, скажем, метод parse_html(), то внутри него вместо html_nodes можно писать просто nodes.
    Ответ написан
    1 комментарий
  • Каким образом приложение на С# для автотестов (Selenium) развернуть в интернете?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Зачем "размещать в интернете" тесты? Обычно тестами заведует CI, который лежит там, где пакеты собираются (с целью проверить, что очередной коммит ничего не сломал по "эффекту бабочки").

    Но, так или иначе, если сайт публичен, то размещаться тестовый проект может где угодно и представлять из себя что угодно, хоть консольное приложение (никакой ASP.NET вам не нужен, ибо Selenium WebDriver управляет браузером, а не самим приложением). Но чтобы автоматизировать инфраструктуру, удобнее пользоваться специальным тестовым типом проекта.
    Ответ написан
  • Какое направление лучше выбрать при изучении c#?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    1) С# или Visual C#?

    Где вы прочитали это? В природе бывает лишь C# и он описывается стандартами. Visual %LANG_NAME% обычно Microsoft называет свои версии Visual Studio, заточенные под конкретную технологию. Но язык все равно С#.

    2) Что такое платформа .NET Framework?

    Это как бы...фреймворк) То есть вся та среда, в которой исполняется ваша программа, включая виртуальную машину (CLI) и библиотеку стандартных классов (FCL). То есть скомпилировав свое приложение, вам его нужно этой среде передать и она гарантирует наличие всего необходимого, чтобы приложение выполнилось. Пишет о нем отлично местный гуру - Джефри Рихтер в "CLR via C#". Странно было бы, если учебники, скажем, по JavaScript вплотную рассматривали бы V8, правда?)

    3) Недавно прочитал про .NET CORE.

    Это альтернативная реализация .NET Framework. Оно иначе работает и FCL там построена иначе. Но C# там точно такой же, как и на "большом" фреймворке, так что начав учить его вы ничего не потеряете. А уж MS позаботится, чтобы их сопутствующие технологии тоже не сильно отличались (ASP.NET MVC от ASP.NET Core, EntityFramework от EntityFramework Core.

    Вывод: если вы только начинаете, то вам без разницы, хоть под Core, хоть под .NET Framework, язык там один и тот же, консольные приложения такие же. Просто некоторые классы переехали в отдельные сборки. С нуля же лезть в фреймворки (ASP.NET MVC/Core, WPF, EntityFramework (без знания ADO.NET)) - рановато, освойтесь с самим языком, базовыми библиотеками.
    Ответ написан
    2 комментария
  • Как избежать тормозов при срабатывании try catch?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Перед обращением вызывайте IDataRecord.IsDBNull (int) вместо проверки try-catch.
    Ответ написан
    2 комментария
  • Что ему не так?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Потому что \символ считается escape-последовательностью (как \t, \n, \a и прочие).
    Их надо либо каждый раз экранировать еще одним обратным слэшем, либо ставить символ @ перед литералом.
    Ответ написан
    Комментировать
  • Есть ли уроки по Selenium Web Driver ASP.NET MVC?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Недавно в это погружался)

    Ничего лучше этого не нашел. Но этого, официального референса и пары уже имеющихся тестов хватило, чтобы разобраться. На пару вечеров экспериментов.
    Ответ написан
    1 комментарий
  • C#: Как правильно прочитать и записать объекты в ArrayList?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    Не стоит использовать ArrayListбез весомой на то необходимости. Поэтому компилятор не смог вас предупредить, что ArrayListсостоит из ArrayList'ов, в котором строки (двумерный массив строк), а не просто строк.

    Вместо ArrayListнеобходимо использовать типизированный динамический массивList<string>.

    public void Click_OpenFile()
    {
        string fileName = form1.OpenFie();
    
        IList<string[]> aL = ParseFile(fileName);
    
        foreach (var line in aL)
        {
            // Снова собираем токены в строки
            MessageBox.Show(string.Join(" ", line));
        }
    }
    
    // Читаем файл и построчно парсим его
    private IList<string[]> ParseFile(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
        {
            throw new ArgumentNullException(nameof(fileName));
        }
        if (!File.Exists(fileName))
        {
            throw new ArgumentException($"There is no file {fileName}!");
        }
    
        string[] fileContent = File.ReadAllLines(result);
        var aL = new List<string[]>(fileContent.Length);
        foreach (var line in fileContent)
        {
            aL.Add(ParseString(line));
        }
        return aL;
    }
    
    // Разбиваем строки на токены
    private string[] ParseString(string s)
    {
        const char delimiter = '|';
        return s.Split(delimiter);
    }
    Ответ написан
    Комментировать
  • Как связываются ресурсы с кодом?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    • Статически (включаются в сам компилируемый бинарник самостоятельно или платформозависимыми средствами)
    • подгружаются динамически (из отдельных файлов).
    Ответ написан
    Комментировать