Задать вопрос
  • Нужно ли создавать несколько пользователей для доступа к БД?

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

    Если толстые клиенты тоже есть, т.е. такие, которые сами содержат бизнес-логику и напрямую пишут в базу, то тогда есть смысл разделять пользователей. Как правило, разделение идёт по ролям в приложении. Т.е. для всех бухгалтеров отдельный пользователь, для всех складовщиков - также. Это поможет ограничить множество допустимых действий с БД и уменьшить риски (которые по определению будут в случае толстых клиентов).

    Разумеется, два приведенных варианта не взаимоисключающие. Например, большинство пользователей (особенно внешних) могут работать через веб-сервис, которому выделен отдельный пользователь БД, а несколько человек из персонала, для большей гибкости работы с базой (администраторы, аналитики) могут иметь отдельных пользователей с более богатым набором прав.
    Ответ написан
    1 комментарий
  • С++ Как получить массив из вложенного JSON (JSONCPP) и записать его в файл сохраняя бинарность данных?

    Nipheris
    @Nipheris Куратор тега C++
    С jsoncpp не работал, код написан по исходникам библиотеки:
    for (const auto v : jsonObject["buffer"]["data"]) {
        const std::uint8_t b = static_cast<std::uint8_t>(v.asInt());
        // пишете b в файл
    }

    Что вы пытались сделать в приведенном коде, я так и не понял. Касательно записи в файл - история отдельная.
    Ответ написан
    Комментировать
  • Программирование с ноля. Не студенческий возраст. С чего начать?

    Итак, раз для домашнего пользования, то Java лучше отложить. В принципе они примерно равны с C# по весовой категории и областям применения, но ИМХО на Шарпе проще набросать какое-нибудь десктопное приложение. Для написания десктопной карточной игры вполне подходящий вариант.

    Для Ардуино понадобится C/C++, это вам правильно говорят. По сравнению с C# синтаксис похож, но различаются многие концепции, C++ и тем более Си значительно ближе к железу.

    Играю семь бубей!
    Ответ написан
    1 комментарий
  • В чем разница между многопоточностью, многозадачностью и многопроцессовостью?

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

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

    3. Многопроцессность - вариант реализации вычислений, когда для решения некоторой прикладной задачи запускается несколько независимых процессов. В системах, где под процессом понимается сущность, владеющая ресурсами (памятью, открытыми файлами, сетевыми подключениями), несколько процессов запускаются с целью повышения отказоустойчивости приложения а также с целью повышения безопасности. Т.к. ОС выполняет разделение памяти и прочих ресурсов именно между процессами (в то время как потоки работают в едином адресном пространстве), то а) внезапно упавший (читай - убитый ОС) процесс не уронит остальные; б) если в процессе начал выполняться чужеродный код (например, из-за RCE уязвимости), то он не получит доступ к содержимому памяти в других процессах. Многопроцессность сегодня можно увидеть в браузерах, когда отдельные вкладки выполняются в разных процессах, и упавшая вкладка (из-за js или из-за кривого плагина) тянет за собой не весь браузер, а только себя или еще пару вкладок.
    Ответ написан
    1 комментарий
  • Как правильно настроить git?

    Правильная настройка заключается в использовании одного репозитория для сильносвязанных вещей, и разных - для слабосвязанных. Вы зачем-то разбили по разным репам верстку и фронтэнд-код, а теперь думаете, как бы это всё склеить. Вы дискредитируете всю суть Git как инстурмента для координации командной работы с файлами.

    А так действительно могу предложить только subtree. Хотя смысла в такой организации работы, конечно, не вижу.
    Ответ написан
    2 комментария
  • Почему программа не отвечает во время скачивания методом WebClient?

    Nipheris
    @Nipheris Куратор тега C#
    Очевидно потому, что вы вызываете синхронный метод скачивания (DownloadFile), и он вешает event loop до момета завершения загрузки. Асинхронно качать не пробовали?
    Ответ написан
    Комментировать
  • Как HR и работодатели относятся к соискателям, у которых есть свой сайт?

    Не будете ли вы заниматься своим сайтом в рабочее время?

    Не будете ли вы заниматься семьёй в рабочее время?
    Не будете ли вы смотреть футбол в рабочее время?
    Не будете ли вы гонять в танки в рабочее время?

    Я привык сам контролировать, куда и где уходит моё время, и соблюдать принятые мной договорённости. Если у вас также - думаю вы имеете все основания сказать об этом сотруднику отдела кадров, чтобы подобные вопросы больше не повторялись. Есть миллион гораздо более эффективных способов следить за производительностью коллег, чем задавать такие вопросы.
    Ответ написан
    2 комментария
  • Как подключить к элементу управления источник данных находящейся в экземпляре класса, который в свою очередь находится в ObservableCollection?

    Nipheris
    @Nipheris Куратор тега C#
    При условии, что сама эта коллекция будет находится в экземпляре класса RemoteClientViewModel.

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

    Кроме того, мне нужно чтобы при клике на элемент списка ListBox в ListView отображался соответствующий этому клиенту (т.е той ViewModel которая подключена к этому элементу) список файлов.

    Всё очень просто - сделайте в MainViewModel свойство SelectedЧТОТО, в пару к вашей коллекции. Например, если коллекция это RemoteClients, то и свойство - SelectedRemoteClient. Забиндите SelectedItem ListBox-а к этому свойству. Разумеется, не забудьте его правильно реализовать, с NotifyPropertyChanged. Затем привяжите ItemsSource ListView-хи к SelectedRemoteClient.Files, где Files это коллекция с информацией о файлах. Если не будет работать, пишите, попробуем другой вариант.
    Ответ написан
    7 комментариев
  • Зачем нужны учётные записи в windows?

    Забыла пароль от старого компьютера с виндовс хр, запустилась с безопасного режима и все.

    Как уже сказали, кто имеет физический доступ - тот хозяин машины. Так было всегда. Это значит, что разграничение прав будет работать только при запущенной ОС и только через легитимные каналы, которые ОС в состоянии контролировать. Например, при доступе по сети, или при доступе в консольном режиме, т.е. с помощью клавиатуры и монитора. ОС не может гарантировать, что, имея доступ к железу, вы не вставите какую-нибудь волшебную железку, читающую оперативную память или еще что в таком духе.

    Вот так пришёл к другу в гости, вставил флешку, загрузился с неё и копируй с диска, что тебе надо, потом дома посмотришь.

    Знакомьтесь: EFS, BitLocker. И то и другое позволяет защитить данные от несанкционированного чтения людьми, получившими физический доступ к компьютеру и носителям информации (украли, например, и вытащили диск).

    И да, разраничение данных пользователей это не то же, что их защита. В Win 98/ME вообще не было ограничений на уровне файловой системы и "пароль" был лишь формальностью - чтобы настройки пользователей можно было разграничивать, как и содержимое пользовательского профиля. В те времена защиты действительно не было, даже внутри самой операционной системы.
    Ответ написан
    Комментировать
  • Как защитить запрос UPDATE от SQL-иньекций в SQLite?

    https://www.sqlite.org/c3ref/prepare.html

    Часто такое называют preapred statement или prepared query, так что гуглить полезно еще и по этим запросам).
    А какой плагин-то?
    Ответ написан
    Комментировать
  • Как читать и записывать xlsx стандартными средствами .NET?

    Nipheris
    @Nipheris Куратор тега C#
    Если вас интересует xlsx, можете стандартными средствами его распаковать (т.к. это обычный ZIP), и поработать с содержимым. Основное содержимое книги будет в XML (не помню имя файла), так что сформировать его особых проблем не составит. Если вариант подходит, расскажу подробнее, что можно сделать.

    А вообще EPPlus тащит.
    Ответ написан
    1 комментарий
  • Где найти готовые шаблоны баз данных?

    Если речь идёт о реляционной БД, то вот шаблон правильной базы данных: нормальная форма. По мере наработки опыта по проектированию БД, эти формальные правила превратятся в интуицию. Сейчас вам достаточно понять, от чего вас оберегает соблюдение нормальных форм.
    Ответ написан
    Комментировать
  • Перевызов событий?

    Nipheris
    @Nipheris Куратор тега C#
    Потому что ивент - это не то же самое, что делегат. Ивент ограничивает интефейс делегата только двумя операциями - добавить и удалить обработчик. Это делается для того, чтобы только изнутри объекта можно было сгенерировать событие. Иными словами, чтобы никто не мог, к примеру, "нажать" кнопку вместо самой кнопки (т.е. сгенерировать событие Clicked в обход внутренней логики класса "Кнопка"). В этом принципиальный смысл концепции событий.

    Можно провести аналогию между полем/свойством и делегатом/событием. Как свойство - это в некоторых случаях "интерфейс" для поля, который позволяет контроллировать, как оно изменяется (при этом вы можете использовать генерируемое поле с помощью синтаксиса { get; set; }), так и событие это "интерфейс" для делегата - вы не можете напрямую изменять или вызывать делегат, вы делаете это с помощью события. Можете также почитать про синтаксис add/remove у событий - тогда аналогия со свойством будет еще понятнее.

    Зачем делать InvokeEvent не совсем понятно, видимо это просто какой-то пример. В реальном коде класс MyClass должен сам решить, когда вызывать то или иное событие.
    Ответ написан
    5 комментариев
  • Где находится Atom в win10?

    Ищите в C:\Users\имя_пользователя\AppData\Local
    Ответ написан
  • Как правильно собрать .exe на C++/CLR?

    Nipheris
    @Nipheris Куратор тега C++
    1. Нужно собрать релизную версию приложения. Не распротраняйте на другие компьютеры дебажные версии. Тогда "d" требовать не будет.
    2. Т.к. приложение на C++, оно будет требовать рантайм. Этот рантайм можно как слинковать статически, так и оставить динамически загружаемым. Это настраивается в свойствах проекта. Если слинковать статически - то тогда dll не потребуется, но и обновить рантайм отдельно от приложения будет невозможно.
    3. Если поставлять рантайм отдельно, как динамически загружаемый (т.е. чтобы была dll), то можно либо класть его рядом с exe, либо устанавливать redistributable версию райнтайма. Второе предпочительнее, т.к. тогда рантайм можно будет обновить с помощью системной обновлялки, если в нём будут найдены критичные проблемы.
    4. Чтобы точно узнать, что требует EXE для своего запуска (не считая модулей, загружаемых с помощью LoadLibrary), воспользуйтесь Dependency Walker.

    Более подробную информацию вы сможете получить на MSDN в разделе деплоя C++ приложений.
    Ответ написан
    2 комментария
  • Как информировать сообщество о новой библиотеке?

    Nipheris
    @Nipheris Куратор тега C#
    1. Делаете хороший README, разумеется на английском, где указываете, как ей пользоваться, и что ей требуется.
    2. Делаете несколько примеров (именно рабочий код в подпапке examples) для основных кейсов применения библиотеки.
    3. Льете на опенсурсный хостинг, если еще не сделали.
    4. Настраиваете CI (например на AppVeyour), это не обязательно, но желательно.
    5. Заливаете готовые пакеты на NuGet. Разумеется, вы должны научиться упаковывать свою библиотеку в нормальный пакет. В nuspec ставите годные правильные теги.
    6. Покрываете тестами, хотя бы частично.

    После этого к вашей библиотеке начнут относиться более-менее серьезно.

    7. Можете попробовать на CodeProject рассказать, там часто рассказывают именно про библиотеки.
    Ответ написан
    4 комментария
  • Как починить проект в visual studio 2015?

    Удалите папку .vs рядом с солюшеном и user-файл рядом с проектом, если такой есть.
    Ответ написан
    Комментировать
  • Какие есть библиотеки для авто тестирования методов с перебором произвольных данных?

    Nipheris
    @Nipheris Куратор тега C#
    IntelliTest - коммерческое развитие исследовательского проекта Pex. Он делает как раз то, что вы хотите. Вот песочница для попробовать.
    Ответ написан
    Комментировать
  • Как лучше организовать таблицы параметров товара?

    То, что вы сейчас делаете - это EAV (Entity–attribute–value), можете гуглить по этому термину. А вообще советую переместить параметры товаров в документную базу (ибо EAV это костыль).
    Ответ написан
  • Пустое поле хранение и выборка?

    0 - это не вариант пустого поля, если вы храните количество чего-либо. Также и с пустой строкой - это не всегда эквивалент NULL. Нулл это вообще даже не пустое, а "неизвестное" значение - важно понимать разницу.

    Как по мне, нет более извращенного способа поставить себе грабли, как экономить место в БД используя/не используя NULL. Это должно целиком определяться предметной областью. Не думаю, что какая-либо СУБД настолько ужасна, что будет тратить на nullable значения в два раза больше места.
    Ответ написан