Страницы

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

четверг, 26 декабря 2019 г.

Возникает ошибка net.pipe

#aspnet


Есть сервер 2012R2. Работает IIS.
При обращении к одному из сервисов возникает ошибка вида:


  An error occurred while executing the rule:The message could not be dispatched
because the service at the endpoint address 'net.pipe://localhost/XXX.svc' is unavailable
for the protocol of the address


И при этом останавливается пул в котором сайт зарегестрирован.
в Advanced Settings net.pipe присутствует.
Net.pipe listener Adapter запущен.
Исходников нет к сожалению.

Вопрос: Проблема с этим сервисом или с какими-то настройками?
Есть ли иструмент (по типу Fiddler, но для net.pipe) для отслеживания запросов?
    


Ответы

Ответ 1



Ошибка заключалась в том, что учетке, под которой работал пул, не были назначены права в системе. Добавил в админы - все заработало!

Ajax все равно обновляет страницу. ASP.NET Core

#html #ajax #aspnet_core


Есть асинхронный запрос AJAX, который норм работает, данные в контроллер ходят без
проблем и на контроллере тоже все норм работает. Контроллер обновляет данные пользователя.
Но если это асинхронный запрос, то он не должен перезагружать страницу.  Вот скрипт
который срабатывает при загрузке страницы, Достаем данные и распаршиваем в таблицу.
Все ок тут. 

function getDataList() {
var serviceURL = '/api/ProfessorsApi/';

$.ajax({
    type: "GET",
    url: serviceURL,
    contentType: "application/json;",
    success: successFunc,
    error: errorFunc
});
function successFunc(data, status) {
    var obj = $.parseJSON(data);


Вот скрипт пост метода асинхронного аякс

function postData() {
let nameStudent = document.querySelector('[name="Name"]').value;

let surnameStudent = document.querySelector('[name="Surname"]').value;

let midlnameStudent = document.querySelector('[name="Midlname"]').value;

let emailStudent = document.querySelector('[name="Email"]').value;

let telephoneStudent = document.querySelector('[name="TelNumber"]').value;

let oldEmailStudent = document.querySelector('[name="OldEmail"]').value;

var parametrs = {
    Name: nameStudent, Surname: surnameStudent, Midlname: midlnameStudent,
    Email: emailStudent, TelNumber: telephoneStudent, OldEmail: oldEmailStudent
};
var serviceURL = '/api/ProfessorsApi/';

$.ajax({
    type: "POST",
    url: serviceURL,
    data: JSON.stringify(parametrs),
    contentType: "application/json;",
    //success: successFunc,
    //error: errorFunc
});
function successFunc(data, status) {

}

function errorFunc() {

}


И вот форма HTML  асинхронного запроса которая на onclick отправляет на функцию potsData().
Она в диалоговом окне открывается бутстрапа. 


Ответы

Ответ 1



Проблема решилась тем что просто нужно в HTML форме поменять тег input type="submit" на button. Оно ведь так и есть. Сабмит по идеи и должен перезагружать страницу. Поменял и все ок без перезагрузки все работает.

Путаница с разрядностью MinGW-w64

#c #windows #mingw_w64


Никак не могу разобраться со следующим вопросом.

Я хочу использовать компилятор MinGW-w64, так как он предоставляет более полную поддержку
WinAPI, по сравнению с компилятором MinGW32.

Хочу иметь возможность собирать и для x32, и для x64 платформ. Судя по информации,
которую мне удалось найти, для этого необходимо ставить две версии MinGW-w64.

Я нашел лишь официальный установщик компилятора:     

https://sourceforge.net/projects/mingw-w64/.

Если опустить варианты настройки потоков и исключений, а рассмотреть только целевую
архитектуру, то установщик позволяет установить две версии компилятора:

C:\Program Files (x86)\mingw-w64\i686-8.1.0
C:\Program Files\mingw-w64\x86_64-8.1.0


Методом тыка мне удалось определить, что i686 собирает только для х32, а х86_64 -
только для х64.

Эти обозначения меня окончательно запутывают, ведь обычно через х86 обозначается х32...

Мои вопросы:


При использовании MinGW-w64 для сборки x32 и x64 кода обязательно ставить две версии
компилятора?
Если я правильно понимаю значение термина кросс-компиляция, то получается, что MinGW-w64
не предназначен для перекрестной компиляции, поскольку собирает код только той же разрядности,
которой обладает сам? При использовании этого компилятора невозможно собрать x64 код
из-под x32 системы, потому что x64 версия компилятора не может быть запущена на х32
системе (в общем случае). Однако, можно собирать x32 код в x64 системе путем запуска
x32 версии компилятора благодаря средствам совместимости Windows WoW, но этот способ
не относится к перекрестной компиляции. Все так?

    


Ответы

Ответ 1



Да, надо ставить 2 версии: i686-posix-dwarf - для сборки 32-х битных программ; x86_64-posix-seh - для сборки 64-х битных программ. И да, компилятор для сборки 64-х битных программ, сам по себе 64-х битный, так что из 32-х битной Windows собрать 64-х битный бинарник не получится. Под кросс-компиляцией ещё можно понимать сборку из-под Linux/macOS бинарников для Windows. И Mingw-w64 такое умеет. Но опять же, для 32-х и 64-х битных целей сборки надо ставить отдельные наборы: с префиксом i686-w64-mingw32- для 32-х бит; с префиксом x86_64-w64-mingw32- для 64-х бит.

Ошибка с MemoryMappedFile (NotSupportedException) .net core при использовании под linux?

#c_sharp #linux


Доброе времени суток. Возникла необходимость делиться информацией между двумя приложениями.
Вспомнил что есть MemoryMappedFile, решил воспользоваться. Зашел msdn глянул работает
и под .net core - что очень важно. Так как рассматривается вариант запуска сервисов
под linux-ом. Но тут же я столкнулся с проблемой под linux-ом:


  "Unhandled Exception: System.PlatformNotSupportedException: Named maps
  are not supported."


Вопрос все еще актуален
Есть ли какие-то альтернативы? Как вы решаете проблему с обработкой больших объемов,
что бы они были доступны между двух и более сервисов?

Задача: 
есть данные примерно такого вида:
id price1 price1 (таких записей 1млн) которые необходимо обновлять, ну скажем раз
20 в секунду

UPDATE#1

Named maps - это функция, предоставляемая Windows. Как правило, отображаемые в память
файлы работают путем межпроцессного взаимодействия, отображая один и тот же файл в
несколько процессов, например, используя MemoryMappedFile.CreateFromFile. 

Если не использовать именование, то запись будет иметь такой вид:

string path = "/home/test/test";
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite,
FileShare.ReadWrite))
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(fs, null, fs.Length,
MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, true))
using (MemoryMappedViewAccessor acc = mmf.CreateViewAccessor())

    


