Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

Библиотека под unix для работы с изображениями

Подскажите пожалуйста либу под unix, которая позволит выполнять все функции с изображениям: обрезать, склеивать, переворачивать, и т.д.
Желательно уже скомпилированную и с описанным API.


Ответ

вопрос не по стандартам, но
http://www.boost.org/doc/libs/1_61_0/libs/gil/doc/index.html http://www.imagemagick.org/Magick++/Image++.html - с чем в этом примере вы не смогли разобраться? еще более высокоуровневая либа http://cimg.eu/ что значит "уже скомпилированную"? если у вас проблемы со сборкой библиотеки с нуля - для убунты есть готовый пакет libmagick++-dev

проблема при десериализации пустого элемента xml

есть простой хмл

проблема в том что Dprtm_code может быть как заполнен 234234234 так и нет . создал схему :
//... //...
создал класс и в нем описал эти поля:
//... private long? dprtm_codeField; private string dprtm_nameField;
[XmlElementAttribute(IsNullable=true)] public long? Dprtm_code { get { return this.dprtm_codeField; } set { this.dprtm_codeField = value; } } public string Dprtm_name { get { return this.dprtm_nameField; } set { this.dprtm_nameField = value; } } //...
но при десериализации хмл с пустым кодом падает ошибка приведения типов. собственно вопрос: как правильно объявить елементы которые могут быть пустыми в xml?


Ответ

Xml, соответствующий приведённой схеме и десериализующийся в приведённый класс, должен выглядеть следующим образом:

То есть, обязательно должен быть атрибут nil из указанного пространства имён. Его корректно обрабатывает XmlSerializer (полагаю, что используется именно он).
При сериализации атрибут xsi:nil будет добавляться автоматически при необходимости.
Без этого атрибута валидация по схеме тоже не проходит.

server и client code в разных проектах, но в одном решении

Хочется сделать так чтобы в одном решении было два проекта, один asp.net webapi, а другой просто html страница с набором js скриптов и чтобы при нажатии f5 все это запускалось вместе, а в браузере открывалась html страница.Как это реализовать в visual studio?


Ответ

В Visual Studio вызвать контекстное меню у Solution, выбрать Add | Existing Web Site... Выбрать каталог с файлами сайта. Вызвать контекстное меню у Solution, выбрать Properties. В появившемся диалоге выбрать Common Properties | Startup Project. Выбрать Multiple startup projects. Для WebApi выбрать Action Start, для сайта - Start without debugging Чтобы в браузере не открывалась страница для WebApi приложения, нужно вызвать контекстное меню у проекта WebApi. Выбрать Properties. Вкладка Web. Start Action -> Don't open a page. Wait from a request an external application

Правильно ли внутри VM хранить UserControl?

У меня есть главная VM которая хранит 2 UserControl и VM-ки к ним. Смена UserControl происходит благодаря свойству CurrentUserControl которое привязывается к вьюшке. Насколько правильно хранить UserControl внутри ViewModel и как лучше это делать со стороны архитектуры MVVM?
Также для смены одного UserControl на другой я в каждую VM-ку передаю ссылку на главную VM и она через эту ссылку их меняет. В правильности этого решения я тоже сомневаюсь.
public class MainVm : VmBase { public MainVm() { LoginAndRegisterVm = new LoginAndRegisterVm(this); EnterRegistrationKeyVm = new EnterRegistrationKeyVm(this); EnterRegistrationKeyUserControl = new EnterRegistrationKey(); EnterRegistrationKeyUserControl.DataContext = EnterRegistrationKeyVm; LoginUserControl.DataContext = LoginAndRegisterVm; CurrentUserControl = LoginUserControl; } public LoginAndRegisterVm LoginAndRegisterVm { get; set; } public EnterRegistrationKeyVm EnterRegistrationKeyVm { get; set; } public UserControl LoginUserControl { get; set; } = new LoginPage(); public UserControl EnterRegistrationKeyUserControl { get; set; }
private UserControl _currentUserControl; public UserControl CurrentUserControl { get { return _currentUserControl; } set { _currentUserControl = value; NotifyPropertyChanged(); } } }
Часть Xaml :


Ответ

С точки зрения MVVM — нет. VM вовсе не должна знать и иметь представление о View, о том, показана ли данная VM в данный момент на экране, и если да, то как и во скольких местах.

Думаю, что правильный паттерн для вашего случая такой:
Вы заводите две вложенные VM: для вашего случая это, судя по всему, LoginAndRegisterVm и EnterRegistrationKeyVm Заводите в MainVm свойство CurrentPart типа VmBase. В него кладите LoginAndRegisterVm или EnterRegistrationKeyVm, как вам нужно . Во View прописываете привязки:

В основном XAML пишете просто

Привязка DataContext по идее произойдёт автоматически.

Вопрос правильности изменения одного VM-объекта другим не регулируется MVVM. Применяйте тот паттерн, который вам кажется более правильным.

SQL-запрос с несколькими выполняющимися из множества условий

