easy pipe что это

Software
IngSoft EasyPipe

Structural analysis of pipes and manholes

IngSoft at the Oldenburg Pipeline Forum (iro) 2022

In January 2022, IngSoft will attend the postponed 35th Oldenburg Pipeline Forum.

DWA-A 127-1 objection period ends on 26 November 2021

DWA invites the objectors to comment again on the revised draft worksheet.

IngSoft joins the GSTT

The modular business solution for your pipe statics

Whether for drinking water or wastewater, as an open channel or a pressure pipe, installed in the trench or trenchless, new installation or renovation: IngSoft EasyPipe is the solution for the structural calculation of your buried pipes.

Latest version: 2.8.6.0 dated 2021-11-25

IngSoft EasyPipe

IngSoft EasyPipe input ATV-DVWK-A 127 installation

Input screen for module A127: Installation

IngSoft EasyPipe input ATV-DVWK-A 127 concrete pipe with base

Input screen for extension of A127 Pipe With Base

IngSoft EasyPipe input DWA-A 161 reinforcement in a reinforced concrete pipe

Input screen for module A161: Reinforcement in a reinforced concrete pipe

IngSoft EasyPipe input DWA-A 161 pressure transmission ring

Input screen for module A161: Pressure Transfer Ring (PTR)

IngSoft EasyPipe input DWA-A 143-2 geometry

Input screen for module A143-2: Geometry

IngSoft EasyPipe input AWWA M45 installation conditions

Input screen for module M45: Installation conditions

IngSoft EasyPipe input ATV-DVWK-A 127 extension of special vehicles Airbus A380

Input screen for Special Vehicles extension, here: Airbus A380 with graphic illustration of overlapping cone

IngSoft EasyPipe input extension profile from drawing

Input screen for extension Profile From Drawing

IngSoft EasyPipe output DWA-A 143-2 stresses in liner

Output of stresses in liner according to DWA-A 143-2

IngSoft EasyPipe output profiled pipe

Output of the structural values of a profiled pipe

IngSoft EasyPipe output SIA 190 long print

Output with equations, graphs and indices, presented for SIA 190 long print

IngSoft EasyPipe in images: Screenshots

We have divided the input screen into four divisions: Navigation, Main window, Results and Help. You will find your way «easily» around the clear overview from the first program start.

Our statics software guides you as the user through the navigation tree. In the Main window, you will make the entries, whose validity will be immediately checked by IngSoft EasyPipe.

The integrated Help section with sketches responds in a context-sensitive manner to the position of the cursor. This always gives you helpful hints.

In the lower part of the application window, IngSoft EasyPipe displays a Preview of the most important results. Color-coded fields immediately indicate the fulfilled verifications to you.

The printout of the pipe statics offers the three levels short, medium and long: Thus, you meet the demands of all auditors and clients.

Click on an image for further explanations.

Planning and Engineering Office, Expert Evaluator

An own structural engineering calculation with IngSoft EasyPipe allows you a neutral and realistic assessment of project-specific conditions. IngSoft EasyPipe lets you see both beneficial and adverse parameters. In addition, you can find out other materials that can be used in a more cost-effective way.

Pipe manufacturer and supplier

As early as in the quotation phase, IngSoft EasyPipe supports the realistic estimation of dimensions and material properties. Required reinforcements, desired nominal stiffness (SN) classes or wall thicknesses can be determined quickly, conveniently and precisely. Economic feasibility analysis can be carried out early. In this way, you profit from a minimum cost and material expenditure.

Ordering customer, municipality or test engineer for stability

Contractors regularly propose solutions that are different from the specifications. Quick, in-depth control using IngSoft EasyPipe helps you to properly assess these alternatives and identify risks early on. Plausible comparison calculations secure your approval.

How much does a license for IngSoft EasyPipe cost?

That depends: We link the prices to the scope of the licence. We have listed prices and examples of possible configurations for your licence in the Prices section.

Details about the structure of IngSoft EasyPipe can be found here.

Internationalism through multilingualism

Our pipe static software IngSoft EasyPipe is flexible. You as the user choose which language version you would like to use. You can find out more about this under

User assistance/support

We accompany our users during the installation of our programs. During operation, we answer your questions about the software and the rules and regulations covered. In addition, we offer training courses.

Источник

Easy pipe что это

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

Что такое «ПАЙП» или «Pipe»