Ответы

Ответ 1



Именованные memory mapped файлы под Linux не поддерживаются. Альтернатива - готовые key-value storage. IMO, проще всего будет прикрутить Redis. Есть готовый образ на dockerhub + есть хороший .NET клиент от Stack Exchange

Проверка гипотезы о равновероятности распределения ГПСЧ: смысл эксперементального значения Хи-квадрат

#python_3x #статистика #генерация_случайных_данных #статический_анализ


Есть гпсч на основе линейного конгруэнтного метода. Нужно проверить гипотезу о равновероятности
распределения полученных с помощью генератора значений выборок. Написал такую функцию:

def xi_check(num_array):
    intervals = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    for i in range(len(num_array)):
        intervals[num_array[i]//10] += 1
    xi_2_theor = [0, 3.33, 5.9, 8.34, 11.4, 16.9, 100] # квантили Хи-квадрат
    xi_2_inter = [1, 0.95, 0.75, 0.50, 0.25, 0.05, 0]  # уровень значимости
    xi_2_exp = 0
    for i in range(len(intervals)):
        xi_2_exp = xi_2_exp + ((float(intervals[i]) / float(len(num_array))
        - 0.1) ** 2) / 0.1
    for i in range(6):
        if xi_2_theor[i] <= xi_2_exp <= xi_2_theor[i+1]:
            return f"{xi_2_inter[i]} - {xi_2_inter[i+1]}", xi_2_exp
        else:
            return "Error", xi_2_exp


Если на выходе я получаю эксперементальное значение Хи-квадрат в промежутке между
11.4 и 16.9, то что это означает для меня? Можно ли полагаться на то, что ГПСЧ пораждает
равновероятные значения последовательности?

Иными словами, я не могу понять, как можно трактовать уровень значимости. Как из
него получить вероятность достоверности?
1 - (уровень значимости)?
    


Ответы

Ответ 1



Проверка, которую вы задумали провести, в общем случае называется «проверка выборки на соответствии теоретическому закону распределения». Может выполняться множеством разных методов - Колмогорова-Смирнова, Крамера-фон Мизеса, Джинни ….. и в том числе с помощью использования ХИ-квадрат критерия согласия Пирсона. Суть ее в том, что вы высчитываете некую статистику и сравниваете с тем значением, которое она (статистика) бы имела, если бы ваша выборка соответствовала бы теоретическому закону. В случае использование ХИ-квадрат критерия в качестве такой статистики используется ХИкв.практ= СУММА по количеству квантилей ((Ni-Ei)**2)/Ei) (обратите внимание, это несколько отлично от формулы, которую вы используете в программе). Затем происходит сравнение ХИкв.практ со значением, взятым из таблицыХИкв.крит. при выбранном значении уровня значимости и заданном значением степени свободы. Если полученное значение , меньше значения ХИкв.крит (альфа, df), то считается, что со степенью значимости («уверенности») альфа ваша выборка не отличается от теоретического (в данном случае - равномерного) распределения. Замечание 1. Иметь таблицу распределений сегодня уже не является обязательным – практически все инструменты – от Python до EXCEL – содержат функции, которые эти значения определяют самостоятельно. По той же причине и нет необходимости огород городить с самостоятельным Монте-Карло-моделированием. Замечание 2. Для анализа соответствие именно равномерному закону распределения есть и специальные критерии, например – Шермана, Неймана-Бартона и др. Вот как-то так.