Дана таблица с 10 числовыми полями, и 8 условий типа Field_1 < 0, Field_4 > Field_2, Field_5 < 115 и т.д. Как запросить все записи в таблице, удовлетворяющие хотя бы 4 любым условиям из 8?


Ответ

SELECT * FROM tbl WHERE (CASE WHEN Field_1 < 0 THEN 1 ELSE 0) + (CASE WHEN Field_4 > Field_2 THEN 1 ELSE 0) + (CASE WHEN Firld_5 < 115 THEN 1 ELSE 0) + (CASE WHEN Firld_3 < 0 THEN 1 ELSE 0) + (CASE WHEN Firld_5 < 0 THEN 1 ELSE 0) + (CASE WHEN Firld_6 < 0 THEN 1 ELSE 0) + (CASE WHEN Firld_7 < 0 THEN 1 ELSE 0) + (CASE WHEN Firld_8 < 0 THEN 1 ELSE 0) >= 4

не получается сделать аутентификацию с файлом в СИ

#include #include
main() { FILE *p; char buf_login[10]; char buf_stream[10]; puts("Login:"); scanf("%s",buf_login); printf("Your login is:%s
", buf_login); p=fopen("12.txt","rt"); fgets(buf_stream, 10, p); fclose(p); if (strcmp(buf_stream,buf_login)==0) { puts("OK"); } else { puts("error!"); }
}
Не получается пройти "аутентификацию". В файле 12.txt, к примеру, находится abcd. Компилирую, ввожу abcd и все равно выкидывает error! вместо ОК. Не могу понять, где ошибка. Вроде код правильный. Кодировка 12.тхт файла ASCII. Пишу в Borland 2.0, на виртуалке на Ubuntu.


Ответ

Ошибки могут быть две...
Если файл открывается для чтения, то в нем на самом деле не строка "abcd", а строка "abcd
"(с переводом строки). Убрать можно открыв сам файл в режиме редактирования и при помощи клавиш перемещения курсора и удаления убрать из файла последний непечатный символ (после символа "d"). У Вас должна получиться одна строка без перевода каретки. Файл не открывается, так как не находится в той же директории, откуда и запускается программа. Подтверждением открытия файла должен служить валидный указатель p. В своем коде Вы его не проверяете, но посмотрите хотя бы в отладчике. Хотя скорее всего, в случае отсутствия файла, программа вывалится с ошибкой.
Сам же код в принципе рабочий.

WCF - назначение UriTemplate?

Добрый день.
Я здесь с вопросом, который никак самостоятельно не могу осознать.
Вопрос: что такое UriTemplate и с чем его едят?
Я разбирал на конкретных примерах. Например:
[ServiceContract(Namespace = "urn:example:services")] public interface ISomeWcf { [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetResult?client={client}&password={password}&messageId={messageId}")] string GetResultHttpGet(string client, string password, string messageId);
}
В данном конкретном случае UriTemplate задает шаблон, по которому мы через REST-запрос можем обратиться к методу GetResultHttpGet. Читал МСДН, но не разобрался.
Зачем указывать Namespace = "urn:example:services" ?
Можете подсказать, что с UriTemplate делать? Такое впечатление что рядом брожу с ответом, а сформулировать его не могу.
Спасибо


Ответ

UriTemplate задаёт шаблон, по которому определяется, должен ли входящий запрос с данным Uri быть направлен на обслуживание методом GetResultHttpGet, а также сопоставляет части Uri параметрам метода.
Допустим для данного контракта базовый адрес
http://hostname/SomeWcf/
Если приложением (или прямо браузером) сделать GET запрос
http://hostname/SomeWcf/GetResult?client=CLI&password=PWD&messageId=MSG
то будет вызван метод GetResultHttpGet сервиса. При этом части Uri станут значениями соответствующих параметров:
string GetResultHttpGet(string client, string password, string messageId) { //здесь части Uri станут значениями параметров: //client = "CLI"; //password = "PWD"; //messageId = "MSG"; ... }
Если отклониться от шаблона, задав что-то другое, например
http://hostname/SomeWcf/GetResult2?name=NAME или http://hostname/SomeWcf/GetResult3/Name/Foo
то метод GetResultHttpGet вызван не будет.
Что касается свойства Namespace у атрибута ServiceContract
[ServiceContract(Namespace = "my.company.com")]
то оно фигурирует в заголовке soap-envelope
... my.company.com/ISomeWcf/GetResultHttpGet ... ...
Если его не указывать
[ServiceContract]
то вместо my.company.com там будет значение по умолчанию (http://tempuri.org).
Если интерфейс, описывающий контракт находится в сборке, на которую ссылаются и клиент и сервер, то в принципе Namespace может быть любым. Если же интерфейс описан дважды - в клиентской части и в серверной, или если вы создаёте клиента для уже существующего сервиса с определённым Namespace, то Namespace должны совпадать, чтобы клиент и сервер понимали друг-друга, иначе будет ответ
... ... The message could not be processed because the action 'http://tempuri.org/ISomeWcf/GetResultHttpGet' is invalid or unrecognized.