Pipe или «пайп» переводится на русский язык как «труба». Под словом «пайпинг» при этом понимается трубопровод или система из труб. Собственно «exhaust system» — ( выхлопная система) любого автомобиля состоит в первую очередь из труб и каждый отрезок этих труб имеет свое название. И если некоторые из них, вроде «даунпайпа» плотно вошли в обиход российских тюнеров, то всё остальные никто не использует.
А еще хуже, когда используют колхозные понятия, вроде » трасса или тракт «…

Итак, сразу после головки блока цилиндров у нас находится первое изделие из труб — «exhaust manifold», он же «header», он же «collector», он же русский «выпускной коллектор» он же «паук». Как в русском так и в английском языке в случае турбомотора коллектор тоже имеет приставку «турбо».

«CatBack» или «КатБэк»

«Раннер» или «runner»

Важным частным случаем коллектора являются кат-коллекторы или «manifold converter» — 90% современных автомобилей имеют коллекторы, в которые сразу интегрирован каталитический нейтрализатор. У них короткие раннеры, часто примитивный дизайн из штампованной стали а замена катализатора возможна только в сборе. Такая деталь при этом совсем не дешева и часто весьма «затычна» с точки зрения продувки, не столько из-за катализатора, сколько из-за не оптимального сечения и длины раннеров.

Читайте также:  райганат имя какой национальности

«Даунпайп» или «downpipe»

Названия труб после коллектора будут отличаться, в зависимости от того атмосферный мотор или турбированный. В тубо-моторе сразу от турбины начинается всеми любимый «downpipe» ( даунпайп ) дословно «труба идущая вниз», прямого аналога в русском нет, но «приемная труба» вполне подходит.

Еще одна труба со своим предназначением и названием — «dump pipe» или «dump tube» — трубка отвода газов от Вестгейта (перепускного клапана турбины). Присутствует в тех случаях когда вестгейт внешний или имеет на фланце турбины свой собственный отдельный выход. Если Вестгейт встроенный и не имеет своего отвода, то газы идут сразу в даунпайп и отдельной трубы не требуется.

«Фронт пайп» или «front pipes»

В случае атмосферного мотора сразу за коллекторами следуют «front pipes» ( фронт пайпы ) или по-русски приемные трубы. В приемных трубах обычно установлен один или несколько каталитических нейтрализаторов или универсальные пламегасители.

Заменой фронт пайпам часто становятся «cat delete pipes» — приемные трубы без катализаторов, в которых один или несколько катализаторов удалены а на их месте прямая труба.

— Прошу заметить, что никаких «искрогасителей» и «стронгеров» при этом ни в «даунпайпах» ни в «фронт пайпах» нет и не бывает. Вы не найдете их аналогов в английском языке и не найдете этих изделий в ассортименте зарубежных компаний. Однако, если нужно снизить резонанс или вибрацию выхлопа ( звука) то иногда устанавливаются спец-компоненты, такие как спортивные катализаторы с увеличенным сечением или пламегасители спортивного типа. Устанавливаются эти компоненты в разрез пайпов.

После приемных труб (даунпайпа в турбо моторе или фронт пайпа в атмосферном моторе) начинается «middle section» — средняя часть выхлопа, она же » mid-pipe» Она обычно включает в себя первичный глушитель и части труб, идущие до заднего моста.

В атмосферных моторах с двойным симметричным или ассиметричным выхлопом, на стыке приемных труб и средней части, появляются новые герои — всеми любимые H-pipe или X-pipe или их сочетания Y-pipe.

В зависимости от конструкции и компоновки Х-pipe или H-pipe могут быть объединены с приемными трубами или быть отдельным элементом в средней части системы. Они могут быть как до так и после резонаторов, а то и вовсе интегрированы в сам резонатор или первичный глушитель. Эти компоненты отвечают в основном за смешивание выхлопных газов и их точный расчет дает уникальный бурлящий звук выхлопа типа АMG ( на моторах V-6 и более )

Заканчивает выхлоп всегда глушитель или «Muffler». Он может быть прямоточным, камерным, дипассивным ( управляемым с помощью заслонки ), круглым, овальным или плоским. Если он не нужен — то устанавливается «muffler delete pipe» — труба с насадкой без глушителя.

Теперь Вы подкованы и можете смело вступать в диспуты и дискуссии с мастерами из тюнинга глушителей 🙂

Источник

Linux pipes tips & tricks

Pipe — что это?

Pipe (конвеер) – это однонаправленный канал межпроцессного взаимодействия. Термин был придуман Дугласом Макилроем для командной оболочки Unix и назван по аналогии с трубопроводом. Конвейеры чаще всего используются в shell-скриптах для связи нескольких команд путем перенаправления вывода одной команды (stdout) на вход (stdin) последующей, используя символ конвеера ‘|’:

