• Как читать и записывать xlsx стандартными средствами .NET?

    Без сторонних врятли... Но много раз уже пользовался ClosedXML
    Ответ написан
    Комментировать
  • Почему execl выходит из процесса?

    Нужно вначале сделать `fork()`, а уже внутри нового процесса -- `execl()`.
    Ответ написан
    Комментировать
  • Как правильно реализовать представления в ASP.NET MVC?

    @dmitryKovalskiy
    программист средней руки
    Забудьте про ViewBag навсегда - это инструмент чтобы подтащить во вьюху строчку сообщения и все. Строить на нем программную логику - идея ниже среднего. Вещи вроде NoSidebar должны решаться через CSS или на крайняк через клиентскую логику. Как ни странно - это два очень мощных инструмента, позволяющих не городить огород из вьюх и layout. Определитесь с архитектурой приложения. Вы говорите - куча страниц, получается у вас куча методов контроллеров или куча контроллеров? Или вы программной логикой подменяете вьюхи? Откуда взялась куча страниц? Возможно что весь этот зоопарк надо группировать в сложные View содержащие PartialView, основанные на витиеватых моделях. Если у вас много контроллеров - то возможно пора включать регионы и под них клепать сообственные layout в рамках логики региона.
    Ответ написан
    Комментировать
  • Почему в DLL_PROCESS_DETACH некорректно отрабатывает WaitForSingleObject?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Из справки по DllMain:
    Because DLL notifications are serialized, entry-point functions should not attempt to communicate with other threads or processes. Deadlocks may occur as a result.
    Ответ написан
    Комментировать
  • Какие знания по математике для создания игр на C++?

    @mamkaololosha
    Линейна алгебра, вычислительная геометрия. Может основы физики, сплайны, интерполяция.
    Можете же просто взять и в консоли написать арканоид, а рисовать в массив char 64x64. Можете добавить еще отрезки прямых и от них отскакивает.
    Ответ написан
    Комментировать
  • Какова правильная логика обновления клиента игры?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Из личного опыта: imho самое правильное это иметь неразрывную цепочку обновлений с первой версии до текущей, т.е 1>2, 2>3, 3>4 итд.
    Периодически для чистой установки выпускать мажорные версии, - но при этом все равно иметь неразрывную цепочку обновлений.

    Делать патчи вида 1>4, 2>4 итд - по моему опыту архи неправильно, т.к создает огромные риски неявных багов + затраты на сборку таких патчей.

    По факту для пользователя нет проблемы установить много обновлений.

    Будет осуществляться проверка на то, какая из блоков цифр в версии отличается.
    Это Вы какие то мелкие частности обсуждаете.

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

    Вопрос третий: Насколько эффективно будет сравнивать время изменения каталогов у пользователя и сравнивать с серверными? Ведь если даже в самой глубокой директории был изменен/удален/создан файл, то самый верхний по иерархии каталог будет иметь дату изменения ту, когда был затронут файл. Соответственно, таким образом можно избежать большого количества рекурсивных проверок.
    И, соответственно, обновиться будет проще. Удаляем измененный каталог и закачиваем заново.
    Привязываться к дате изменений - не лучшая идея. Проверка обходит каталоги рекурсивно, сравнивает не только список файлов но и их хеши. Почитайте как работает dropbox/яндекс.диск, да тот же торрент наконец
    Ответ написан
    4 комментария
  • Сколько памяти занимает тип int в c#, если он наследуется от типа object?

    Это value type, там особого оверхеда на память нет, насколько я знаю, т.е. Int32 свои честные 32 бита и будет занимать. Об этом можно почитать в CLR via C# или вот статья, например:
    https://habrahabr.ru/post/136609/

    Сами по себе методы ничего не занимают, но любой объект (reference type) содержит ссылку на MethodTable, размещенный единожды (см статью).
    Ответ написан
    Комментировать
  • Как перевести побитовую операцию сдвига с C++ на Php?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Это не битовая операция. Это перегруженный оператор у потока:
    www.cplusplus.com/reference/istream/istream/operat...
    В php используйте php.net/manual/ru/function.explode.php
    Ответ написан
    1 комментарий
  • Как написать попроще?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    int result = new int[] { 5, -6, 2, 7, -5, 9, 1, -3 }.Where(i => i<0).Sum();
    Ответ написан
    Комментировать
  • Как лучше ждать(проверять) выполнения функции (Monitor.Enter vs While(var))?

    petermzg
    @petermzg
    Самый лучший программист
    Используйте для этого Event. Скинули сигнальное состояние, сервис занят.
    Для вашей задачи лучше ManualResetEvent. Сервис выполнил задачу и сам установил сигнальное состояние.
    В других потоках будете просто писать
    event.WaitOne(<кол-во миллисекунд>);
    Если нет сигнального состояния, ваш поток уснет на нужное время и проснется когда сервис завершит работу и установит сигнальное состояние или по истечению времени ожидания.
    Ответ написан
    1 комментарий
  • Что подразумевается под получением ресурса и его инициализации в RAII?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    RAII это оборачивание в класс некоторой "сырой" сущности. Сущность может быть любая, но с ней неудобно работать, потому что надо следить за созданием и уничтожением в программе. Например

    class WinAPI32_Window
    {
    HWND hWnd = 0; // <--ресурс
    public:
      WinAPI32_Window()
      {
        //100 строк для регистрации класса окна и создания окна
        hWnd = CreateWindow(/* много параметров */); // <--получаем ресурс
    
        if (!hWnd) throw std::system_error("win creation error"); // кидаем исключение в конструкторе, если окно не создается, то объект не создается тоже 
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
      }
    
      ~WinAPI32_Window()
      {
        DestroyWindow(hWnd);  // <-- освобождение ресурса
      }
    }
    
    //ну а дальше в программе:
    try {
      auto win = new WinAPI32_Window; //создаем объект = инициализируем и получаем внутри hWnd
    } catch //...
    //работаем
    delete win; //освобождаем ресурс путем удаления объекта
    Ответ написан
    1 комментарий
  • Как укротить GC, резервирующего память "про запас"?

    Nipheris
    @Nipheris Куратор тега C#
    На самом же деле память, реально используемая приложением остается без изменений.

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

    Еще более абсурдное суждение. Кто говорит, что перерисовка не приводит к созданию объектов? Как насчёт объектов Graphics?
    как можно избавиться от резервируемой памяти "про запас"

    Могу ошибаться, но я никогда не слышал о резервировании памяти "про запас". Видимо, объекты все-таки создаются.
    мне надо чтобы приложение не ело лишней памяти ну или ело, но эта память со временем не увеличивалась (при каждом вызове Invalidate).

    Она будет время от времени собираться, как вы и сказали. Чем меньше свободной памяти в системе, чем чаще будет сборка мусора. Если для вас эти условия недостаточно строгие, используйте языки с ручным управлением памятью.

    Еще проверьте, что у вас не утекают IDisposable объекты. Можете повызывать GC.Collect, но это само по себе временное решение.
    Ответ написан
    3 комментария
  • Двойной клик по итему ListBox-а?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Нужно просто поставить привязку с командой у вашей вьюмодели. Вы ведь используете MVVM?

    Гораздо удобнее использовать не создавать вручную ICommand, а сделать класс, реализующий этот интерфейс. Обычно его называют DelegateCommand (классы указаны ниже).

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

    #region Свойства
    
    public ObservableCollection<MyClass> Collection { get; set; } = new ObservableCollection<MyClass>
    {
        new MyClass { Name = "Иванов Иван" },
        new MyClass { Name = "Петров Пётр" },
        new MyClass { Name = "Сидоров Сидор" },
    };
    public MyClass SelectedCollection { get; set; };
    
    #endregion
    
    #region Команды
    
    private ActionCommand _myCommand;
    public ActionCommand MyCommand => _myCommand ?? (_myCommand = new ActionCommand(MyMethod));
    
    private DelegateCommand<MyClass> _myDelegateCommand;
    public DelegateCommand<MyClass> MyDelegateCommand => _myDelegateCommand ?? (_myDelegateCommand = new DelegateCommand<MyClass>(MyMethod2, item => item != null);
    
    private void MyMethod()
    {
        // обработка команды
    }
    
    private void MyMethod2(MyClass item)
    {
        // обработка команды
    }
    
    #endregion


    <ListBox ItemsSource="{Binding Collection}" SelectedItem="{Binding SelectedItem}"/>
    <Button Command="{Binding MyCommand}" Content="Команда 1"/>
    <Button Command="{Binding MyDelegateCommand}" CommandParameter="{Binding SelectedItem}" Content="Команда 2"/>


    Если нужна команда не на событие Сlick, а на любое другое событие (как вы говорите, на DoubleClick), то нужно сделать добавить референс на System.Windows.Interactivity и указать триггер на событие:
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

    <ListBox ItemsSource="{Binding Collection}" SelectedItem="{Binding SelectedItemc}" DisplayMemberPath="Name">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding MyDelegateCommand}" CommandParameter="{Binding SelectedItem}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ListBox>


    Класс DelegateCommand - команда с параметром, и класс ActionCommand - команда без параметра. Нешаблонный класс DelegateCommand используется реже (я вообще не припомню, чтобы его использовал).
    public class DelegateCommand<T> : ICommand
    {
        #region Private fields
    
        private readonly Action<T> _execute;
        private readonly Func<T, bool> _canExecute;
    
        #endregion
    
        #region Constructors
    
        public DelegateCommand(Action<T> execute, Func<T, bool> canExecute = null)
        {
            _execute = execute;
            _canExecute = canExecute;
        }
    
        #endregion
    
        #region DelegateCommand
    
        public void Execute(T parameter)
        {
            var handler = _execute;
            if (handler != null)
            {
                handler(parameter);
            }
        }
    
        public bool CanExecute(T parameter)
        {
            var handler = _canExecute;
            return handler == null || handler(parameter);
        }
    
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
    
        #endregion
    
        #region ICommand
    
        void ICommand.Execute(object parameter)
        {
            Execute((T)parameter);
        }
    
        bool ICommand.CanExecute(object parameter)
        {
            return CanExecute((T)parameter);
        }
    
        #endregion
    }
    
    public class DelegateCommand : DelegateCommand<object>
    {
        public DelegateCommand(Action<object> execute, Func<object, bool> canExecute = null)
            : base(execute, canExecute)
        {
        }
    }
    
    public class ActionCommand : DelegateCommand<object>, ICommand
    {
        #region Private fields
    
        private readonly Action _action;
        private readonly Func<bool> _canExecute;
    
        #endregion
    
        #region Constructors
    
        public ActionCommand(Action action, Func<bool> canExecute = null)
            : base(null, null)
        {
            _action = action;
            _canExecute = canExecute;
        }
    
        #endregion
    
        #region ActionCommand
    
        public void Execute()
        {
            var handler = _action;
            if (handler != null)
            {
                handler();
            }
        }
    
        public bool CanExecute()
        {
            var handler = _canExecute;
            return handler == null || handler();
        }
    
        #endregion
    
        #region ICommand
    
        void ICommand.Execute(object parameter)
        {
            Execute();
        }
    
        bool ICommand.CanExecute(object parameter)
        {
            return CanExecute();
        }
    
        #endregion
    }
    Ответ написан
    1 комментарий
  • Как перейти с консольных приложений на графические (оконные)?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Выбор GUI-фреймворка зависит от ОС, под которую хотите писать.
    Лучше всего писать GUI не на C++, а осваивать C# под Winforms/WPF. Создавать на нем GUI гораздо проще, получается гораздо лучше, в нем гораздо больше всего готового, под винду это однозначно лучше, чем Qt (который кроссплатформенный - т.е. работает больше на количество, чем качество) Но полноценный C# есть только под винду. А вот нужны ли вам другие ОС, какие именно - это от задач зависит и от того, какую ОС вы знаете лучше всего и какая под рукой.

    C++ под WinAPI стоит изучать под виндой параллельно C# под Winforms, для знания основ, ведь весь GUI, который есть на винде, в той или иной мере основан на WinAPI.
    Но реально на нем, конечно, не пишут гуев, а используют его в виде вставок в код на том же C#, для тех задач, для которых в .NET нет средств.
    Ответ написан
    1 комментарий
  • Где кто видел книгу с максимально подробным=простым описанием с++?

    @Free_ze
    Пишу комментарии в комментарии, а не в ответы
    edinorog.jpg
    Ответ написан
    Комментировать
  • Насколько C# сейчас подходит для разработки под linux?

    @enavermate
    Нужно!
    Недавно сдали 12 месячный проект. ASP.NET5, MVC-framework, PostgreSQL, KestrelServer (начали проект спустя !4! месяца после выхода оного). Задачи: Сервер + REST API.
    Сначала хотели разместить на Azure, но что-то не заладилось.
    В итоге разместили на Linux'овом сервере.
    5 месяцев - полёт нормальный.
    Мануалов для конфигурирования от MS уже намного больше.
    Так что пишите - уже всё готово!
    Ответ написан
    Комментировать
  • Как улучшить отображение шрифтов в WPF?

    mezastel
    @mezastel
    Финансовая математика, программирование
    Все дело в том, что вы воспользовались нестандартным шрифтом. У стандартных шрифтов есть такая штука как хинтинг - подсказки касательно того, как растеризовывать шрифт на низком разрешении. Очевидно у того шрифта что вы взяли этого хинтинга нет, поэтому на 96dpi все выглядит адово.

    Советую не мудрить и использовать Arial, Segoe и иже с ним. Если хотите сторонние шрифты - ищите те, которые разработаны серьезными конторами, например шрифты Ubuntu. И то, все надо проверять.
    Ответ написан
    3 комментария