• Быстрый поиск по базе. Что выбрать?

    Nipheris
    @Nipheris Куратор тега C#
    кроме SQL

    Ну раз не SQL (каковы объективные причины?), то берите любую key-value базу и пишите в неё. Поиск будет идти по ключу целиком или по части?
    Вы сейчас описали стандартную задачу для любой нормальной базы данных. Т.е. той, в которой есть индексы. Рассуждать имеет смысл только если вы укажете, насколько часто будут вставляться строки, и какие точно будут выборки.
    Ответ написан
  • На чем быстрее парсить?

    Nipheris
    @Nipheris Куратор тега C#
    HtmlAgilityPack либо же использовать Регулярные выражения?

    stackoverflow.com/a/1732454/3927447

    Этим все сказано.
    Ответ написан
    1 комментарий
  • Как лучше хранить в MySQL временную зону?

    Красивое решение будет тогда, когда вы точно определитесь, что вам надо хранить. Если условия задачи говорят, что нужно хранить по одной зоне на каждое смещение относительно UTC - это одно. Тогда можно хранить только смещение относительно UTC (не вижу проблемы с отрицательными, учтите только, что не все смещения кратны одному часу). Чтобы красиво смотреть глазами, нужно завести отдельную таблицу с названиями таймзон и джойнить с ней, чтобы посмотреть.
    Если вам нужна таймзона в каждом городе - это совсем другая история. Или в каждой точке планеты с целым значением широты и долготы.
    Если вы хотите 1-в-1 взять с Википедии, прилепите суррогатный id к тому что там написано, и пользуйтесь.
    Ответ написан
    Комментировать
  • Технологии для разработки клиент-серверной информационная системы на Windows XP?

    с обязательной возможностью запуска клиента на Windows XP

    Имхо, единственное требование, ограничивающее возможность выбора, т.к. все остальное - тривиально.

    На XP ставится .NET FW 4.0, поэтому берите C#+WPF и разрабатывайте. Можно и WinForms в принципе, если это приложение а-ля картотека.
    Т.к. на сервер - современная ОС, то и стек на сервере можете выбирать, какой нравится (это если клиент нужен тонкий).

    Система формирования и печати отчетов

    Библиотек под дотнет достаточно. Если задача прям совсем нестандартная, вас выручит XML и XSL-FO.
    Ответ написан
    Комментировать
  • Какое железо взять для программирования в 2016 году?

    в бюджет 1000-1500$ (чистая стоимость железа)

    Игры совсем не обязательно, чтобы тянуло.

    Это шутка такая? Да за такие бабки серверную машину можно собирать.

    Если по делу, то советую затариться оперативой, благо она дешевая, а жрут её сейчас все, тем более если планируете запускать эмуляторы/виртуалки.
    Ответ написан
  • Как лучше структуризировать данные mongodb?

    Надо сказать, что вам удалось меня поразить.

    Можно довольно много говорить о том, для каких связных данных и для каких запросов лучше использовать реляционные и графовые базы. При какой глубине переходов по связям реляционной будет достаточно (и даже лучше именно их), а при каких уже лучше графовую.

    Но вы сделали невозможное. Вы смоделировали классическую задачу "друзья друзей" в максимально неподходящей для этого модели данных - документной. И теперь вы хотите
    Неких JOIN такой.


    Итак, еще раз, знакомьтесь: графовая БД. Из конкретных представителей рекомендую посмотреть Neo4j и OrientDB.
    Важно, что обе СУБД имеют средства для хранения "отношений со свойствами", т.е. ваших
    у друзей свои уникальные свойства по отношению к этому пользователю

    Вот пример из доков по Neo4j:
    Relationships between nodes are a key part of a graph database. They allow for finding related data. Just like nodes, relationships can have properties.

    Картинка.
    Аналогичная концепция в OrientDB:
    In addition to mandatory properties, each vertex or edge can also hold a set of custom properties. These properties can be defined by users, which can make vertices and edges appear similar to documents.

    Да, кстати о документах. OrientDB позиционируется как документно-графовая, так что вполне возможно вам с ней будет проще. Вот их самосравнение с Монгой: orientdb.com/orientdb-vs-mongodb

    P.S. Да, маркетинг - великая сила. Это я про MongoDB.
    Или вообще для реализации данного желательно делать это все не на mongo?

    Хорошо, что вы осмеливаетесь задавать себе такой вопрос. Это правильно.
    Ответ написан
    Комментировать
  • Зачем нужны исключения?

    Исключения - это принципиальный подход к обработке ошибок и структурирования кода обработки нештатных ситуаций. Исключения сегодня есть во многих современных ОО-языках, и в целом работа с ними совершенно не зависит от того, как, куда и какие выдаются сообщения.
    То, что вам вываливается не очень удобный для чтения текст - это вопрос конкретно поведения PHP для непойманных исключений, а не исключений в принципе. Если почитаете не только про то, как исключения выбрасывать, а еще и как их обрабатывать, то возможно поймете, что при возникновении исключения можно совершить любые необходимые действия в скрипте, как то записать ошибку в текстовый лог, записать в БД с датой и временем, или даже послать SMS дежурному администратору.
    Не знаю, что вы использовали в качестве источника (неужели книги по PHP так плохи?), но вы что-то явно не дочитали про исключения. Сейчас ваш вопрос похож на такой: "Зачем мне нужна фура, если я могу добраться на работу на 38-м автобусе?". Т.е. как если бы вы раньше не видели грузового транспорта, и не представляли бы, что с ним вообще делают.
    Ответ написан
    Комментировать
  • Что делают делегаты в C#?

    Nipheris
    @Nipheris Куратор тега C#
    Функциональный объект.
    Как разберетесь, что это, так и поймете, что такое делегат.
    Ответ написан
    Комментировать
  • Как организовать работу транзакций в микросервисной архитектуре?

    Nipheris
    @Nipheris Куратор тега C#
    Теоретический аспект: https://en.wikipedia.org/wiki/Two-phase_commit_protocol
    Реализация: https://msdn.microsoft.com/en-us/library/system.tr... , ну или свой велосипед (на базе HTTP или очередей сообщений).
    Ответ написан
    Комментировать
  • Почему появилась мода на новый синтаксис?

    Действительно, не такой уж он новый. Паскаль уже вспомнили, вот добавлю еще: https://en.wikipedia.org/wiki/Standard_ML

    Синтаксис переменная : тип стал популярнее потому, что стали популярнее языки НЕ из семейства Си (C/C++/C#/Java), в которых отличается не только семантика, но и синтаксис.

    Кстати, я не уверен даже, какой синтаксис появился раньше)
    Ответ написан
    Комментировать
  • Как сделать чёрные заголовки у окон в Windows 10?

    Придется покопаться в реестре:
    www.howtogeek.com/222614/how-to-enable-windows-10%...
    Ответ написан
    Комментировать
  • Какую литература почитать по asp.net core?

    Почему ж вы не указали ту книгу, которую нашли?
    Чем она вас не устроила?
    На каком она языке?
    А на каком хотите вы?

    Чёрт, слишком много вопросов в ответе).
    Изучать стоит, сейчас там кардинально уже ничего не изменится, система в целом уже спроектирована, я думаю сейчас чинятся только баги. Даже если пара классов пропадёт или пара новых появится, я думаю шока у вас быть не должно.
    Когда выйдет в продакшн, вы уже будете готовы работать с ним, это ж хорошо.
    Ответ написан
    Комментировать
  • Как писать тесты в asp.net mvc не затрагивая Entity Framework?

    Nipheris
    @Nipheris Куратор тега C#
    Как мокать EF не используя не нужный слой абстракции с репозиторями таким образом чтобы весь функционал EF оставался рабочим?

    Может, не такой он уж он не нужный? Репозиторий нужен в том числе для того, чтобы иметь четкий список методов для тестирования. Я сейчас вообще не могу толком понять, что вы тестируете.
    Ответ написан
    Комментировать
  • Как правильно организовать проект, выкладываемый в open source?

    Да, возможно, это тоже важно. Библиотека написана на С++.

    Да, это важно. Мы тоже используем примерно ту же структуру проектов, и стараемся её придерживаться на всех используемых платформах, однако технические различия между ними диктуют и различия в структуре. Например, папка include в мире .net не нужна, т.к. вся необходимая информация о содержимом библиотеки находится в самой сборке. То же касается и Java-библиотек. В целом, я согласен с вами по структуре репозитория (единственная вкусовщина для меня - называть папки docs и tests во мн. числе :)).

    Другие папки - какие?

    Вот в последнее время считаю крайне полезной папку examples с кодом примеров по использованию библиотеки. Очень удобно, когда на основные сценарии использования либы есть по проекту/файлику с кодом примера. Очень быстро можно пробежаться по возможностям библиотеки, и оценить удобство использования (накануне сранивал таким образом json-либы для C++). И для вас это тоже своеобразные "тесты" на удобство. У этих "тестов" задача не покрыть логику на 100%, а показать, как взаимодействовать с библиотекой в основных, стандартных сценариях.

    Отмечу, что вы очень хорошо написали про API библиотеки в include. Многие разработчики почему-то кладут в эту папку и приватные хедеры тоже. Я лично в этом смысла не вижу - все приватные хедеры это часть основных исходников, а они находятся в /src.

    потом копи-пастой тащу папку include и папку с собранными бинами к себе в проект

    Вот это я не знаю честно говоря, зачем вы делаете - папки include и lib как раз на то и рассчитаны, чтобы их было удобно подключать к компилятору и линковщику - как раз пути к этим папкам и передаются при подключении зависимых библиотек. Единственное, что может быть нужно скопировать из папки библиотеки - собранные бинарники (dll/so) в случае динамической линковки, если нет возможности/желания прописывать пути к динамическим библиотекам. Ну и какие-нибудь файлы данных, если таковые есть.

    Тесты вообще должны собираться вместе с библиотекой (например, в папку /bin), также по идее ничего никуда копировать не надо.

    Вообще ваш вопрос сильно связан с организацией процесса сборки библиотеки и её подключения к другим проектам. В C++ к сожалению до сих пор нет стандартного или хотя бы популярного соглашения об управлении зависимостями, иными словами, пакетного менеджера. Многие библиотеки сегодня подключаются через системные пакетные менеджеры, если таковые присутствуют в ОС.

    Также, вы почему-то не указали используемую систему сборки. В том же CMake есть очень полезная фишка, называется find_package, которую грех не использовать.

    В целом, отмечу что копи-пасты должно быть минимум, include и lib копироваться не должны вообще, для этого у любого компилятора есть ключи (например, -I и -L). Даже если копирование неизбежно, его следует максимально автоматизировать в сборочных инструкциях. Многие системы сборки умеют определять, что некоторые файлы устарели (например, вы перекомпилили dll), и в этом случае их можно попросить скопировать эти файлы.

    Чем вы все-таки либу свою собираете? Это важно, т.к. даже для опытных разработчиков сборка незнакомой C++ библиотеки может стать целым делом.

    Да, кстати еще момент с include-ами: именно по причине того, что библиотеки обычно подключаются путем указания путей компилятору и линковщику (которые потом соберут содержимое всех include и lib-папок в единое пространство имён), есть популярная договоренность создавать в папке include подпапку с именем библиотеки, например: раз, два, три. Это даёт возможность инклудить так: #include <soci/blob.h>, а не так: #include <blob.h>. Это позволяет разработчику называть файлы коротко и так, как ему удобно (blob.h вместо soci_blob.h), и при этом сводить риск конфликта имен инклудов к минимуму.
    Ответ написан
    7 комментариев
  • Оправдано ли использование строкового первичного ключа?

    Оправдано ли будет сделать первичным ключем гос.номер, т.е. , допустим, поле nchar(6)?

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

    Для СУБД небольшая строка фиксированной длины (напр, 12 байт) - все равно что большое число, особой разницы в общем-то нет. А вот строки переменной длины как правило хранятся иначе, в отдельной области, а в самой записи ставится указатель. Все это, разумеется, удорожает запросы.
    Ответ написан
    5 комментариев
  • Как разместить REST методы в контроллере?

    Nipheris
    @Nipheris Куратор тега C#
    Контроллеры - это ваши проекции сущностей в сервисе (грубо говоря, объектов ваших классов бизнес-логики) на ресурсы веб-API, предоставляемого сервисом. Какие сущности проецировать на ресурсы, а какие - нет, целиком зависит от того, какое API вы хотите получить в конечном счете. В каких контроллерах это делать и стоит ли разбивать N контроллеров на M контроллеров - зависит от того, как вам удобно их реализовывать. Ну это примерно то же самое, что спросить "стоит ли разбивать 5 классов на 10?". У каждого контроллера - своя ответственность. Если вы четко понимаете ответственность каждого контроллера - разбивать не надо. Если вы перестали понимать и какой-то контроллер начал делать слишком много разных вещей - надо разбить.

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

    методы реста post (добавление, обновление, удаление, просмотр)

    вот этой фразы не понял.
    Ответ написан
    4 комментария
  • Почему не работает функция?

    Nipheris
    @Nipheris Куратор тега C++
    Для вещественных чисел нет сравнения ==. Есть сравнения (a - b) <= eps. В большинстве случаев так и нужно, т.к. вещественными числами моделируется континуальные величины из реального мира (т.е. те, в которых не обязательно считать с точностью до каждой цифры).

    С другой стороны, для денежных расчётов вещественную арифметику использовать нельзя, т.к. деньги в принципе дискретны. Никто не хочет по определению увидеть 4.74999999...$ вместо 4.75$. Для таких расчетов используются decimal-типы (таких типов не в стандартном C++, есть реализованные в виде библиотек).

    Она должна превращать такие числа 0.475 в такие 475

    Строго говоря, задача поставлена некорректно. Ну или бессмысленно. Такую задачу можно было бы поставить для decimal-типов, которые считаются всегда точно, и количество десятичных цифр в их записи ПРЕДСКАЗУЕМО. А для float у вас будет получаться что-то вроде 4749999999998.

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

    В общем, добро пожаловать в мир машинной арифметики.

    https://en.wikipedia.org/wiki/Floating_point
    https://en.wikipedia.org/wiki/Decimal_data_type
    Ответ написан
    Комментировать
  • Какие существуют архитектуры взаимодействия с базой данных?

    А вы по какому признаку хотите классифицировать? Я вот могу назвать такую архитектуру клиент-серверной, а еще многослойной.
    Какие альтернативы? Ну, во-первых сам WCF может быть очень разный, и SOAP, и REST. Во-вторых, некоторые клиенты (например, административного характера) могут цепляться напрямую к базе (к примеру, они имеют доступ к серверу по VPN), и тогда веб-сервиса между БД и клиентом нет.
    Также, приложение может работать не сразу со веб-сервисом/БД, а к примеру складировать данные в локальную базу (какой-нибудь SQLite), а потом её синхронизировать с основной БД - также через сервис или напрямую (зависит от доверия к клиентскому приложению) - это сложнее с точки зрения наладки всего процесса, но иногда просто необходимо, если связь с центральным сервером БД не гарантирована (иногда приложения на мобильных устройствах должны работать и вне большого города и толстого 4G канала).

    WCF-служба может пользоваться ORM или программист может заранее составить все SQL-запросы.
    WCF-служба может хоститься и на IIS, если это удобно. Хотя, если она выполняет в БД фоновые операции, то вполне правильно и логично хостить её в Виндовом сервисе.

    Каждый из перечисленных вами слоёв можно поменять/убрать/упростить/усложнить. А еще, например, можно вспомнить про многопользовательскую работу и возможные проблемы при работе разных людей с одними и теми же данными, что тоже повлияет почти на все слои в вашей схеме.

    Вас что конкретно интересует? Нужно хотя бы говорить о клиенте или сервисе отдельно, т.к. это сами по себе крупные компоненты со своей архитектурой.
    Ответ написан
  • Как правильно передавать параметры?

    как передавать id, чтобы изменить его было нельзя?

    Чтобы id изменить было нельзя, его лучше никак не передавать.

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

    Если можно удалять только последний/первый/какой-то там комментарий, то и реализуйте в API это специфическое действие - удалить последний комментарий. Тогда для удаления других комментариев у юзера просто не будет рычагов в вашем API.

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