grep выполняет регистронезависимый поиск строки “error” в файле log, но результат поиска не выводится на экран, а перенаправляется на вход (stdin) команды wc, которая в свою очередь выполняет подсчет количества строк.

Логика

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

Размер буфера начиная с ядра версии 2.6.11 составляет 65536 байт (64Кб) и равен странице памяти в более старых ядрах. При попытке чтения из пустого буфера процесс чтения блокируется до появления данных. Аналогично при попытке записи в заполненный буфер процесс записи будет заблокирован до освобождения необходимого места.
Важно, что несмотря на то, что конвейер оперирует файловыми дескрипторами потоков ввода/вывода, все операции выполняются в памяти, без нагрузки на диск.
Вся информация, приведенная ниже, касается оболочки bash-4.2 и ядра 3.10.10.

Простой дебаг

Исходный код, уровень 1, shell

Т. к. лучшая документация — исходный код, обратимся к нему. Bash использует Yacc для парсинга входных команд и возвращает ‘command_connect()’, когда встречает символ ‘|’.
parse.y:
Также здесь мы видим обработку пары символов ‘|&’, что эквивалентно перенаправлению как stdout, так и stderr в конвеер. Далее обратимся к command_connect():make_cmd.c:
где connector это символ ‘|’ как int. При выполнении последовательности команд (связанных через ‘&’, ‘|’, ‘;’, и т. д.) вызывается execute_connection():execute_cmd.c:

PIPE_IN и PIPE_OUT — файловые дескрипторы, содержащие информацию о входном и выходном потоках. Они могут принимать значение NO_PIPE, которое означает, что I/O является stdin/stdout.
execute_pipeline() довольно объемная функция, имплементация которой содержится в execute_cmd.c. Мы рассмотрим наиболее интересные для нас части.
execute_cmd.c:
Таким образом, bash обрабатывает символ конвейера путем системного вызова pipe() для каждого встретившегося символа ‘|’ и выполняет каждую команду в отдельном процессе с использованием соответствующих файловых дескрипторов в качестве входного и выходного потоков.

Исходный код, уровень 2, ядро

Обратимся к коду ядра и посмотрим на имплементацию функции pipe(). В статье рассматривается ядро версии 3.10.10 stable.
fs/pipe.c (пропущены незначительные для данной статьи участки кода):
Если вы обратили внимание, в коде идет проверка на флаг O_NONBLOCK. Его можно выставить используя операцию F_SETFL в fcntl. Он отвечает за переход в режим без блокировки I/O потоков в конвеере. В этом режиме вместо блокировки процесс чтения/записи в поток будет завершаться с errno кодом EAGAIN.

Максимальный размер блока данных, который будет записан в конвейер, равен одной странице памяти (4Кб) для архитектуры arm:
arch/arm/include/asm/limits.h:
Для ядер >= 2.6.35 можно изменить размер буфера конвейера:
Максимально допустимый размер буфера, как мы видели выше, указан в файле /proc/sys/fs/pipe-max-size.

Читайте также:  какой нужен браузер для открытия ссылок на телефоне самсунг с почты

Tips & trics

Перенаправление и stdout, и stderr в pipe

или же можно использовать комбинацию символов ‘|&’ (о ней можно узнать как из документации к оболочке (man bash), так и из исходников выше, где мы разбирали Yacc парсер bash):

Перенаправление _только_ stderr в pipe

Shoot yourself in the foot
Важно соблюдать порядок перенаправления stdout и stderr. Например, комбинация ‘>/dev/null 2>&1′ перенаправит и stdout, и stderr в /dev/null.

Получение корректного кода завершения конвейра

По умолчанию, код завершения конвейера — код завершения последней команды в конвеере. Например, возьмем исходную команду, которая завершается с ненулевым кодом:
И поместим ее в pipe:
Теперь код завершения конвейера — это код завершения команды wc, т.е. 0.

Обычно же нам нужно знать, если в процессе выполнения конвейера произошла ошибка. Для этого следует выставить опцию pipefail, которая указывает оболочке, что код завершения конвейера будет совпадать с первым ненулевым кодом завершения одной из команд конвейера или же нулю в случае, если все команды завершились корректно:
Shoot yourself in the foot
Следует иметь в виду “безобидные” команды, которые могут вернуть не ноль. Это касается не только работы с конвейерами. Например, рассмотрим пример с grep:
Здесь мы печатаем все найденные строки, приписав ‘new_’ в начале каждой строки, либо не печатаем ничего, если ни одной строки нужного формата не нашлось. Проблема в том, что grep завершается с кодом 1, если не было найдено ни одного совпадения, поэтому если в нашем скрипте выставлена опция pipefail, этот пример завершится с кодом 1:
В больших скриптах со сложными конструкциями и длинными конвеерами можно упустить этот момент из виду, что может привести к некорректным результатам.

