• TINYINT vs ENUM: в ситуации, когда возможных целочисленных значений всего несколько?

    @cicatrix
    было бы большой ошибкой думать
    Размышления в сторону - если размер базы / объём памяти критичен, то, конечно, чем меньше размерность, тем лучше.
    Если же говорить о производительности, то оказывается, что 64 бтный процессор в совокупности с 64-битной ОС лучше всего работает с, ВНЕЗАПНО... 64-битными целыми. Уменьшение разрядности до 32, 16 или 8 бит либо вообще не даст прироста производительности, либо даже ухудшит быстродействие.
    Ответ написан
  • Как взломать ГПСЧ с числами: 21 ;10; 49; 32...?

    @cicatrix
    было бы большой ошибкой думать
    Что вы подразумеваете под "взломать"? если "взломать = найти период", то вам нужен сам ГПСЧ и желательно описание его алгоритма.
    Самое простое - просто запустить и ждать - рано или поздно (скорее поздно на хорошем ГПСЧ) он повторится.
    Если вам известен алгоритм генерации, можно попробовать решить аналитически, но опять же, зависит от алгоритма, если он односторонний, тогда только ждать повтора.
    Ответ написан
    Комментировать
  • Как правильно работать с исключениями?

    @cicatrix
    было бы большой ошибкой думать
    Если б однозначный ответ на ваш вопрос существовал, он бы был включён в гайды по программированию.
    Существует очень много факторов, влияющих на то, как вы должны поступать с исключениями:
    1) Вообще их не ловить, пусть об этом заботится вызывающий
    2) Ловить и обрабатывать определённые исключения, остальные пробрасывать
    3) Ловить, генерить своё, обёртывать в него внутреннее и бросать своё
    4) Ловить всё, обрабатывать самостоятельно
    5) Душить всё

    (и это далеко не полный список).

    Определять это должна архитектура приложения и места данного конкретного куска кода в этой архитектуре.
    В целом, всегда следует подходить к коду с точки зрения удобства вызывающего. Если вызывающему (коду, пользователю, программе, сервису, приложению, и т. д.) нужен только результат и не важно, что там у вас случилось, то обрабатывать надо самому. Если вызывающему нужен полный контроль - то можно вообще не обрабатывать. Всегда есть какой-то разумный баланс между двумя крайностями, и каждый раз надо решать отдельно. Универсального решения здесь нет.

    В крупном проекте есть руководитель/архитектор, который должен задать либо общие правила, либо правила конкретно для вас. Для open source вопрос сложный - в библиотеках обычно исключения не обрабатываются, иногда пробрасываются.
    Если вы контролируете код от метода MyMethod и дальше вниз по иерархии вызовов, то решать вообще-то вам. Как вам удобнее, так и поступайте. Если внизу по иерархии другой код, то обычно, пока явно не оговорено обратное, поступать надо так же, как поступает код "снизу" - если бросает/пробрасывает, то и вы делайте так же, если нет - соответственно, и вы обрабатываете.
    Ответ написан
    Комментировать
  • Хранение номеров мобильных телефонов и кредитных карт в открытом виде?

    @cicatrix
    было бы большой ошибкой думать
    Если "максимально безопасно" то, разумеется, шифровать.
    Для поиска можно тупо повторить в соседнем поле в незашифрованном виде 4 цифры, которые получаете от банка.
    И да, если "максимально безопасно", то каждая запись должна шифроваться своим ключом, который, разумеется, не должен лежать рядом с записью.

    Вообще, это всё словоблудие: 100%-й безопасности не бывает. Определите сценарий угрозы - от чего именно вы хотите защититься, определите наиболее вероятные векторы атаки на ваши данные, постарайтесь закрыть хотя бы их. Безопасность - это КОМПЛЕКС мероприятий (начиная с того, насколько вы уверены в надёжности своих менеджеров/админов, что они не сольют базу злоумышленнику). Подкуп иногда бывает дешевле взлома.
    Ответ написан
    Комментировать
  • Сочетание трех клавиш не работает?

    @cicatrix
    было бы большой ошибкой думать
    Сочетание из трёх клавиш возможно, если две из них - клавиши-модификаторы (Ctrl, Shift или Alt).
    Собственно, из двух клавиш возможно тоже только если одна из них - тот же модификатор.
    Для остального делаются "аккорды" (как, например, в Visual Studio - сначала жмётся Ctrl + что-то, программа ждёт продолжения "аккорда", команда выполняется, когда нажимается следующая клавиша).
    Ответ написан
    2 комментария
  • Как правильно удалить запись из базы данных?

    @cicatrix
    было бы большой ошибкой думать
    Самой малой кровью: уберите уникальность с name и добавьте уникальность на комбинацию name, deleted, date_delete
    (Уникальные ключи можно добавлять сразу на несколько полей).

    ALTER TABLE dbo.имятаблицы
      ADD CONSTRAINT uq_имятаблицы UNIQUE(name, deleted, date_delete)


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

    @cicatrix
    было бы большой ошибкой думать
    Попробуйте Markdown.
    И реализации есть на всех платформах и Github его понимает.
    Ответ написан
    Комментировать
  • Как компактно объединить изображения?

    @cicatrix
    было бы большой ошибкой думать
    Задачка на оптимизацию (уложить N прямоугольников в минимальную площадь) - частный случай алгоритма упаковки (обязательно прочитайте статью на Википедии).
    Вот нашел ресурс (на английском, правда), там описаны несколько алгоритмов:
    cgi.csc.liv.ac.uk/~epa/surveyhtml.html

    Вот ещё: Задача раскроя
    Ответ написан
    Комментировать
  • Как в C# можно на этапе подключения (до select) определить это sqlite3 база или какой то другой файл?

    @cicatrix
    было бы большой ошибкой думать
    SQLite Database File format

    См. п. 1.2 1.2. The Database Header
    Смещение 0, длина 16 байт строка: "SQLite format 3\000"
    Ответ написан
  • Как работают Логические выражение?

    @cicatrix
    было бы большой ошибкой думать
    У вас там не опечатка?
    Сильно похоже на обмен значениями через XOR, что по коварной задумке автора вопроса (из учебника?), должно было запутанно представлять собой следующее:
    x ^= y
    y ^= x
    x ^= y
    После этих трёх операций x и y обменяются значениями
    Ответ написан
  • Как заставить работать сайт на iis без запросов к сайту?

    @cicatrix
    было бы большой ошибкой думать
    Обычно регламентные задания на CRON вешаются (или аналог), то есть, это независимая от веб-сервера задача.
    Если сайт на своём сервере или VDS - ничего нет проще подвесить задачку выполняться периодически.
    Если на хостинге - свяжитесь с ними, у любого хостера наверняка есть подобная услуга (или, во всяком случае, можно договориться)...
    Ну если мсье извращенец, то можно на любой другой машине организовать выполнение веб-запроса с заданной периодичностью, но это, повторяю, извращение.
    Веб-сервер служит одной цели - ВНЕЗАПНО - обслуживать веб-запросы. Всё остальное он делать не должен (и не предназначен для этого).

    UPDATE: Не дочитал - quartz на машине по-нормальному должен хоститься как windows service.
    Ответ написан
    Комментировать
  • Английский для программиста или на что лучше ставку сделать?

    @cicatrix
    было бы большой ошибкой думать
    Одно другое дополняет. В своё время мне изучение программирование и необходимость копаться в документации здорово помогло с английским и наоборот, изучение английского неплохо способствует при изучении программирования.
    На курсы ходить имеет смысл только, если с самодисциплиной есть проблемы. Так как должное произношение вам, в принципе, не требуется, начните с первой 1000 самых распространённых слов. 1000 наиболее часто встречающихся слов практически в любом языке покрывает 60%-70% всех потребностей, а выучить их можно за неделю. 5000 слов перекрывают 85-90% слов. Да, общаться вы без знания грамматики, наверное, не сможете, но читать мануалы - легко.
    Дальше уже ваше дело - продолжать изучать язык по-нормальному, либо довольствоваться "глоссарием программиста".
    Ответ написан
    Комментировать
  • [C#] Как работать с MeasureString в цикле?

    @cicatrix
    было бы большой ошибкой думать
    Ещё хинт: в простых случаях, можно MeasureString не вызывать а воспользоваться свойством Height самого шрифта.
    Из примера выше вот это:
    var iOneLineHeight = g.MeasureString("Z", fnt, wrapWidth, sfFmt).Height;

    эквивалентно этому:
    var iOneLineHeight = fnt.Height;

    Вопрос ещё такой - вы где всё это отрисовываете? WPF, Winforms? Системный оконный менеджер для этих целей сам может всё рассчитать. Float Container с ограничением по длине, а внутри набор Label с Autosize, в принципе, избавят вас от этих мучений.

    Имейте так же в виду, что MeasureString не гарантирует вам точных замеров ширины текста. Чтобы всё рассчитать точно, надо пользоваться MeasureCharacterRanges
    Ответ написан
    1 комментарий
  • Как делаются читы для игр?

    @cicatrix
    было бы большой ошибкой думать
    В сетевой игре можно "чит" сделать только на то, что сервером отдаётся на откуп клиенту.
    Если, например, здоровье контролируется на сервере, ничего поделать нельзя.
    Всё зависит от конкретной игры. Есть разработчики, которые люто орудуют банхаммером за даже подозрение на чит, а есть те, которым похер.
    В стрелялках можно сделать aim-bota, например, чтобы каждая пуля летела в голову противнику (даже если стреляешь спиной к нему), в стратегиях популярны map hacking - когда вся карта (и юниты противника) становятся видны, и т. д.
    Если игра оффлайновая - тут дозволено всё. Лезем в память процесса и модифицируем что душе угодно.
    Ответ написан
    Комментировать
  • StreamReader, как изменить позицию?

    @cicatrix
    было бы большой ошибкой думать
    Сетевые потоки операцию SEEK не поддерживают. Читай всё подряд в массив, а уже там выбирай нужное.
    Такое может прокатить только с File/MemoryStream

    Прежде чем устанавливать позицию, проверяй свойство Stream.CanSeek
    Ответ написан
    Комментировать
  • Как прикрукрить Identity к существующему проекту на asp.net core 2.0?

    @cicatrix
    было бы большой ошибкой думать
    Я свой RoleProvider делал, в принципе то же самое:
    Начинай отсюда: https://docs.microsoft.com/ru-Ru/aspnet/identity/o...

    Найди нужный интерфейс (какой-нибудь IdentityProvider), напиши класс, который его реализует, пропиши в Web.Config
    Ответ написан
  • Как убрать элемент из списка полученный GetEnumSelectList?

    @cicatrix
    было бы большой ошибкой думать
    Яваскриптом после загрузки.
    Либо сделать 2 enum.
    Либо получать список значений и формировать select самому.
    Ответ написан
    Комментировать
  • Как сделать, чтобы в WinAPI stdout перенаправлялся, а stderr уходил в никуда?

    @cicatrix
    было бы большой ошибкой думать
    Язык какой?
    На C# это гораздо проще делается, без Win32API вообще.
    На плюсах смотрим структуру STARTUPINFO
    typedef struct _STARTUPINFO {
      DWORD  cb;
      LPTSTR lpReserved;
      LPTSTR lpDesktop;
      LPTSTR lpTitle;
      DWORD  dwX;
      DWORD  dwY;
      DWORD  dwXSize;
      DWORD  dwYSize;
      DWORD  dwXCountChars;
      DWORD  dwYCountChars;
      DWORD  dwFillAttribute;
      DWORD  dwFlags;
      WORD   wShowWindow;
      WORD   cbReserved2;
      LPBYTE lpReserved2;
      HANDLE hStdInput;
      HANDLE hStdOutput;
      HANDLE hStdError;
    } STARTUPINFO, *LPSTARTUPINFO;

    В dwFlags обязательно устанавливаем STARTF_USESTDHANDLES
    После вызова CreateProcess в hStdInput, hStdOutput и hStdError получают указатели на соответствующие потоки.
    Ответ написан
    Комментировать
  • Что должен знать любой программист помимо изучения языка программирования?

    @cicatrix
    было бы большой ошибкой думать
    Destroymydreams,
    1. Выучите английский. Программист обязан знать английский язык, без него вообще никуда.

    2. Начните с архитектуры ЭВМ. Имейте хотя бы общее представление, что такое процессор, регистры, память, как они взаимодействуют друг с другом.
    Копните чуть глубже, чем "процессор - это "сердце" компьютера, а память, это то, где он хранит данные".
    Получите представление о том, как компьютер работает с информацией, почему используется двоичный код, почему в байте 8 бит, как машина работает с текстом, целыми числами, что такое число с плавающей точкой. Как это можно записать в память/на диск, какая разница между big-endian / little-endian

    Затем алгоритмы - константы, переменные, ветвления, циклы, процедуры, функции, рекурсия и т. д.
    Затем языки программирования - какие бывают, в чём разница, в чём сильные и слабые стороны каждого, Что такое функциональнее, декларативнее и императивное программирование, в чём разница. Здесь же можно посмотреть основы ООП и понять, ваше это или нет.

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

    3. Определитесь с языком, который хотите изучать (который вам показался проще, нагляднее и понятнее).

    Дальше уже копайте по специфике своего языка. Думаю, на этом этапе у вас уже сложится чёткое понимание того, что и как дальше изучать.
    Ответ написан
    Комментировать
  • Можно ли использовать несколько моделей на одной cshml странице?

    @cicatrix
    было бы большой ошибкой думать
    Вообще нет, но если очень хочется, можно, если использовать partial view.
    Каждый partial view может использовать свою модель.
    В коде основного View делаешь Html.RenderPartial.

    Строго говоря, это, конечно разные cshtml, но практически результат тот же, что и для одной.
    Ответ написан
    Комментировать