Как правильно задавать вопросы: bugtraq.ru/forum/faq/general/smart-questions.html

654a8caa511dc921594769.png

Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc

Достижения

Все достижения (59)

Наибольший вклад в теги

Все теги (406)

Лучшие ответы пользователя

Все ответы (1504)
  • Как поставить второй системой linux, на другой диск?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Самый оптимальный вариант - отключить все диски и оставить только тот, на который надо её поставить, а на самом диске удалить все разделы. И далее ставить новую ОС. После установки уже можно подключить все остальные диски и в биосе выставить загрузку с нужного диска. Если хочется иметь удобное загрузочное меню без биоса: лучшим вариантом будет отдельный загрузчик, раньше я юзал Acronis OS Selector и каждую ОС ставил со своим загрузчиком - т.е., диски с ОС самодостаточны и не зависят от других. Не знаю как он сейчас, но вроде его засунули в Acronis Disk Director. И еще один удобный вариант: после установки ОС надо в её загрузчик вручную добавить записи о других ОС и в загрузчиках других ОС тоже самое сделать. Таким образом будет возможность выбора с какого диска грузиться и в БИОСе/бут меню, и в загрузчике, а так же будет страховка на случай поломки ОС/загрузчика. А так же можно будет безболезненно удалить целиком любую ОСь и оставить нужную и она даже будет продолжать работать. В любом случае, надо ставить ОС так, чтобы её загрузка не зависла от других ОС и дисков.

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


    А еще есть MBR, GPT, активные/пассивные разделы, составные диски и разделы, софтовые и железные RAID, BIOS, UEFI, NVME, SATA, SAS, USB, CD, сетевая загрузка (а тут еще Ethernet, WiFi, DHCP, PXE в линукс и винде), дисковые контроллеры, сетевые хранилища, плюс дикая фантазия разработчиков материнских плат и контроллеров и их прошивок. И вот это все может быть перемешано в разных вариациях с разными дикими фантазиями и еще более безумными результатами. Что точно гарантирует безразмерную кучу незабываемых ощущений в процессе. Так что очень, очень-очень рекомендую всегда ставить на один ПК все операционные системы независимо друг от друга со своими родными загрузчиками - лучше путь будет цепочка загрузчиков и запас, чем их не будет, когда одна из осей или дисков отправятся в электронный рай.
    Ответ написан
    Комментировать
  • Как выполнить выгрузку информации по классу по определённому правилу?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Документируете код согласно принятым стандартам, типа такого:
      /// <summary>
      /// Class description
      /// </summary>
      public class SomeClass { }

    2. В параметрах проекта на вкладке "Сборка" ставите галочку "XML-файл документации — далее файл документации можно скормить любому приложению/скрипту, понимающему xml.
    3. Далее ставите приложение Doxygen
    4. В doxygen создаете проект документации, указываете xml файл документации и все требуемые настройки и сохраняете проект в файл
    5. Теперь документацию по всему коду в удобном формате (HTML, LaTeX, RTF, Man, XML, DocBook) можно получить просто выполнив команду:
      doxygen.exe doxyproject
    Ответ написан
    4 комментария
  • Какой CMS движок учить начинающему?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никакой. Изучайте разработку ПО, языки программирования, построение архитектуры ПО, алгоритмы, математику и т.д и т.п.

    UPD
    Приведу немного аргументации и очевидных вещей для тех, кто не понимает почему ответ именно такой. На самом деле все очень просто: в IT индустрии все развивается и меняется очень, очень-очень быстро. И как следствие возникает проблема устаревания знаний и умений. Вот например 15-20 лет назад изучение языка программирования под названием "Дельфи" и популярной тогда его среды разработки для дестктопных приложений вполне имело смысл и было популярным явлением, т.к. оно тогда довольно широко использовалось, или например Perl для создания сайтов. А где оно сейчас? Почему сегодня сайты пишутся на джаваскрипте? А как на счет десктопных приложений? А ведь те же десять лет назад попробуй скажи такое — как бы область деятельности не пришлось менять. И вот такое происходит просто с языками программирования за довольно короткое время. А основа любого CMS, фреймворка и иже с ними — это как раз таки язык программирования. И вот за время жизни языка программирования в нём случаются новые стандарты, изменения и прочее, а популярное ПО на нём переписываются десятки и сотни раз. Т.е., изменчивость продуктов какого либо языка зависит как от самого языка так и от его популярности. И чем они выше — тем чаще что-то меняется. Из всего этого вытекает очень логичный вывод: в долгосрочной перспективе выгоднее те знания, которые не устареют как можно дольше. И вот тут как раз таки знания разработки ПО и языков программирования, построения архитектура, алгоритмы и прочее имеют наибольший срок устаревания. А уж сколько тысяч лет математике можно и не вспоминать. А она, кстати именно благодаря стремительному развитию IT тоже развивается очень быстрыми темпами. Так вот, при наличии вот таких фундаментальных знаний можно легко и быстро осваивать любые новые фреймворки, CMS, языки программирования и прочее. А уж при наличии подробных мануалов, гугла, форумов и прочего большинство задач сводится тупо к вбиванию "как сделать YYY в ZZZ" в строке поиска (я вот например никак не могу понять ход мыслей людей, которые задают вопросы на форумах и прочих ресусах, ответ на которые выдается в первых же строчках гугла, складывается впечатление, что они вообще первый раз в интернете и про гугл не знают вообще ничего).
    Если есть желание именно в изучении CMS — ставим себе задачу и решаем её используя разные CMS, далее выбираем наиболее понравившуюся и пользуемся пока не надоест или не устареет. А после — повторить.

    Немного перефразирую сам вопрос и соседний популярный ответ:
    — Каким инструментом учиться пользоваться начинающему строителю?
    — Учись использовать молоток и гвозди, леса полно, доски везде используются.
    Вот только строительство — это не одни только доски, в которые забиваются гвозди, а еще архитектура, сопромат и иже с ним, экстерьер, интерьер, отопление, освещение, канализация, вентиляция и еще куча всего. Аналогично и во всех остальных областях, в том числе и web разработке.
    Ответ написан
    9 комментариев
  • Как сделать единый аккаунт для своих сервисов?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Реализовать свой сервис авторизации. Называется CAS, работает примерно так:
    5bd748db6d572869658821.png
    Ответ написан
    6 комментариев
  • Как правильно описать класс для библиотеки Newtonsoft.Json C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Элементарно: https://app.quicktype.io/#r=json2csharp - слева вставляете JSON, справа на выходе получаете готовый класс для парсинга. Удобнейший сервис.

    Пример:
    {
      "greeting": "Welcome to quicktype!",
      "instructions": [
        "Type or paste JSON here",
        "Or choose a sample above",
        "quicktype will generate code in your",
        "chosen language to parse the sample data"
      ]
    }

    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
    
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
        using J = Newtonsoft.Json.JsonPropertyAttribute;
        using R = Newtonsoft.Json.Required;
        using N = Newtonsoft.Json.NullValueHandling;
    
        public partial class Welcome
        {
            [J("greeting")]     public string Greeting { get; set; }      
            [J("instructions")] public string[] Instructions { get; set; }
        }
    
        public partial class Welcome
        {
            public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, QuickType.Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
        }
    
        internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters = {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    }


    Я конвертер выношу в отдельный класс и файл:
    using Newtonsoft.Json;
    
        /// <summary>
        /// Конвертер JSON 
        /// </summary>
        public static class Converter
        {
            /// <summary>
            /// Настройки конвертации JSON
            /// </summary>
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,     // Пропускаем аттрибуты
                DateParseHandling = DateParseHandling.None,                     // Выключаем парсинг дат
                NullValueHandling = NullValueHandling.Ignore                    // Пропускаем пустые значения 
                                                                                // (API-вызов при создании запроса 
                                                                                // сам заполняет нужные поля)
            };
        }


    А парсинг/конвертацию JSON выношу в отдельный класс, от которого уже наследую классы для парсинга данных:
    /// <summary>
        /// Абстрактный класс - сетевое сообщение: парсинг и 
        /// генерация JSON из экземпляров наследуемого класса
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public abstract class APIMessage<T>
        {
            /// <summary>
            /// Конвертация в JSON
            /// </summary>
            /// <returns></returns>
            public string ToJson()
            {
                return JsonConvert.SerializeObject(this, Converter.Settings);
            }
    
            /// <summary>
            /// Парсинг JSON в указанный тип
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static T FromJson(string json)
            {
                try
                {
                    return JsonConvert.DeserializeObject<T>(json, Converter.Settings);
                }
                catch (Exception e)
                {                
                    throw new ServerConnectionException(
                        "Server response parse error!\nResponse type: <" + typeof(T).FullName
                        + ">\nError: " + e.Message
                    );
                }
            }
        }


    Как-то так получается:
    public class Request : APIMessage<Request>
    {
        <описание JSON свойств>
    }
    Ответ написан
    3 комментария

Лучшие вопросы пользователя

Все вопросы (1)