• Разница между экземпляром класса и классом C#?

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

    Nipheris
    @Nipheris Куратор тега C++
    > Но хочется как то использовать уже реализованные классы потоков if/ofstream - чего добру то пропадать.
    Их и используйте, я бы на вашем месте сделал обертку вокруг другого istream-а (и ostream-а соответственно). Chaining потоков - классический способ решения такой задачи (и не только в плюсах, разумеется). Точно также, например, делают поток-расшифровщик, или поток-расжиматель, если сжатие было поточное (deflate например).
    > что я не знаю точный список всех таких методов, да и вообще недостаточно хорошо знаю устройство работы if/ofstream, чтоб сильно в них ковыряться.
    Какая-то странная причина. Так разберитесь). Список он вполне конкретный, для этого есть стандарт. Справка высокого качества по стд. библиотеке есть на en.cppreference.com/w
    Ответ написан
    2 комментария
  • Плюсы и минусы фронта и бэкэнда?

    Nipheris
    @Nipheris Куратор тега C++
    > третья суровая разработка на кроссплатформенном C++ (опять же ближе к миддлу)
    Чего же вы ждете? Это штучные вакансии, черт возьми!
    Ответ написан
    Комментировать
  • Как лучше хранить GeoJson?

    > Как лучше хранить данные GeoJson в БД?
    Геометрию - в колонке геометрического (или географического, смотря что вам нужно) типа, остальные свойства фич - в колонках соотв. типа.
    > Если хранить пространственные данные в БД, то где потом лучше формировать сам GeoJson?
    на бэкенде при передаче фронтэнду, на фронтэнде - при передаче бэкенду

    Т.к. в реляционных СУБД и так уже придумали, как работать с геометрией, то не вижу смысла в GeoJSON хранить. В какой-нибудь Монге - другое дело, но не в MySQL. А вот для передачи геоданных GeoJSON вполне ничего, поэтому и логичный вывод, где что формировать.
    Вообще странный вопрос, будто у вас основная задача не саму фичу передать и сохранить, а сохранить GeoJSON.
    Ответ написан
    Комментировать
  • Почему MySQL использует только часть индекса?

    Четыре раза перечитал - так и не понял, зачем вам time при айдейте поля с ID процесса на ноль. Если вы сначала делаете так:
    UPDATE `test` SET `lock` = 1 WHERE `lock` = 123456
    то почему потом не сделать с точностью до наборот?
    UPDATE `test` SET `lock` = 0 WHERE `lock` = 1

    Если вы скажете, что несколько процессов могут выполнять задание, и нельзя просто так проставить нули всем заданиям, у кого 1, то я вам скажу, что вам нужна нормальная структура таблицы, и стоит разделить "lock" и "process_id". Хотя конечно непонятно, зачем вам такой переход: 0 -> process_id -> 1 -> 0, сделайте 0 -> process_id -> 0, и у вас будут нормальные запросы:
    UPDATE `test` SET `process_id` = 123456 WHERE `process_id` = 0 ORDER BY `time` LIMIT 1000
    UPDATE `test` SET `process_id` = 0 WHERE `process_id` = 123456
    Ответ написан
    Комментировать
  • Тестовое задание на C# с базами данных и графиками?

    Nipheris
    @Nipheris Куратор тега C#
    Я часто советую взять что-нибудь из реальной жизни и автоматизировать. Я вот, к примеру, так и не нашел для себя удобной домашней бухгалтерии - чтобы вбивать чеки за день максимально быстро (с автодополнениями всякими), и считать простейшую статистику - набросал за пару вечеров сам. То же и вам советую - может вы любите что-то, спорт, или игры какие - нескончаемый источник статистики, графиков, и данных. Поставил личный рекорд стометровки - открыл прогу, забил инфу.
    Если любите книги - то можете потренироваться в автоматизации личной библиотеки.
    Ответ написан
    Комментировать
  • Какой из парсеров JSON для C# самый простой?

    Nipheris
    @Nipheris Куратор тега C#
    @Mr_Sinister
    > но он создает кучу объектов
    безусловно, библиотека библиотеке рознь, но если вы всерьез заморочились производительностью этой де-факто стандартной JSON-либы, то:
    0) вы ищите проблему производительности там, где ее нет (а есть в другом месте)
    1) самое время все-таки протестировать, и написать свое, более подходящее (редко, но бывает и такое)
    2) вам не нужен JSON, возьмите protocol buffers
    3) вам не нужен C#, возьмите C++
    Ответ написан
    Комментировать
  • Какая должна быть структура SQL запросов, учитывая текущего пользователя?

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

    Без сторонних программ могу посоветовать только поставить IIS и настроить HTTP/FTP доступ. Разумеется будет работать только при наличии внешего IP.
    А так, чтобы было "как в локальной сети", нужен VPN. На клиентской винде стандартными средствами VPN точку доступа не заведешь, поэтому OpenVPN вам в руки, хотя все равно нужен внешний IP или на одном из компов, или на третьей машине, к который эти два будут коннектиться. Ну или TeamViewer как раз таки можно в качестве этой "третьей машины", с ним будет проще (правда бесплатным вариантом пользоваться почти невозможно, поэтому готовьте $).
    BitTorrent Sync и прочие около-облачные дела это тоже вариант, конечно.
    Ответ написан
    Комментировать
  • Расшифровка файла в строку - как реализовать?

    Nipheris
    @Nipheris Куратор тега C#
    FileStream-ы замените на MemoryStream-ы поверх буферов, а с буферами уже делайте что захочется. На то абстракция потока и существует, грех не воспользоваться.
    Ответ написан
    Комментировать
  • Как научиться строить модели БД sql в связке с С# (Цель- писать понятные ТЗ для программистов С#)?

    Nipheris
    @Nipheris Куратор тега C#
    Сложно вам посоветовать в такой ситуации что-либо. Интересно, чем занималась контора та, что программисты C# с sql не знакомы, разве что играми..
    В целом вам надо ознакомиться с современным представлением о реляционных БД (вы же все-таки аналитик, вам нужно знать на разных уровнях и масштабах), с архитектурой приложений, использующих РБД (толстые и тонкие клиенты, веб-приложения), и потом уже некоторые детали касающиеся языка.
    С точки зрения программиста C#, я бы от вас как от аналитика ожидал знание различных принципов и дисциплин доступа к рел. данным, а именно:
    - использование ORM: когда можно и нужно), когда хочется, но нельзя, когда можно "толстую" ORM (Entity Framework, NHibernate), а когда - тонкую (LINQ to SQL); использование кода на стороне БД - триггеры, хранимые процедуры;
    - принципы построения слоев доступа к данным в сочетании с бизнес логикой (паттерны и антипаттерны в этих ситуациях, например Anemic Data Model);
    - способы контроля версий схемы реляционной БД - миграции, source control для триггеров и хранимых процедур (если они есть), политики обновления схемы вместе с выкатыванием новой версии ПО;
    - формирование тестовых данных в тестовых базах;

    Вот если сможете по этим вопросам проконсультировать, то разработчикам останется только подучить SQL и конкретную ORM, если будете использовать.
    Ответ написан
    5 комментариев
  • Как реализовать скелетную модель?

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

    1) находим середину отрезка AD - среднее арифметическое по x и по y
    2) для простоты будем считать середину отрезка началом координат
    3) находим k, которое из уравнения прямой y = kx: k = y1/x1
    4) решаем систему:
    - у = kx
    - sqrt(x^2 + y^2) / sqrt(x_1^2 + y_1^2) = scale
    Ответ написан
    Комментировать
  • Как выполнять функцию без зависания главной формы в qt?

    Nipheris
    @Nipheris Куратор тега C++
    Берете и разбирайтесь с QThread. Для остановки/запуска используете сигналы/слоты (смысл QThread в том, что он умеет запускать свой eventLoop, и ловить QueuedConnection-сигналы из других потоков)
    Ответ написан
    Комментировать
  • Как показать диалог в потоке BackgroundWorker'a на WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Может попробуем решить более общую задачу? Вам зачем показывать диалог в потоке? Что в принципе это даст?
    Ответ написан
  • Где полезны графы?

    > где наряду с NoSQL еще и графы используются
    интересная формулировка)

    > В каких случаях это в БД может быть полезно?
    во всех задачах, где глубина и "разнообразие" связей между сущностями сравнимо с количеством этих сущностей.
    Возьмем для примера две простые ситуации:
    1) есть заказ в интернет-магазине с некоторым числом заказанных товаров. Вне зависимости от того, реляционную модель вы будете использовать или какую-то еще, скорее всего вам будет удобно рассматривать две сущности: Order и OrderItem. В первую вы добавите сведения обо всем заказе целиком (инф. о клиенте, дату заказа, выбранный способ доставки, способ оплаты и т.д.). Во второй сущности у вас будет, например, id товара и его количество (1 микроволновка, 2 флешки, 5 CD-R). Теперь, чтобы вы могли знать, что какие-то OrderItem имеют отношение к конкретному Order, вам следует тем или иным способом смоделировать связь. Если у вас SQL-база, вы добавите к Order-у поле Id, а к OrderItem поле OrderId и сделаете внешний ключ. Если у вас документная база, то, к примеру, можно весь заказ с его элементами разместить в одном json-документе, и элементы заказа будут подобъектами в массиве items объекта заказа. Со временем у вас появится много заказов и много элементов заказов. Однако связи между ними у вас всегда будут достаточно простые: у каждого заказа будет некоторое количество элементов. Сами заказы вы связывать не будете, как не будете связывать элементы заказа. Глубина связей сущностей будет ограничена одним переходом.
    2) у вас есть социальная сеть (да, знаю, банальный пример), и конечно же у вас есть функция "добавить в друзья". В отличие от предудыщего примера, мы для рассмотрения можем взять только одну сущность - "пользователь", однако за счет того, что каждый каждого может зафрендить, у вас даже для одной сущности будет очень большой набор фактических связей, потенциально с большой глубиной (знакомые знакомых и т.д.).

    Обе проблемы теоретически можно решить с помощью SQL баз данных, однако графовые базы будут выигрывать во второй задаче в сложных запросах по обработке связей (скажем, найти всех моих друзей, которые идут на такое-то мероприятие). Этот выигрыш вытекает из архитектурных особенностей графовой БД, например, в графовой базе часто при сохранении связи сохраняется "указатель" на физическое расположение связанных данных, в то время как в реляционной базе связи моделируются внешними ключами, и при обработке требуют выполнения операций поиска (пусть и индексированного). Вообще, в каком-то смысле связи в графовой БД это first-class citizens, а в реляционной БД связи моделируются программистом (ограничения целостности вроде внешних ключей просто помогают ему поддерживать данные в согласованном состоянии).
    Ответ написан
    2 комментария
  • Ошибка сервера Apache на mac os x - forbidden 403, что делать?

    Как насчет того, чтобы index.php сделать индексным файлом? phpmyadmin это ж папка на ФС, не? Апач по дефолту кинет 403 для существующей папки, если просмотр индекса не разрешен и индексных файлов не настроено.
    Ответ написан
  • Наследование интерфейсов и приведение по типу интерфейса: они добавляются в метаданные класса?

    Nipheris
    @Nipheris Куратор тега C#
    dad1fdc6f77e49efab5032ce7efa934c.png
    Возможно я не понял вопроса, но так или иначе в метаинфе о классе есть инфа об интерфейсах, которые он реализует (было бы странно, если бы ее не было :)). Т.к. указана и сборка, и полное имя интерфейса, и IDE-шкам ничего не мешает идти по дереву типов и смотреть где что есть.
    Оффтоп: т.к. "наследовать" из интерфейса нечего, принятно говорить, что интерфейс "реализуется" (implemented) классом, чтобы подчеркнуть отличие от наследования, когда помимо установления отношения is-a классом наследуется и какая-то реализация. То, что в описании класса и базовый класс и интерфейсы перечисляются в одном списке не значит, что суть одна и та же.
    Ответ написан
  • Не удается разрешить сборку VC90.DebugCRT?

    Nipheris
    @Nipheris Куратор тега C++
    Значит так, во-первых вам для Qt и для вашего приложения нужно использовать один тулчейн (компилятор), иначе будет огромное количество странных проблем. Т.к. вы разрабатываете в 2012-й студии, а, к сожалению, официально 4-й кьют под эту студию не собирался, вам придется как минимум поставить компилятор из 2010-й студии (не помню, возможно 2012-ю можно таргетировать на старый компилятор, чтобы не ставить 2010-ю студию целиком). Можно и попробовать собрать из исходников, но я не могу назвать это простым делом.
    Во-вторых, если мы представим, что вы выполнили предыдущий этап, и у вас есть собранный Qt и компилятор той же версии, то в зависимости от конфигурации (Debug|Release) ваша программа будет линковаться на разные рантаймы. DLL-файлы рантайма имеют букву 'd' в конце имени файла. Для разных версий VC++ они называются по разному:
    msvcr90[d].dll+msvcp90[d].dll - Visual Studio 2008 (MSVC 9.0)
    msvcr100[d].dll+msvcp100[d].dll - Visual Studio 2010 (MSVC 10.0)
    msvcr110[d].dll+msvcp110[d].dll - Visual Studio 2012 (MSVC 11.0)
    msvcr120[d].dll+msvcp120[d].dll - Visual Studio 2013 (MSVC 12.0)
    Для чего я это привел - т.к. ваша ошибка прилетела скорее всего из подсистемы side-by-side, и связана с конфликтом версий библиотек, в качестве workaround советую вам найти дебаг-библиотеки там где у вас установлена студия, и скопировать из к exe-шнику вашего приложения, чтобы эти библиотеки подхватывались приоритетнее. Однако перед тем, как вы это сделаете, попробуйте следующее:
    0) разберитесь с версией компилятора, под которую собирался Qt. Возможно лучшее решение - таки поставить компилятор из 2010-й, не решив этот вопрос продолжать нормально работать невозможно
    1) убедитесь, что пересобрали проект (сделайте Rebuild All)
    2) поставьте апдейты на 2012-ю студию, если она не последней версии
    Если проблема останется, возьмите Dependecy Walker, натравите на Exe-шник, и проверьте, откуда он подтягивает debug-библиотеки.
    Если есть вопросы - в комментарии.
    Ответ написан
  • Есть такие, кто еще не получил обновление Windows 10?

    Обновления выкатываются волнами, чтобы не снести крышу серверам и каналам связи, так что гарантий что все случится именно сегодня, вам не дадут. Тут только на тостере каждый день по 5 вопросов вроде "а подойдет ли мой ключ от 8-ки?", "а можно ли потом будет переустановить на форматированный диск", "а я получу, если я ... ?". Представьте теперь, сколько людей этот апдейт сейчас качает.

    > Один на макос параллелс ставит 10ку и как-то совсем грустно, если он первее заюзает.
    Реально заняться нечем? В кино или на прогулку сходите, время пройдет незаметно.
    Ответ написан
    Комментировать