• Как искать элементы в xml без имени?

    @cicatrix
    было бы большой ошибкой думать
    Вопрос первый: а если ты их добавляешь динамически, чего ты ссылки на них не хранишь в массиве, например?
    Если по каким-то причинам ты так делать не хочешь, вопрос второй - тэг Content предназначен для указания... контента (содержимого) элемента, но никак не метки (имени). Для этого есть атрибут "Name"
    Ну а так:
    .Where(l => l.Content.Contains("EtalonName"));
    Ответ написан
    8 комментариев
  • Как убрать ошибку?

    @cicatrix
    было бы большой ошибкой думать
    Написано "Сервер не найден или недоступен".
    Действительно, переводить не надо, надо тонны нерелевантного кода написать, вместо того, чтобы текст ошибки перевести.
    Ответ написан
  • Как парвильно обратиться к контроллеру, передав в качестве параметра массив?

    @cicatrix
    было бы большой ошибкой думать
    Попробуй
    http://localhost:5000/api/Rtb/GetParam?ids=68&ids=65

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

    @cicatrix
    было бы большой ошибкой думать
    6 знаков после запятой может оказаться мало, в теории, я бы взял 8 на всякий случай
    По организации таблиц для начала надо понять, как эти таблицы будут использоваться.
    Если будет выборка типа "выбрать котировки по всем валютам на дату", то дата должна быть ключом (или индексом), тогда так:
    ДАТА / туева хуча столбиков

    Если выборка типа "выбрать все котировки по монгольскому тугрику", то ключом (индексом) должен быть код валюты.
    КОД ВАЛЮТЫ / Дата / Курс

    TimeStamp нужен только если у тебя в течение одного дня меняется значение. Обычно курсы устанавливаются на день, соответственно, одной даты достаточно.
    Ответ написан
    2 комментария
  • Как такое может быть. Разный результат при "меньше либо равно" и "BETWEEN" для одной даты?

    @cicatrix
    было бы большой ошибкой думать
    Вот ссылка:
    https://www.techonthenet.com/mysql/between.php
    Где написано
    When using the MySQL BETWEEN Condition with dates, be sure to use the CAST function to explicitly convert the values to dates.

    Точно не могу сказать, в чём разница между
    STR_TO_DATE('2021-04-14 23:59:59', '%Y-%m-%d %H:%i:%s')
    и
    CAST('2014-02-01' AS DATE)
    но, возможно, она есть.

    Кроме того, возможно, играет роль не даты, а времени.
    2021-04-14 < 2021-04-14 11:46:23
    Ответ написан
  • Почему важно "Разделение ответственности"?

    @cicatrix
    было бы большой ошибкой думать
    Абстрактно если, псевдокодом
    password = Window.TextBoxPassword.Value
    if (!password.RegexMatch('^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$"))
         Window.ValidationText.Text = "Пароль слишком слабый";
    else
         try
             connection = new Connection("connecttion string to database");
             .RunSQL("update users set password = @password where username = @user"
         catch  
             Window.ResultMessage.Text = "Ошибка"
    Window.ResultMessage.Text = "Пароль изменён"


    И таких кусков в программе, например 3, где меняется павроль, но ты знаешь только про 2, так как третий добавили без тебя.
    Вопросы: что будет, если изменятся требования к паролю?
    Что будет, если изменится оконный дизайн или вообще UI фреймворк?
    Что будет, если изменится движок бд, названия таблиц?

    сравни c:
    password = GetUserInput();
    if (ValidatePassword())
    {
        UpdateUserPassword()
    }
    Ответ написан
    1 комментарий
  • Как написать поиск-фильтрацию по всем типам?

    @cicatrix
    было бы большой ошибкой думать
    Как-то так, наверное:
    public static IQueryable<T> ApplyFiltering<T>(
        this IQueryable<T> source, 
        string propertyName, 
        string filter)
    {
            filter = filter.ToLower(); // выключить зависимость от регистра
            return source
                .Where(item => 
                item.GetType()
                .GetProperty(propertyName)
                .GetValue(item, null)
                .ToString().ToLower().Contains(filter));
    } // ApplyFiltering
    Ответ написан
  • Что такое курсор (cursor) в базах данных?

    @cicatrix
    было бы большой ошибкой думать
    Давай попробую на пальцах. Представь у тебя многоэтажный склад (таблица). На каждом этаже хранятся коробки (данные). Чтобы добраться до данных (SELECT) надо на лифте подняться на нужный этаж и достать (FETCH) эти коробки. Вот лифт - это и есть твой курсор, если всё очень и очень упростить.
    Ответ написан
  • Как в C Sharp выдавать ошибку при неправильном вводе?

    @cicatrix
    было бы большой ошибкой думать
    Вместо Convert.ToDouble ипсользуй Double.TryParse
    Он вернёт false, если не удалось преобразование.
    Как-то так:
    double x1;
    do
    {
       Console.Write("Введите x1: ");
    } while (!double.TryParse(Console.ReadLine(), out x1))

    P.S. Имей в виду, что успех или неуспех преобразования ещё зависит от принятого в локали системы разделителя целой и дробной части (точка или запятая). Но это уже отдельный геморрой.
    Ответ написан
  • Как крякнуть защищенную программу?

    @cicatrix
    было бы большой ошибкой думать
    Это отдельное направление, которое называется Реверс-инжиниринг.
    Те, кто этим занимается, это действительно, своего рода, "элита", так как там не существует готовых методик, шаблонных решений и пр. Каждая новая программа - чёрный ящик, который надо разобрать и посмотреть, как он работает, при этом ты ничего не знаешь о том, что было на уме у его создателя.
    Разумеется, любая защита обходится, но дело это кропотливое, долгое, требующее хороших знаний языка ассемблера для той линейки процессоров, под который программа написана.
    Для C# существует IL-Spy или похожие дисассемблеры, которые действительно позволяют получить некое подобие исходного кода, но, зачастую, даже имея на руках код (очень часто обфуцированный) предстоит ещё очень долгая, нудная и кропотливая работа только для того, чтобы разобраться, что там вообще происходит.
    Кряк "взлом" программы часто сводится к подмене результата проверки условия. Простой if, казалось бы. Однако найти нужное место в машинном коде или в памяти процесса - очень и очень сложно.

    Сразу говорю, что кракером быстро не становятся. На это могут потребоваться годы наряжённого труда и самообучения (помните - этому никто не сможет научить, этому можно только научиться самому), методом проб и ошибок. А каждый новый взлом - это новая задача, требующая новых знаний и совсем других подходов.
    Ответ написан
    Комментировать
  • Как исправить ошибку при подключении к MS SQL Server в ASP Net Core приложении на Ubuntu?

    @cicatrix
    было бы большой ошибкой думать
    Судя по этому сообщению:
    (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed

    Вполне возможно, в системе не хватает нужного доверенного сертификата.
    Ответ написан
    Комментировать
  • Можете дать идеи для проектов на языке C#?

    @cicatrix
    было бы большой ошибкой думать
    Ну напиши мессенджер. Чтобы и p2p и через сервер. И веб-клиент.
    Протокол сделай безопасный. Шифрование, локальные базы данных. И чтобы с эмоджами, и картинки и видео пересылать можно было. Кросс-платформенный. Чтобы и на iOS, и на Android, и на Linux, и на Windows, и на MacOS.
    Ответ написан
    Комментировать
  • Есть ли программа для создания алгоритма действий?

    @cicatrix
    было бы большой ошибкой думать
    По-моему это реализуется простым html.
    Вопрос и гиперссылки на возможные ответы.
    В целом, даже в ворде можно сделать.
    Ответ написан
    Комментировать
  • Какие есть инструменты для проверки веса страниц сайта?

    @cicatrix
    было бы большой ошибкой думать
    Ещё вопрос, что называть "весом".
    Вот сайт на 3 домена х с картинками и видео, причём часть хостится на самом сайте, а часть на YouTube, например.
    Плюс скрипты с левого cdn. Причём сам скрипт на 3 Кб, а при исполнении динамически генерирует контента на 2 Мб.
    Что из этого считать, а что - нет?
    В общем, ересь какая-то.
    Ответ написан
    Комментировать
  • Как правильно построить функцию?

    @cicatrix
    было бы большой ошибкой думать
    Короче, вот готовый пример, как работать с матрицами трансформации. Это действительно проще показать, чем объяснить
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Windows.Forms;
    
    namespace DrawPlot
    {
        public partial class MainForm : Form
        {
            // Добавил сюда, чтобы в InitializeComponent не лезть
            PictureBox picDisplay;
    
            // Макс размер сетки по наибольшему измерению окна 
            // для сохранения пропорции (либо по ширине, либо по высоте)
            const float MaxGrid = 10.0f;
    
            // Это задаёт логический размер окна
            SizeF viewPort;
    
            // Шаги сетки 
            const float GridStep = 0.1f;
            // Каждые 10 линий сетки делаем линию поярче
            const int BoldLineStep = 10;
    
            // Цвета        
            Pen pen_LargeGrid = new Pen(Color.FromArgb(0,64,0));
            Pen pen_SmallGrid = new Pen(Color.FromArgb(0,32,0));        
            Pen pen_Axii = new Pen(Color.FromArgb(0,128,0));
            SolidBrush plotBrush = new SolidBrush(Color.Red);
    
            // Ширина 1 пиксела в логических размерах
            float Pixel_Width;
    
            public MainForm()
            {
                InitializeComponent();
                picDisplay = new PictureBox() { Parent = this, Dock = DockStyle.Fill, BackColor = Color.Black };
                picDisplay.Paint += this.PicDisplay_Paint;
                picDisplay.Resize += this.PicDisplay_Resize;
                // Стрелочка 10х4
                AdjustableArrowCap cap = new AdjustableArrowCap(4.0f,10.0f);
                pen_Axii.CustomEndCap = cap;
                CalculateDimensions();
            } // MainForm Ctor       
    
            private void PicDisplay_Resize(object sender, EventArgs e)
            {
                CalculateDimensions();
                picDisplay.Invalidate();
            } // PicDisplay_Resize
    
            private void CalculateDimensions()
            {
                var rect = picDisplay.ClientRectangle;
                // Устанавливаем размеры в зависимости от того, что больше, длина или ширина
                // для сохранения квадратной сетки
                if (rect.Width > rect.Height)
                    viewPort = new SizeF(MaxGrid, MaxGrid * (rect.Height / (float)rect.Width));
                else
                    viewPort = new SizeF(MaxGrid * (rect.Width / (float)rect.Height), MaxGrid);
                // Считаем ширину 1 пикселя 
                Pixel_Width = viewPort.Width / rect.Width;
                // Назначаем эту ширину используемым перьям
                foreach (var pen in new Pen[] { pen_Axii, pen_LargeGrid, pen_SmallGrid, pen_LargeGrid })
                    pen.Width = Pixel_Width;
            } // CalculateDimensions
    
            private void PicDisplay_Paint(object sender, PaintEventArgs e)
            {            
                Graphics g = e.Graphics;
                
                // Масштабируем
                g.ScaleTransform(picDisplay.Width / viewPort.Width, (picDisplay.Height / viewPort.Height));
    
                // Двигаем начало координат в середину
                float halfWidth = viewPort.Width / 2;
                float halfHeight = viewPort.Height / 2;
                g.TranslateTransform(halfWidth, halfHeight);
    
                // Переворачиваем Y
                g.ScaleTransform(1.0f, -1.0f);
    
                // Рисуем сетку
                int step = 0;
                for(var f = 0f; f < MaxGrid / 2 ; f += GridStep)
                {
                    var currentPen = pen_SmallGrid;                
                    if (0 == step % BoldLineStep) currentPen = pen_LargeGrid;
                    // Горизонтальные
                    g.DrawLine(currentPen, -halfWidth, f, halfWidth, f);
                    g.DrawLine(currentPen, -halfWidth, -f, halfWidth, -f);
                    // Вертикальные
                    g.DrawLine(currentPen, f, -halfHeight, f, halfHeight);
                    g.DrawLine(currentPen, -f, -halfHeight, -f, halfHeight);
                    step++;
                } // for
                // Оси координат
                g.DrawLine(pen_Axii, -halfWidth, 0, halfWidth, 0);
                g.DrawLine(pen_Axii, 0, -halfHeight, 0, halfHeight);
    
                // график
                float y;
                for (var x = -halfWidth ; x < halfWidth ; x+= Pixel_Width)
                {
                    y = ((float)Math.Pow(x, 3) - 1) / (x + 5);
                    // Обязательно проверка на NaN и Infinity
                    if (!float.IsNaN(y) && !float.IsInfinity(y)) 
                          g.FillRectangle(plotBrush, new RectangleF(x, y, Pixel_Width, Pixel_Width));
                } // for
            } // PicDisplay_Paint
        } // class MainForm`    1+m  
    } // DrawPlot namespace


    6076227c0d1d2664851754.png
    Ответ написан
    1 комментарий
  • Загрузка больших файлов c#?

    @cicatrix
    было бы большой ошибкой думать
    4 гига, уж очень подозрительная цифра.
    Подозреваю, что где-то int переполнился.
    А, ну и на всякий случай посмотреть, что за файловая система. Fat файлы более 4 гигов не поддерживает. По той же причине.
    Ответ написан
    Комментировать
  • Managment studio и c# как взять данные для сравнения из базы данных?

    @cicatrix
    было бы большой ошибкой думать
    Что за база-то?

    if (user != null)
    В твоём коде про user ничего не известно.
    Что возвращается в runner?
    var runner

    Откуда MessageBox в веб-приложении? или это не веб-приложение?

    И главное - какой чудак придумал хранить в базе пароли открытым текстом?
    Ответ написан
    Комментировать
  • На чём мне написать десктопное приложение?

    @cicatrix
    было бы большой ошибкой думать
    Я бы посоветовал вообще разделить функционал и GUI.
    Весь функционал обернул бы в class library (dll), а gui уже потом просто дописал бы к этой либе.
    А писать - да, на чём угодно.
    Если XP, то C# + WinForms.
    Без XP можно WPF (с ним удобно реализовать это):
    Немного нестандартный GUI, в частности нужны ListBox'ы с иконками и чекбоксами.

    На винформах тоже можно, но трудозатрат побольше.

    Ну и экзотический вариант (но не без шарма) - сделать гуй на html + css, а само приложение может реализовывать простейший веб-сервер (ну отдать по запросу html-файлик get-ом и принять инфу post-ом) - зато вообще практически без платформенных зависимостей.
    Ответ написан
    Комментировать
  • Как написать обобщенный фильтр?

    @cicatrix
    было бы большой ошибкой думать
    В данном примере строка сравнивается с Func.

    Я бы сделал так:
    public interface IMyItem
    {
        bool IsMatch(string pattern);
    }
    
    public static IQueryable<T> ApplyFilter<T>(this IQueryable<T> source, string filtertext) where T: IMyItem
    {
        return source.Where(item => item.IsMatch(filtertext));
    }


    Единственный минус - объекты, которые фильтруются, должны будут реализовать интерфейс IMyItem.
    В методе IsMatch, соответственно, должна выполняться проверка, подпадает ли объект под строку поиска или нет.
    Ответ написан
    Комментировать