Источник

Основы реактивного программирования с использованием RxJS. Часть 2. Операторы и пайпы

В предыдущей статье мы рассмотрели, что такое потоки и с чем их едят. В новой части мы познакомимся с тем, какие методы RxJS предоставляет для создания потоков, что такое операторы, пайпы(pipes) и как с ними работать.

Серия статей «Основы реактивного программирования с использованием RxJS»:

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

Графическое представление потоков

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

Вот как будет выглядеть его графическое представление:

Поток обычно изображается в виде прямой линии. Если поток испускает какое-либо значение, то оно отображается на линии в виде кружка. Прямая черта в отображении — это сигнал завершения потока. Для отображения ошибки используется символ — “×”.

Потоки в одну строчку

В моей практике я редко сталкивался с необходимостью создавать свои экземпляры Observable напрямую. Большинство методов для создания потоков уже есть в RxJS. Чтобы создать поток, испускающий значения 1 и 2, достаточно лишь использовать метод of:

Метод of принимает на вход любое количество аргументов и возвращает готовый экземпляр Observable. После подписки он испустит полученные значения и завершится:

Если вы хотите представить массив в виде потока, то можно воспользоваться методом from. Метод from в качестве аргумента ожидает любой итерируемый объект(массив, строка и т.д.) или promise, и проецирует этот объект на поток. Вот как будет выглядеть поток, полученный из строки:

А вот так можно обернуть promise в поток:

Примечание: часто потоки сравнивают с promise. На самом деле, они имеют всего одну общую черту — push стратегию распространения изменений. В остальном это абсолютно разные сущности. Promise не может выдать несколько значений. Он может только выполнить resolve или reject, т.е. иметь только два состояния. Поток же может передавать несколько значений, и может быть повторно использован.

А помните пример с интервалом из первой статьи? Данный поток представляет собой таймер, который отсчитывает время в секундах с момента подписки.

Вот как в одну строчку можно реализовать то же самое:

И напоследок метод, который позволяет создать поток событий DOM элементов:

В качестве значений этот поток будет получать и испускать объекты события “keyup”.

Пайпы & операторы

Pipe — это метод класса Observable, добавленный в RxJS в версии 5.5. Благодаря ему мы можем строить цепочки операторов для последовательной обработки значений, полученных в потоке. Pipe представляет собой однонаправленный канал, который связывает между собой операторы. Сами операторы являются обычными функциями, описанными в RxJS, которые обрабатывают значения из потока.

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

Посмотрим на операторы в деле. Умножим каждое значение из потока на 2 с помощью оператора map:

Вот как выглядит поток до применения оператора map:

После оператора map:

Давайте воспользуемся оператором filter. Этот оператор работает точно так же, как функция filter в классе Array. Первым аргументом метод принимает функцию, в которой описано какое-либо условие. Если значение из потока удовлетворяет условию, то оно пропускается дальше:

И вот как будет выглядеть вся схема нашего потока:

Пишем приложение

Теперь, когда мы выяснили, что такое пайпы и операторы, можно приступать к практике. Наше приложение будет выполнять одну простую задачу: выводить список открытых репозиториев github по введенному никнейму владельца.

Читайте также:  рама велосипеда фикс 51 какой рост

Требований будет немного:

Начнем с html разметки. Опишем input и ul элементы:

Затем в js или ts файле получим ссылки на текущие элементы используя browser API:

Ещё нам понадобится метод, который будет выполнять запрос к github API. Ниже приведен код функции getUsersRepsFromAPI, которая принимает на вход никнейм пользователя и выполняет ajax запрос, используя fetch. Затем возвращает promise, попутно преобразуя успешный ответ в json:

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

Приготовления завершены. Настало время посмотреть на RxJS в действии. Нам необходимо слушать событие keyup нашего input’а. Первым делом мы должны понять, что в реактивном подходе мы работаем с потоками. К счастью, в RxJS уже предусмотрен подобный вариант. Вспомните метод fromEvent, который я упоминал выше. Используем его:

Теперь наше событие представлено как поток. Если мы посмотрим, что выводится в консоль, то увидим объект типа KeyboardEvent. Но нам нужно введенное пользователем значение. Вот тут-то нам и пригодится метод pipe и оператор map:

