Ответы пользователя по тегу Программирование
  • Какую библиотеку выбрать для создания GUI-приложений?

    Nipheris
    @Nipheris Куратор тега C++
    Ничего не имею против GTK, но для серьезных приложений с будущей поддержкой - Qt. С будущим у него все нормально. Если отбросить вопрос сложности языка (C++ против Java/C#), то на сегодняшний день я бы порекомендовал его даже для Windows-only приложений.
    Сейчас очень интересно выглядят современные наработки, такие как Qt Quick.
    Ответ написан
    4 комментария
  • Какой язык программирования изучить новичку для написания GUI приложений?

    Nipheris
    @Nipheris Куратор тега C++
    Зависит от запаса времени и сил. Если знакомый имеет возможность учиться (уж в 16-то лет), то я бы советовал плюсы. Да, это достаточно хардкорно, но все-таки этот язык как средство разработки просто так никуда не денется, а C# после плюсов он выучит без проблем (когда он хорошо разберется в C++, ему самому захочется иметь для ряда задач такой язык, как C# или Java). Главное в том, что если он сможет дисциплинировать себя в рамках C++, и сможет писать работоспособные вещи, то будет знать, как вообще работает современное ПО, и для него любой другой язык будет просто инструментом, а не парадигмой.
    Важно, чтобы у человека УЖЕ был опыт хотя в одном языке. Если он учил Паскаль - то пусть хорошенько все вспомнит, может даже первые пару недель еще с ним позанимается. Пусть вспомнит, какие есть основные алгоритмические конструкции, структуры данных подучит, вспомнит что такое указатели. И в это же время пусть начинает переходить на плюсы. Еще стоит поискать хорошую современную книгу для новичка - C++ язык очень разносторонний, разные люди на нем пишут очень по-разному, поэтому нужен некий "направитель". Потом, когда человек освоится, сам выберет стиль и инструментарий.
    Если же знакомый слукавил, и еще совсем мало знает, то лучше начать с чего-то другого. Тут уже зависит от текущих интересов: если комп интересует как "железка", то лучше взять Си - будет "продолжение" Паскаля, если очень-очень охота быстро набросать формочку - то пусть берет C#.
    Динамические языки вроде Питона новичку не советую, плохо дисциплинируют.
    В плане инструментов Qt сейчас настолько крут, что даже под винду непросто выбрать: то ли его, то ли продвинутый, но сложный и слаборазвивающийся WPF, то ли противоречивый Windows Runtime.
    Кстати, насчет того, что сложнее - C++&Qt или C#&WPF еще можно поспорить. В первом случае сложен язык, но довольно проста библиотека, во втором - язык проще, но с WPF надо реально разбираться, чтобы им полноценно пользоваться.
    Ответ написан
    1 комментарий
  • Разница между экземпляром класса и классом C#?

    Nipheris
    @Nipheris Куратор тега C#
    > экземпляр класса и обьект выходит тоже разные вещи?
    К сожалению, в рамках современной терминологии и с учетом разнообразия объектных моделей сложно ответить однозначно на ваш вопрос. Скажу так: если у вас статически-типизированный классовый язык (class-based, т.е. C#/C++/Java), то всякий объект - всегда это экземпляр класса, но в других языках и объектных системах может быть по-другому. Чтобы получить конкретный ответ, нужно точно знать о каком языке идет речь.
    Вообще, небольшая разница есть и между самими терминами: объект это прежде всего черный ящик с identity и некоторым известным интерфейсом, и вовсе не факт, что этот объект "создан по чертежу", как сказал brainick, однако если рассматривать классы как множества, то во многих языках есть понятие корневого класса в иерархии (класса object или "класса всех объектов"). Вот если такое понятие существует, то тогда можно сказать, что любой объект является экземпляром класса object.
    Ответ написан
    Комментировать
  • Какая должна быть структура SQL запросов, учитывая текущего пользователя?

    Nipheris
    @Nipheris Куратор тега C#
    Направление мыслей верное, с технической точки зрения тоже. Не уверен насчет необходимости обновления апдейтов и делитов - если вы уже проверили UserId и выяснили, что запись принадлежит конкретному пользователю, и получили ее Id - то и удалять уже достаточно только по Id (за исключением, конечно, случая, когда вам нужно удалить ВСЕ записи конкретного пользователя).
    Правильность этого варианта зависит от вашей задачи. Если вам достаточно знать пользователя-владельца - то все хорошо, но если вы потом захотите более сложную систему доступа к записям - например давать и другим пользователям доступ к записям пользователя A, то и схема базы также усложнится.
    Ответ написан
    3 комментария
  • Как реализовать скелетную модель?

    Nipheris
    @Nipheris Куратор тега C#
    Сергей Иванов дал хорошую идею, только не раскрыл до конца. В общем вам действительно будет полезна иерархия - если какая-то кость связана с другой, то эта другая будет для первой точкой отсчета - своей системой координат. Даже ваш рисунок подсказывает, что каждая кость - это вектор, а точка привязки - это начало кости. Т.о. вам достаточно для каждой кости хранить "родительскую" кость (к которой мы привязаны) - для пальцев это будет кисть или локтевой сустав, и вектор - направление кости. Тогда для перемещения группы костей вам достаточно будет переместить ТОЛЬКО родительскую для этой группы (модифицировать ее вектор). А алгоритм определения положения дочерних костей должен будет идти по дереву костей и складывать родительские и дочерние вектора, пока не дойдет до листьев костяного дерева.
    update: собственно, у Дмитрий Макаров то же самое)
    Ответ написан
  • Почему меняется кодировка PHP?

    Проблема, очевидно, в том, что у вас смешиваются две кодировки. Браузер обычно пытается определить кодировку автоматически, поэтому у вас во втором случае корректно определяется UTF-8 (где "Привет"), а в первом случае одеяло на себя перетягивает другая кодировка (вероятно 1251), и символы, закодированные в UTF-8 отображаются криво. Строка "Здарова" приходит вам в той кодировке, которая проставлена для текущего подключения к БД, и она, видимо, не UTF-8. Проставьте utf8, например, таким способом. Или поменяйте дефолтовую кодировку в настройках mysqld.
    Кстати, переходите на PDO, если изучаете доступ к данным в PHP, т.к. этот способ считается устаревшим.
    Ответ написан
    2 комментария
  • Переход с C# на C++?

    Nipheris
    @Nipheris Куратор тега C++
    > выкидывать полученные знания на помойку и начинать все с начала
    ничего вы никуда не выкинете. На плюсах вам просто чуть больше решений придется принимать самому, и дисциплина, скажем так, строже. Главные Знания - это методологии разработки, алгоритмы и общие навыки по написанию и отладке кода. В конце концов вы не на Хаскелл переходите, и даже не на F#, а на язык, который на основе плюсов был создан. Если после перехода вы все же скажете, что выбросили все знания на помойку, то видимо их и не особо много было.
    Конечно, есть стандартная библиотека .net, CLR и прочие платформенные вещи, но в современных реалиях и так приходится постоянно что-то новое учить. После бума джаваскрипта в последние 5 лет отрекаться от этого факта бессмысленно.
    Ответ написан
    Комментировать
  • Что такое Symbols release?

    Nipheris
    @Nipheris Куратор тега C++
    vilgeforce говорит верно, это релизы, содержащие как скомпиленные исполняемые модули, так и символа к ним, например pdb-файлы, если проект собирается Студией. Символьные файлы могут выкладывать как вместе с исполныемыми модулями, так и отдельно от них. Это разумно, т.к. символьные файлы нужны только для отладки, а т.к. далеко не каждый пользователь софтины будет ее дебажить, то нет смысла всегда скачивать символы, которые нередко весят больше самих модулей.
    По VS вот несколько ссылок, по остальным компиляторам поищите сами:
    stackoverflow.com/questions/72104/how-do-i-use-pdb...
    https://en.wikipedia.org/wiki/Program_database
    https://msdn.microsoft.com/en-us/library/yd4f8bd1%...
    Ответ написан
    Комментировать
  • Как отловить момент, когда окно помещается в одну из сторон экрана (прилипает как бы), при нажатии WIN + LEFT?

    Nipheris
    @Nipheris Куратор тега C++
    Я думаю вам придется изучить и частично повторить логику винды в плане приклеивания окна - т.е. получать размер рабочей области на текущем мониторе и делать окно в половину области с нужным положением. С точки зрения приложения нет никакой необходимости сообщать ему, что окно прилеплено - для него не должно быть разницы, прилепили его или вручную поресайзили до такого размера.
    Старый размер окна запоминает виндовый менеджер окон, как и в случае c maximize/minimize - иначе бы старые приложения не работали с прилипанием, а они все работают без проблем, значит операционка ничего нового не требует.
    Ответ написан
    2 комментария
  • Как работать с файлами базы данных *.DB в windows?

    Попробуйте открыть Access-ом. Само расширение, конечно, слишком универсальное, и толком по нему сложно что-то сказать. Если у "старой программы" есть что-либо, кроме exe-шника, посмотрите, что это - может быть там dll-ка от Visual FoxPro затесалась. Если формат общеизвестный, и его удастся определить, то потом уже можно подумать о способе подбора пароля.
    Ответ написан
  • Как кодируются картинки?

    В общем случае конечно в протоколе передачи данных должен быть способ указания на то, как передаваемые данные интерпретировать. Например, в HTTP используются заголовки в ответе для указания типа содержимого (Content-Type) и кодирования на уровне HTTP, например, сжатия, если таковое присутствует. При получении данных клиент (например, браузер) должен раскодировать содержимое в исходный вид (например, распаковать, если сервер сжал отправляемый ресурс) и далее работать с ним на основе указанного Content-Type. Невозможно на 100% определить заранее, что картинка того или иного формата, но, как правильно подметил Павел Волынцев, у большинства форматов есть сигнатура, по которой с вероятностью 99.9..% можно сказать, что прилетела PNG-шка или JPEG. В любом случае, правильно реализованная читалка (декордер) графических форматов должна быть готова к тому, что картинка может быть повреждена и должна выдавать ошибку, если разобрать картинку согласно предполагаемому формату невозможно.
    Сами форматы растровых изображений (вектор не рассматриваем сейчас) как раз таки и различаются прежде всего: а) особенностями представления пиксельной карты (матрицы пискелей): как кодируется цвет, индексный или компонентный, сколько всего может быть различных значений цвета у пиксела, есть ли сжатие, какие алгоритмы сжатия применяются - без потерь (PNG) или с потерями (JPEG); б) служебной информацией: это может быть как базовая необходимая информация, например размеры картинки и размер одного пикселя в байтах (читай - сколько байт выделяется на цвет одного пиксела), так и дополнительная, например EXIF, где можно указать и автора, и режим съемки и много чего еще; в) доп. фичами, которые и делают каждый формат особенным: поддержка анимации (GIF, MNG), поддержка сжатия с потерями (JPEG), поддержка слоев в картинках (фотошоповский PSD), поддержка "многостраничных" картинок (TIF) и так далее.
    Конвертирование собственно сводится к:
    1) определению исходного формата картинки;
    2) чтению исходного формата с целью перевести его в удобное развернутое представление в памяти, удобное для программиста с точки зрения дальнейших операций (расжать, прочитать служебную инфу и т.д.)
    3) записи полученного представления в памяти в новый формат, что опять таки подразумевает запись необходимых сигнатур и служебной инфы в соответствии со спецификацией формата, плюс преобразование изображения алгоритмами сжатия, если нужно (например, эффективность jpeg для фотоизображений достигается использованием довольно сложного и хитрого алгоритма кодирования, учитывающего восприятие цвета человеком, в том время как PNG сжимает почти как обычный архиватор, который никак не интерпретирует сжимаемые данные).
    Надеюсь дальше понятно куда копать.
    Ответ написан
    Комментировать
  • Какой софт порекомендуете для работы с SQLite?

    sqlitestudio.pl - отличная вещь.
    Ответ написан
    Комментировать
  • Подстраивание внешнего вида программы к ОС?

    Nipheris
    @Nipheris Куратор тега C++
    Не надо ничего получать и самому подстраивать. Вам в виде внешнего рядом лежащего файла или прямо в экзешник в виде ресурса нужно добавить XML-манифест, который будет декларировать совместимость приложения с более новой версией винды. Без этого манифеста приложение считается несовместимым, поэтому для него используются исключительно олд-скул контролы (мало ли, вдруг приложение так написано, что с новыми стилями будет работать криво?). Подробнее: https://msdn.microsoft.com/en-us/library/bb773175.aspx
    Хотите сами увидеть как это работает - берите ResHacker и раздербаньте любой современный экзешник, в ресурсе 24\1 будет этот манифест.
    Ответ написан
    4 комментария
  • ObservableCollection С#, как использовать?

    Nipheris
    @Nipheris Куратор тега C#
    Ну вот толковые в принципе ответы на SO: stackoverflow.com/questions/4279185/what-is-the-us..., посмотрите, и скажите что конкретно непонятно.
    Ответ написан
    1 комментарий
  • Windows Service или Application?

    Nipheris
    @Nipheris Куратор тега C#
    Тут зависит от деталей. В частности - надо ли это действие выполнять, даже если ни один пользователь не вошел в систему, или же вне контекста пользователя это бессмысленно. Если первое - тогда в общем-то лучше сервис, однако нужны дополнительные усилия, чтобы его устанавливать в систему, и, что еще важнее, из сервиса не стоит пытаться создавать окошки и вообще взаимодействовать с UI - это возможно, но сложно и требует доп. заморочек. Поэтому:
    а) подумайте, выполняет ли ваше приложение какую-то глобальную задачу, не зависящую от пользователя (а-ля дефрагментация или, там, архивация). Если да, то:
    б) оцените, возможно ли разбить ваше приложение на: собственно сервис, который будет выполнять полезную задачу; панель управления - обычное десктопное приложение, которое будет взаимодействовать с сервисом и менять его настройки и состояние;
    в) оцените, есть ли у вас ресурсы (время/деньги), чтобы разбираться с дополнительными тонкостями (установка и запуск сервиса, особенности написания сервиса (в шарпе нужно наследоваться от библ. класса), взаимодействие UI управления и сервиса);
    г) если пункты а, б, в истинны, то делайте в соответстии с ними, если хотя бы один ложный - сделайте лучше десктопное приложение.

    Вообще на шарпе нормально пишутся сервисы, пробовал, разобраться можно за пару дней, включая простейшие скрипты установки.
    Ответ написан
  • Как обратиться к файлу, который размещён в интернете С++?

    Nipheris
    @Nipheris Куратор тега C++
    Зачем же в файл? Лучше бы в базу, обычную реляционную, и лучше бы это обернуть в какой-нибудь сервис для авторизации, который будет выдавать ключи/токены, разрешающие выполнять опредленные действия в программе. Вам для чего конкретно? Разграничивать доступ к платному функционалу?
    Ответ написан
    6 комментариев
  • Плохо знаю указатели. Какие подводные камни скрывает моя функция?

    Nipheris
    @Nipheris Куратор тега C++
    А когда людям надоело, что такие функции уходят в память, к которой у функции нет доступа (в т.ч. за счет специально сфабрикованных параметров, приводящих к неприятным последствиям, см. buffer overflow), придумали парные "безопасные" варианты, например strnlen. Там помимо строки, вторым параметром указывается максимально возможная длина переданной строки (к примеру, для пути к файлу это будет 255 символов). Обычно это длина какого-либо буфера, в который помещается строка. Аналогичные пары есть и для других функций: strcpy/strncpy и т.д.
    Ответ написан
  • Как организовать словарь для быстрой работы с ним?

    Nipheris
    @Nipheris Куратор тега C++
    Из структур данных попробуйте посмотреть вот это (если конечно вам нужен поиск подстроки, а не всей строки целиком): https://ru.wikipedia.org/wiki/%D0%A1%D1%83%D1%84%D... , там есть ссылки на известные труды, что касается "не загружать оперативную память" - в общем-то для любой структуры данных можно организовать гибридное хранение - сам индекс построить заранее и хранить на диске (вполне логичный ход в случае предварительно подготовленного словаря), а в память загружать части индекса. Однако это значительно усложнит алгоритмы, нужно это вам или нет - зависит от деталей поставленной задачи (объем словаря, предельное время поиска и т.д.)
    Ответ написан
    Комментировать