All streams
Search
Write a publication
Pull to refresh
9
0
Денис @Caefah

User

Send message
У нас незаменимых не бывает. Не та страна )))
Поможет. Это если кратко. Как профессионал непрофессионалу.
Похоже, механизмы «госоткатов» даже в Германии играют решающую роль. Зачем далеко ходить — вспомним Меркель и BMW. Интересно, сколько Microsoft откатило этой самой фрау…

По поводу аргументов:

1. Бесплатное ПО заметно отстаёт по функциональности от ПО Microsoft.
Это не аргумент. Это эмоции хомячков, у которых поменялся цвет поилки.
Тема не раскрыта. «Отстаёт» в чём именно, где перечень «отсталостей»?

2. Для нормальной работы почты на смартфонах пришлось установить отдельный почтовый сервер (Exchange).

Низкоквалифицированным админам поём мы песню! Postfix+Dovecot+MyMail живут и с валидными сертификатами, и с шифрованием и с любыми другими современными плюшками. А производительность вообще сравнивать с Exchange нельзя. Аппаратура для мелкомягкого решения потребуется в разы мощнее. Бред, а не аргумент.

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

4. Обмен информацией с гражданами и другими муниципалитетами затруднён, поскольку последние используют ПО Microsoft.

Это, пожалуй, единственное утверждение, которое можно принять за аргумент.

Хорошо тем, кто изначально строит всё на опенсорсе — нет болезненного периода перехода. Мне на практике известны попытки нескольких крупных компаний уменьшит совокупную стоимость владения (Total Cost of Ownership) за счёт перехода на опенсорс. Хотя бы частичного. И увы! Полное фиаско!

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

5. Ожидания что «Linux дешевле» не оправдались, потому что возникла необходимость самостоятельной доработки функционала.

КАКОГО «Функционала»? Тема опять не раскрыта. Если они начали писать свой «Йексель», только потому, что им иконки «Калка» не нравятся, то да, воистину это дороже!
А Windows у вас лицензионная? )
«ЛитрВПН»? Это что, шутка такая? Украли код OpenVPN, запилили «Кузнечика» со шпионскими закладками и продают за деньги? Да эти хитрорыжие вообще обозрели! OpenVPN распространяется под лицензией GNU GPL. Код в студию, суть вашу! И распространять в сорцах!

Владимир Николаевич, судя из дизайна интерфейса с психоделическими цветами можно сделать вывод, что по коду пютана прошлись Сифоном, что сути не поменяло.

Может, чересчур эмоционально, но за воровство GNUтого кода этих хитрых лисов нужно бить по рукам.
Всё. Ответы на совой вопрос нашёл тут: www.linux.org.ru/news/opensource/12444364/page2#comment-12445286
Есть объективные преимущества?
Бес попутал ) Хотел сказать динамическая типизация, в противовес статической.
Сорри, хабра искажает картину комментирования. Это был ответ на другой пост.
Это не мешает писать на Си всё. От ядер операционных систем до «кошечек». Операционка на Java?, на Rust?, на Go? Три раза хе хе хе!!!
Все те приверженцы учений дедушки Оккама, кто пересыщен убогими решениями с автоматизацией работы памяти, гарбидж коллекторами, нестрогой типизацией, виртуальными машинами и прочим дерьмом типа вывертов ООП уже давно пишут на чистом Си и чувствуют себя сыто и комфортно. ))
После слов: — «Разработка велась на пютан ...» интерес пропал полностью. Ради пары иконок терять пятую часть гигабайта постоянно текущей оперативной памяти под динамическую типизацию и гарбидж коллектор нет никакого желания. Вывод — нативный консольный клиент лучше.
проявит к этой теме интерес то могу писать узконаправленные статьи

Пишите. Спасибо за парсер!
Весь проект находится на стадии разработки архитектуры. Тестируем на виртуалках XL9_5_STABLE. Пока нареканий нет. От всех синтетических тестов получаем предсказуемый и полностью удовлетворительный результат. В продакшн планируем именно такую связку:
XL <---BDR-->XL но с окончательным решением определились только к XL.
Имеется два географически разнесённых автономных кластера Postgresql-XL. Есть необходимость между ними сделать асинхронную репликацию. При этом клиенты только читают и ходят каждый на свой XL. Тот агент, который пишет — только один и он пишет данные в оба кластера с учётом асинхронной репликации данных. Подскажите, пожалуйста, целесообразно ли для целей репликации использовать PostgreSQL BDR в таком случае? И возможно ли это вообще?
Исключительно полезная статья. Надеюсь на продолжение.
Linux… Nvidia GPU… Всё уже давно сказано Торвальдсом:

image
Анна, спасибо за познавательную статью и хорошо преподнесённый теоретический материал. Замечательная идея и очень интересный, с точки зрения математики, алгоритм. Однако, есть несколько «НО» из-за которых пришлось отказаться от реализации алгоритма в продакшн:
1. В коде есть серьёзные баги. О них дальше.
2. Отсутствие каких-либо комментариев сильно усложняет дебагинг. Это особенно относится к тем компонентам, которые формируют математический аппарат.
3. И… увы! Алгоритм формирует ложные экстремумы! Именно из-за этого пришлось от него полностью отказаться, несмотря на время, потраченное на поиск и устранение багов (

Итак, обещанные баги:

Сборка:
g++ -pipe -std=c++11 -g -ggdb -ggdb3 -O0 -DDEBUG -finline-functions -Wall -Wextra -Wpedantic -Wshadow -Wconversion -Wsign-conversion -Winit-self -Wunreachable-code -Wformat-y2k -Wformat-nonliteral -Wformat-security -Wmissing-include-dirs -Wswitch-default -Wtrigraphs -Wstrict-overflow=5 -Wfloat-equal -Wundef -Wshadow -Wcast-qual -Wcast-align -Wwrite-strings -Winline -Wsuggest-attribute=const -Wsuggest-attribute=pure -Wsuggest-attribute=noreturn -Wsuggest-attribute=format -Wmissing-format-attribute -Wlogical-op -o TBezierInterpolation TBezierInterpolation.cpp -lm


Сборка с дополнительными уровнями предупреждений заставляет поразмыслить над сообщениями, обещающими массу проблем на больших цифрах. Например:
warning: conversion to ‘int’ from ‘std::vector<Point2D>::size_type {aka long unsigned int}’ may alter its value


Синтаксис:
abs() работает с целочисленными значениями. Компиллятор g++ догадывается и исправляет, но лучше использовать fabs()

Алгоритм:
1. Если использовать такой массив с данными (он идентичен исходному примеру, но без последней точки):
testValues.push_back(Point2D(0, 0));
testValues.push_back(Point2D(20, 0));
testValues.push_back(Point2D(45, -47));
testValues.push_back(Point2D(53, 335));
testValues.push_back(Point2D(57, 26));
testValues.push_back(Point2D(62, 387));
testValues.push_back(Point2D(74, 104));
testValues.push_back(Point2D(89, 0));
testValues.push_back(Point2D(95, 100));


То появляются подобные артефакты image

Вот маленький патч, устраняющий артефакты. Да, решение далеко от изящества, но, зато, работает:

--- TBezierInterpolation.cpp	2017-06-03 18:46:11.322309503 +0300
+++ TBezierInterpolation.cpp	2017-06-03 18:49:02.960312804 +0300
@@ -63,21 +63,26 @@
     
     double l1, l2, tmp, x;
     
-    --n;
     
     for (int i = 0; i < n; ++i)
     {
         bezier[i].points[0] = bezier[i].points[1] = values[i];
         bezier[i].points[2] = bezier[i].points[3] = values[i + 1];
         
-        cur = next;
-        next = values[i + 2] - values[i + 1];
-        next.normalize();
-        
         tgL = tgR;
-        
-        tgR = cur + next;
-        tgR.normalize();
+        cur = next;
+
+        if(i+1 < n){
+            next = values[i + 2] - values[i + 1];
+            next.normalize();
+
+            tgR = cur + next;
+            tgR.normalize();
+        }else{
+            tgR.x= 0.0;
+            tgR.y= 0.0;
+        }
+
         
         if (abs(values[i + 1].y - values[i].y) < EPSILON)
         {
@@ -120,12 +125,6 @@
         bezier[i].points[2] -= tgR * l2;
     }
     
-    l1 = abs(tgL.x) > EPSILON ? (values[n + 1].x - values[n].x) / (2.0 * tgL.x) : 1.0;
-    
-    bezier[n].points[0] = bezier[n].points[1] = values[n];
-    bezier[n].points[2] = bezier[n].points[3] = values[n + 1];
-    bezier[n].points[1] += tgR * l1;
-    
     return true;
 }


2. Ложные экстремумы. Вот примеры наборов иксов с игреками, при которых их можно наблюдать.
Между 4 и 5 точками:
39	-123,790531
54	-121,828107
81	-29,500421
111	-42,9229
158	-31,067327
170	0,077761
213	-61,771285
259	-75,374474
265	-90,913339


Между 7 и 8 точками:
124	50,435864
170	108,906317
171	159,643421
209	149,011485
254	214,373123
297	293,43677
310	206,841167
350	219,560966
388	221,341568


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

Для тех, кто пожелает разобраться и исправить баг с ложными экстремумами добро пожаловать!
Код на гитхабе: https://github.com/eitijupaenoithoowohd/TBezierInterpolation
Помимо C++ добавлен код на чистом Си.
Чтобы быть предельно точным, и ненароком не дезинформировать читателей уточню, что алюминиевые системные блоки Jonsbo (они же Qiao Sibo) поддерживают блоки питания формфактора ATX только в моделях U2 и U3. Для U1 понадобится БП формфактора SFX

Information

Rating
Does not participate
Registered
Activity

Specialization

Specialist
Lead