int на byte стоит ли?

#java #переменные #byte #перевод #int


Говорят что все равно машина заменяет byte на int так как ей лучше работать с Int,
если заменить все int на byte потребление ресурсов будет меньше ? 
    


Ответы

Ответ 1



В стандартном C/С++ никакая операция не может выполняться с типом меньше int. Если char, byty или short меньше, чем int на текущей платформе, они неявно повышаются до int. Компилятор должен сделать это неявное продвижение, там нет пути вокруг него, не нарушая стандарт. Никакая операция с целочисленными значения (добавление, побитовое, логическое и т.д. и т.д.) в языке не может выполняться на меньшем целочисленном типе, чем int. Таким образом, операции с byte/char/short/int(и другими), как правило, одинаково быстры, так как первые повышаются до последнего. На 32-битном процессоре, более мелкие типы медленнее, потому что он хочет, чтобы все было аккуратно выровнено в 32-битных кусках. 32-битные компиляторы обычно оптимизируют скорость и выделяют меньшие целые типы в большем пространстве, чем указано. Хотя обычно меньшие целые типы, конечно, занимают меньше места, чем более крупные, поэтому, если вы планируете оптимизировать размер ОЗУ, то предпочительнее использовать, те типы в диапазон, которых входят значения.

Полиморфизм и позднее связывание в Java

#java


У Эккеля есть замечательный пример полиморфизма:

class Super {
  public int field = 0;
  public int getField() { return field; }
}

class Sub extends Super {
  public int field = 1;
  @Override
  public int getField() { return field; }
  public int getSuperField() { return super.field; }
}

public class FieldAccess {
  public static void main(String[] args) {
    Super sup = new Sub(); // Upcast
    System.out.println("sup.field = " + sup.field +
      ", sup.getField() = " + sup.getField());
    Sub sub = new Sub();
    System.out.println("sub.field = " +
      sub.field + ", sub.getField() = " +
      sub.getField() +
      ", sub.getSuperField() = " +
      sub.getSuperField());
  }
}
/* Output:
sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField()
= 0
*/


Мы создаем объект подкласса и присваиваем его ссылке класса - родителя. И, вот тут:

//sup.field = 0, sup.getField() = 1


замечательно видно, что доступ непосредственно к полю осуществляется по ссылке, а
к методу - с помощью позднего связывания - по объекту.

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

Перечитав кучу информации по этому поводу, я так и не нашел стройной теории, о том,
когда происходит вызов метода/поля по типу ссылки, а когда по типу объекта. 

Прошу помощи.
    


Ответы

Ответ 1



Не очень понимаю что вызывает собственно говоря вопрос... В Java все нестатические методы виртуальные, то есть методы с одинаковой сигнатурой всегда перекрывают родительские методы, соответственно вызов конкретного метода идет по методу позднего связывания Доступ к членам класса избавлен от таких премудростей, доступ к члену класса идет напрямую (или если угодно по ссылке). Философически это означает, что полиморфизм в Java относится только к методам, но не к членам классов. runtime polymorphism can't be achieved by data members. тынц