Перейдем к реализации требований. Начнем с того, что будем выполнять запрос, когда введенное значение содержит более двух символов. Для этого воспользуемся оператором filter:

С первым требованием разобрались. Приступим ко второму. Нам необходимо реализовать debounce. В RxJS есть оператор debounceTime. Данный оператор в качестве первого аргумента принимает число миллисекунд, в течение которых значение будет удерживаться, прежде чем пройдет дальше. При этом каждое новое значение будет сбрасывать таймер. Таким образом, на выходе мы получим последнее значение, после ввода которого прошло 700 миллисекунд.

Вот как может выглядеть наш поток без debounceTime:

А вот так будет выглядеть тот же поток, пропущенный через этот оператор:

С debounceTime мы будем реже обращаться к API, за счет чего получим экономию трафика и разгрузим сервер.

В целях дополнительной оптимизации предлагаю использовать еще один оператор — distinctUntilChanged. Данный метод избавит нас от дубликатов. Лучше всего показать его работу на примере:

Добавим данный оператор сразу после оператора debounceTime. Таким образом, мы не будем обращаться к API, если новое значение по какой-то причине совпадает с предыдущим. Подобная ситуация может возникнуть, когда пользователь ввел новые символы, а затем снова стер их. Так как у нас реализована задержка, в поток попадет только последнее значение, ответ на которое у нас уже есть.

Идем на сервер

Уже сейчас мы можем описать логику запроса и обработки ответа. Пока мы умеем только работать с promise. Поэтому опишем еще один оператор map, который будет вызывать метод getUsersRepsFromAPI. В наблюдателе опишем логику обработки нашего promise:

На текущий момент мы реализовали все, что хотели. Но у нашего примера есть один большой недостаток: нет обработки ошибок. Наш наблюдатель получает только promise и понятия не имеет, что что-то могло пойти не так.

Конечно, мы можем навесить catch на promise в методе next, но из-за этого наш код начнет все больше напоминать “callback hell”. Если вдруг нам понадобится выполнить еще один запрос, то сложность кода возрастет.

Примечание: использование promise в коде с RxJS считается антипаттерном. Promise имеет множество недостатков по сравнению с observable. Его нельзя отменить, и нельзя использовать повторно. Если перед вами стоит выбор, то выбирайте observable. То же самое касается метода toPromise класса Observable. Данный метод был реализован в целях совместимости с библиотеками, которые не могут работать с потоками.

Мы можем использовать метод from, чтобы спроецировать promise на поток, но этот способ чреват дополнительными вызовами метода subscribe, и также приведет к разрастанию и усложнению кода.

Решить эту проблему можно с помощью оператора mergeMap:

Теперь нам не нужно писать логику обработки promise. Метод from сделал из promise поток, а оператор mergeMap обработал его. Если promise выполнится успешно, то вызовется метод next, и наш наблюдатель получит готовый объект. Если же произойдет ошибка, то будет вызван метод error, и наш наблюдатель выведет ошибку в console.

Оператор mergeMap немного отличается от тех операторов, с которыми мы работали ранее, он принадлежит к так называемым Higher Order Observables, о которых я расскажу в следующей статье. Но, забегая вперед, скажу, что метод mergeMap сам подписывается на поток.

Обработка ошибок

Если наш поток получит ошибку, то он завершится. И если попытаться после ошибки взаимодействовать с приложением, то никакой реакции мы не получим, так как наш поток завершился.

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

Мы перехватываем ошибку в catchError и вместо нее возвращаем поток с пустым массивом. Теперь при возникновении ошибки мы очистим список репозиториев. Но затем поток снова завершится.

Все дело в том, что catchError подменяет наш оригинальный поток на новый. И дальше наш наблюдатель слушает только его. Когда поток of испустит пустой массив, будет вызван метод complete.

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

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

Заключение

Мы наконец-то перешли к практике и увидели, для чего нужны пайпы и операторы. Рассмотрели, как можно сократить код, пользуясь богатым API, которое предоставляет нам RxJS. Конечно, наше приложение не закончено, в следующей части мы разберем, как можно в одном потоке обрабатывать другой и как отменять наш http запрос, чтобы еще больше экономить трафик и ресурсы нашего приложения. А чтобы вы могли увидеть разницу, я выложил пример без использования RxJS, посмотреть его можно здесь. По этой ссылке вы найдете полный код текущего приложения. Для генерации схем я пользовался RxJS визуализатором.

Надеюсь, что данная статья помогла вам лучше понять, как устроен RxJS. Желаю вам успехов в изучении!

Источник

Сказочный портал