Как треск костра, скрип дверей и самый обыкновенный шум становятся музыкой и попадают в электроакустические треки

Рассказываем, как появилось это направление, и кто пишет электроакустическую музыку.


Фото Luis Monse / Unsplash

Что такое электроакустическая музыка

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

Жанр существует примерно с середины XX века. За прошедшее время к нему проявило интерес множество музыкантов. Например, французский композитор Эдгар Варез (Edgar Varese) в 1957 году написал «Poème électronique». В своей работе он использовал звук колоколов, а также разнообразный скрежет и шелест.

Американский композитор Эрик Часалоу (Eric Chasalow) для создания трека «Crossing Boundaries» в 2000 году использовал записи с автоответчиков и отдельные фразы из документальных фильмов.

Музыканты, создающие электроакустические треки, микшируют шумы, заставляя их «перетекать» из одного в другой. Например, они трансформируют кашель в звук заводящегося мотора или превращают автомобильные гудки в звуки духовых инструментов — к слову, последним приемом воспользовался американский музыкант и профессор музыкальной школы при Университете Флориды Пол Кунс (Paul Koonce) в работе Walkabout.

Чаще всего электроакустические треки воспроизводятся в записи без участия автора-исполнителя. Российский композитор Артемий Артемьев, чьи работы часто попадают в чарты радиостанций России, США, Германии, Испании и других стран, говорит, что такая музыка подразумевает многомесячную работу со звуком, которую нельзя проделать на сцене перед аудиторией.

История направления

Электроакустическая музыка является развитием жанра конкретной музыки. Термин ввел французский инженер-акустик Пьер Шеффер (Pierre Schaeffer), который был пионером направления. Конкретная музыка подразумевала запись звуков естественного происхождения — например, капающей воды, скрипов дверей, голосов птиц — на магнитную ленту с целью их последующего микширования. Микширование проводили путем ускорения или замедления движения ленты в магнитофоне, также перезаписывали на один носитель сразу несколько различных аудиозаписей.

Одним из самых ранних примеров конкретной музыки является работа Пьера Шеффера — «Пять шумовых этюдов» 1948 года. Один из этюдов автор записывал на вокзале, поэтому он включает в себя звучание поездов.

В конце 50-х — начале 60-х годов в конкретную музыку пришли электронные технологии, помимо магнитофонов с лентой в арсенал музыкантов и композиторов добавились синтезаторы. Так родилась электроакустическая музыка, в которой помимо звуков природы появились звуки синтезированные. Одним из ее первопроходцев стал уже упомянутый Эдгар Варез. В 1958 году его «Poème électronique» воспроизвели на Всемирной выставке в Брюсселе с помощью 425 громкоговорителей, расположенных в специальном павильоне.

Спустя какое-то время за Эдгаром потянулись другие музыканты. Например мальтийский композитор, исполнитель и поэт Рей Буттиджич (Ray Buttigieg). В его работе «Probing in Space Oceans» можно распознать звук плещущихся волн и капающей воды, переплетающийся со звуком синтезаторов.

Что интересно, «электроакустика» нашла отражение и в популярной музыке, повлияв на творчество исполнителей 60-х годов. Например, различные шумы есть в песнях The Beatles — «Revolution 9» и Pink Floyd — «Bike». Фрэнк Заппа написал несколько композиций, в которых слышны причудливое жужжание, гудки и свист рассекаемого воздуха.

Современные композиторы

Электроакустическую музыку пишет немецкий квартет The Pitch. Его участники смешивают звучание органа, кларнета, контрабаса и вибрафона — ударный инструмент, который относят к группе металлофонов — со звоном колоколов, стуком каблуков, скрежетом и шелестом. Их работы можно послушать на Bandcamp.

Еще пример — бельгийский композитор Конрад Эккер (Koenraad Ecker). В прошлом году он выпустил новый альбом — A Biology of Shadows. Его композиции напоминают смесь грайма, глитча и эмбиента — а среди используемых звуков можно распознать треск костра, сердцебиение, шуршание, скрежет и человеческую речь.

Девятого марта 2018 года свой альбом — «Hidden for the Eyes» — представил словенский композитор под псевдонимом Alapastel. В его треках звучание классических инструментов перемешивается с пением птиц.

Разумеется, мы назвали не всех исполнителей в жанре электроакустической музыки. Если у вас есть любимые композиторы, которые превращают естественные и искусственные шумы в музыку, — расскажите о них в комментариях.


Дополнительное чтение — в нашем «Мире Hi-Fi»:

«Находки аудиомана»: карты звуков как способ погрузиться в атмосферу незнакомого города
«Массаж для твоего мозга»: поговорим об ASMR
Что такое музыкальное программирование — кто и почему им занимается
«Гул Земли»: теории заговора и возможные объяснения
Музыка «по умолчанию»: какие треки можно было найти на плеерах и ПК
Пластинка в подарок или бесплатная музыка для любителей колы и готовых завтраков
Что за музыка была «зашита» в популярных ОС



ссылка на оригинал статьи https://habr.com/ru/company/audiomania/blog/465681/

Лучшие практики React и советы, которые каждый разработчик должен знать. Часть 1

Привет, Хабр! Представляю вашему вниманию перевод статьи «React Best Practices & Tips Every React Developer Should Know Pt.1» автора Alex Devero.

image

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

Содержание:

  1. Сохраняйте ваши компоненты небольшими
  2. Избегайте нагромождения компонентов
  3. Сократите использование stateful-компонентов
  4. Используйте функциональные компоненты с хуками и memo вместо компонентов на классах
  5. Не используйте props в исходном state.


Эпилог: Лучшие практики React и советы, которые каждый разработчик должен знать Часть 1

1. Сохраняйте ваши компоненты небольшими

Оставлять компоненты небольшими — одна из лучших практик React, которая может творить чудеса. Реализация только этой, казалось бы, простой практики может помочь вам писать более чистый и удобный для поддержки код. Не говоря уже о том, что это может помочь сохранить рассудок, или, по крайней мере, то, что осталось.

Есть одно проверенное практическое правило, которое вы можете использовать. Взгляните на метод render. Если в нем более 10 строк, то ваш компонент, вероятно, слишком велик, и является хорошим кандидатом для рефакторинга и разделения на несколько меньших компонентов. Помните, что одной из идей использования React, или частью его философии, является возможность повторного использования кода.

Цель состоит в том, чтобы создать кусочки кода, которые вы пишете один раз, а затем использовать их снова и снова, когда вам нужно. С этой точки зрения нет смысла объединять все ваши данные в один массивный компонент, один файл. И, даже если вам на самом деле наплевать на многократно используемый код, подумайте об этом. Насколько просты в поддержке будут компоненты с сотнями строк кода?

Такой компонент будет трудно поддерживать, отлаживать и обновлять. Это также означает, что любая работа с этим компонентом займет гораздо больше времени. Другими словами, пострадает ваша общая производительность. И рано или поздно это сведет тебя с ума. Или это сведет с ума ваших товарищей по команде и коллег, и они начнут сводить с ума вас.

Что бы вы ни выбрали, вы скоро потеряете рассудок и, возможно, наживете себе врагов. Это того не стоит. Следите за тем, чтобы ваши компоненты были небольшими. Сохраните дружеские отношения, здравомыслие, время и продуктивность. Упростите отладку, обновление и сопровождение кода. Рассмотрим один пример.

Было

/// // file: index.jsx import React from 'react' const books = [   {     category: 'Business',     price: '$20.00',     name: 'Private Empires',     author: 'Steve Coll'   },   {     category: 'Philosophy',     price: '$25.00',     name: 'The Daily Stoic',     author: 'Ryan Holiday'   },   {     category: 'Sport',     price: '$15.95',     name: 'Moneyball',     author: 'Michael Lewis'   },   {     category: 'Biography',     price: '$21.00',     name: 'Titan',     author: 'Ron Chernow'   },   {     category: 'Business',     price: '$29.99',     name: 'The Hard Thing About Hard Things',     author: 'Ben Horowitz'   },   {     category: 'Fiction',     price: '$4.81',     name: 'Limitless: A Novel',     author: 'Alan Glynn'   } ] class Bookshelf extends React.Component {   render() {     const tableRows = []     this.props.books.forEach((book) => {       tableRows.push(         <tr>           <td>{book.name}</td>           <td>{book.author}</td>           <td>{book.price}</td>           <td>{book.category}</td>         </tr>       )     })     return (       <div>         <form>           <input type="text" placeholder="Search..." />           <button>Search</button>         </form>         <table>           <thead>             <tr>               <th>Name</th>               <th>Author</th>               <th>Price</th>               <th>Category</th>             </tr>           </thead>           <tbody>{tableRows}</tbody>         </table>       </div>     )   } } // Render Bookshelf component ReactDOM.render(<Bookshelf books={booksData} />, document.getElementById('container'))

Стало

/// // file: books-data.js const books = [   {     category: 'Business',     price: '$20.00',     name: 'Private Empires',     author: 'Steve Coll'   },   {     category: 'Philosophy',     price: '$25.00',     name: 'The Daily Stoic',     author: 'Ryan Holiday'   },   {     category: 'Sport',     price: '$15.95',     name: 'Moneyball',     author: 'Michael Lewis'   },   {     category: 'Biography',     price: '$21.00',     name: 'Titan',     author: 'Ron Chernow'   },   {     category: 'Business',     price: '$29.99',     name: 'The Hard Thing About Hard Things',     author: 'Ben Horowitz'   },   {     category: 'Fiction',     price: '$4.81',     name: 'Limitless: A Novel',     author: 'Alan Glynn'   } ] export default booksData /// // file: components/books-table.jsx import React from 'react' class BooksTable extends React.Component {   render() {     const tableRows = []     this.props.books.forEach((book) => {       tableRows.push(         <tr>           <td>{book.name}</td>           <td>{book.author}</td>           <td>{book.price}</td>           <td>{book.category}</td>         </tr>       )     })     return (       <table>         <thead>           <tr>             <th>Name</th>             <th>Author</th>             <th>Price</th>             <th>Category</th>           </tr>         </thead>         <tbody>{tableRows}</tbody>       </table>     )   } } export default BooksTable /// // file: components/search-bar.jsx import React from 'react' class SearchBar extends React.Component {   render() {     return (       <form>         <input type="text" placeholder="Search..." />         <button>Search</button>       </form>     )   } } export default SearchBar /// // file: components/bookshelf.jsx import React from 'react' // Import components import BooksTable from './components/books-table' import SearchBar from './components/search-bar' class Bookshelf extends React.Component {   render() {     return (       <div>         <SearchBar />         <BooksTable books={this.props.books} />       </div>     )   } } export default Bookshelf /// // file: index.jsx import React from 'react' // Import components import Bookshelf from './components/bookshelf // Import data import booksData from './books-data' // Render Bookshelf component ReactDOM.render(<Bookshelf books={booksData} />, document.getElementById('container'))

2. Избегайте нагромождения компонентов

Каждое правило должно применяться с осторожностью. Это также относится и к этим лучшим практикам React, особенно предыдущей. Когда дело доходит до компонентов, очень легко переусердствовать и написать даже мельчайшие фрагменты кода в виде компонентов. Не делай этого. Нет смысла делать так, чтобы каждый параграф, span или div был компонентом.
Думайте, прежде чем начать делить каждый компонент на мелкие части. Вы можете думать о компоненте как о смеси из «HTML», которая делает только одно, будучи независима, и пользователь воспримет ее как единое целое. Имеет ли смысл сделать этот кусок кода компонентом? Если нет, объедините этот код. Иначе, разделите его.

Давайте рассмотрим некоторые примеры, чтобы проиллюстрировать это определение компонента. Одним из примеров является модальный диалог. Этот компонент может состоять из множества мелких элементов, таких как div’ы, заголовки, абзацы текста, кнопки и т.д. Теоретически, все эти элементы можно выделить в небольшие компоненты.

На практике это бессмысленно. Да, некоторые из этих элементов могут существовать независимо друг от друга. Однако действительно ли полезно создавать компонент, состоящий только из одного абзаца или одного заголовка? Что будет дальше? Компонент для label, input или даже span? Такой подход не является устойчивым.

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

Затем вы объединяете атомы и создаете молекулы. Примерами молекул могут быть модальный диалог, форма, всплывающее окно, выпадающее меню, навигация и т.д. Далее, вы можете комбинировать одну молекулу с другой или с атомом и создавать организм. Примером организма может быть заголовок, список товаров или корзина для покупок. Шаблоны, страницы и утилиты теперь не важны.

Как совместить атомарное проектирование с этими двумя примерами лучшего опыта в области компонентов React? Давайте не будем усложнять. Компонентом может быть что угодно большее, чем атом, т.е. молекула, организм или даже шаблон или страница, если их взять до предела. В этом смысле label, заголовок, параграф не являются компонентами, потому что это атомы.
Однако модальные диалоги, формы, всплывающие окна, выпадающие списки и т.д. являются компонентами, поскольку все они относятся либо к молекулам, либо к категории организма. Все еще есть некоторые сомнительные элементы, такие как кнопка. Да, с точки зрения атомной конструкции это атом. Однако она может существовать независимо, во многих вариациях и все еще работать.

В подобных случаях я предлагаю не задумываться над лучшими практиками React’а, и просто руководствоваться своим внутренним чутьем. В конце концов, именно вы будете работать с кодом. Важно то, что вам удобно. Так что не надо просто слепо следовать какому-то списку передовых практик. А если ты работаешь в команде? Поделитесь своими мыслями об этом со своими коллегами.

3. Сократить использование stateful-компонентов

Это одна из лучших практик React, которая применялась в течение определенного времени. Однако эта практика стала более популярной с появлением React 16.8.0 и React hooks. До этого, когда вы хотели использовать состояние или любой метод жизненного цикла, вам также приходилось использовать stateful-компонент. Другого выхода не было.

Хуки изменили это. После того, как они были официально представлены, разработчики React больше не ограничивались stateful-компонентами, так как им нужно было использовать состояние. Благодаря хукам разработчики React теперь могут писать функциональные компоненты (stateless), используя при этом state и даже методы жизненного цикла по своему желанию.

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

Однако эти небольшие различия могут складываться по мере роста вашего проекта. Также подумайте о том, сколько строк кода требуется компоненту с контролем состояния по сравнению с функциональными. Функциональные возможности также короче и часто проще для чтения. Давайте посмотрим на компонент кнопки, определяемый как компонент с контролем состояния и функциями. Какой из них вам больше нравится?

 // Button defined as a stateful component class Button extends React.Component {   handleClick = () => {     // Do something   }   render() {     return(       <button type="button" onClick={this.handleClick}>Click me</button>     )   } } // Button defined as a functional component const Button = () => {   const handleClick = () => {     // Do something   }   return(     <button type="button" onClick={handleClick}>Click me</button>   ) } 

4. Используйте функциональные компоненты с хуками и memo вместо компонентов на классах

Как мы уже обсуждали, вам больше не нужно использовать компоненты, учитывающие состояние, только для того, чтобы использовать состояние. Более того, некоторые разработчики React также считают, что в будущем React начнет отходить от классов. Правда ли это, сейчас не важно. Важно то, что один функциональный компонент теперь может использовать состояние благодаря хукам.
И, во-вторых, использование функциональных компонентов имеет свои преимущества. TLDR? Нет класса, наследования и constructor. Нет этого ключевого слова. Передовая практика строгого React. Высокое соотношение сигнал/шум. Раздутые компоненты и плохие структуры данных легче обнаружить. Код легче понять и проверить. И, опять же, производительность лучше.

И еще кое-что. Многие разработчики React выступали против функциональных компонентов. Одна из проблем заключается в том, что вы, как разработчик React, не можете контролировать процесс рендеринга при использовании функционального компонента. Когда что-то меняется, React возвращает функциональный компонент, независимо от того, был ли сам компонент изменен.
В прошлом решение заключалось в использовании чистого компонента. Чистый компонент обеспечивает возможность сравнения состояния и props. Значит, React может «проверять», изменилось ли содержание компонента, props или самого компонента. Если да, то он вернёт его. В противном случае он пропустит повторный рендеринг и будет повторно использовать последний отрисованный результат. Меньше рендеринга равнозначно лучшей производительности.
С выпуском React 16.6.0 это больше не проблема, и аргумент против функциональных компонентов больше недействителен. Что изменило игру, так это memo. Memo принесла неглубокое сравнение с функциональным компонентом, возможность «проверить», изменилось ли содержание компонента, props или самого компонента.

Опять же, основываясь на этом сравнении, React либо вернет компонент назад, либо повторно использует результат последнего рендеринга. Короче говоря, memo позволяет создавать «чистые» функциональные компоненты. Больше нет причин использовать statefull-компоненты, или чистые компоненты. По крайней мере, если вам не нужно справляться со сложным состоянием.

В этом случае вам следует рассмотреть возможность использования чего-то более масштабируемого и управляемого, например, MobX, Redux или Flux, вместо состояния компонентов. Другим возможным вариантом могло бы стать использование контекста. В любом случае, благодаря хукам и memo, функциональные компоненты, безусловно, являются одними из лучших практик React, о которых стоит задуматься.

5. Не используйте props в исходном state

Это одна из лучших практик React, о которой я хотел бы знать, когда начинал изучение. Тогда я не знал, что это была очень плохая идея — использовать props в исходном состоянии. Почему это плохая идея? Проблема в том, что конструктор вызывается только один раз, во время создания компонента.

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

Это может не быть проблемой, если вы хотите, чтобы состояние получало значения от props только один раз, во время первоначального рендеринга, и вы бы управляли состоянием внутри компонента. В противном случае, вы можете решить эту проблему с помощью componentDidUpdate. Как сказано в названии, этот метод жизненного цикла позволяет вам обновлять компонент при изменении чего-либо, например, props.

Если вы решили использовать этот метод, запомните одну вещь. Он будет задействован не при первоначальном рендеринге, а только на следующем. Поэтому обязательно инициализируйте состояние компонента необходимыми значениями, возможно, полученными из props. Затем используйте componentDidUpdate для обновления этих значений и компонента по мере необходимости.

Эпилог: React Лучшие практики и советы, которые каждый разработчик должен знать Часть 1

Поздравляю! Вы только что закончили первую часть этой мини-серии статей, посвященную передовым методам React’а. Сегодня вы узнали о пяти практиках, которые можно использовать, чтобы сделать код React более коротким, простым, лучшим, быстрым и удобным для чтения и обслуживания. Теперь дело за вами, внедрить ту практику, с которой вы согласны, и начать ее использовать.

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

Если вам понравилась эта статья, тогда, пожалуйста, подпишитесь.

Первоначально опубликовано в блоге Alex Devero Blog.


ссылка на оригинал статьи https://habr.com/ru/post/465685/

Использование REST в ENM Ericsson на Python

Здравствуйте. Не так давно Ericsson выпустил новую систему управления Ericsson Network Manager (ENM), которая уже успела появится у некоторых операторов сотовой связи. Было бы интересно разобрать некоторые вопросы по работе с ней и, в этой статье, коснёмся вопроса работы с не встречавшимся ранее (в OSS-RC) Northbound Interface, а именно RESTful API. Использовать будем python и библиотеку requests.

Через REST интерфейс доступны такие функции как: администрирование пользователей, CM Bulk Import/Export, Virtual Network Function, управление коллекциями, управление сотами и прочее. В документации ALEX есть достаточно подробные описания возможностей данного API без привязки к языку программирования. В качестве примера попробуем подключиться к NBI Cell Management используя библиотеку requests для python. Описание интерфейса доступно в библиотеке ALEX «Configuration Tasks — CM Cell Management REST Northbound Interface».
Указанный функционал позволяет управлять конфигурацией сот, соседствами между ними, частотными соседствами на узлах LTE, WCDMA и GSM внутри одного ENM. Также возможно управление хэндоверами как в сторону соседних ENM, так и в сторону OSS-RC.
RESTful интерфейс доступен по следующему адресу:

https://<customer-domain>/configuration-tasks/v1/tasks

Структура JSON запроса имеет вид:

  • Request URL: «configuration-tasks/v1/tasks»
  • Request Type: POST
  • Content Type: application/json
  • Body: в соответствии с документацией для выбранной команды.

В python воспользуемся объектом Session из библиотеки requests.

import requests import json from requests.packages.urllib3.exceptions import InsecureRequestWarning from requests import Session from requests.exceptions import HTTPError   class enmRestSession(Session): 

Обвешаем его требуемой ENM авторизацией и некоторыми «настройками по-умолчанию».

    def __init__(self, enm, login, password):         super().__init__()        # добавляем / если забыли его указать при создании объекта         self.enm = enm if enm[-1] == "/" else f"{enm}/"         # устанавливаем заголовки         self.headers.update({"Content-Type": "application/json"})         # отключаем проверку https сертификата         self.verify = False         # отключаем предупреждения безопасности         requests.packages.urllib3.disable_warnings(InsecureRequestWarning)         # авторизуем сессию на ENM         login_str = f"{enm}login?IDToken1={login}&IDToken2={password}"         rest_response = self.post(login_str)         # при неудачной авторизации поднимаем исключение         if rest_response.status_code != requests.codes.ok:             raise HTTPError() 

Оформим метод отправки REST запроса.

    # в качестве параметра передаём в функцию словарь request_body     def send_configuration_task(self, request_body):         url = f"{self.enm}configuration-tasks/v1/tasks"         # отправляем запрос методом POST используя сформированный выше URL          resp = self.post(url, data=json.dumps(request_body))         return resp 

Добавим автоматическое закрытие сессии в ENM при использовании контекстного менеджера.

    def __exit__(self, exc_type, exc_val, exc_tb):         try:             # для закрытия сессии достаточно послать logout             self.get(f"{self.enm}logout")         finally:             super().__exit__(self, exc_type, exc_val, exc_tb) 

Получившуюся небольшую надстройку можно использовать в скриптах для своих нужд. Например получение всех сот узла RNC.

def main():     param = {"name": "readCells", "fdn": "NetworkElement=RNC01"}     with enmRestSession(                         "https://iegtbl8030-7.gtoss.eng.ericsson.se/",                         "login",                         "pass"                        ) as s:         print(s.send_configuration_task(param).json()) 

Описание всех возможный запросов есть в указанной выше библиотеке ALEX. Не думаю что могу опубликовать её где-нибудь, но на какие-то вопросы постараюсь ответить. Полный код доступен на GitHub. Спасибо всем кто прочитал.


ссылка на оригинал статьи https://habr.com/ru/post/465691/

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

Изображение: Pexels

Не все предприниматели знают об этом, но на современном фондовом рынке есть возможности для корпоративных инвестиций. Как же заработать дополнительных денег для компании с минимальным риском?

Примечание: речь в тексте пойдет об инвестициях на Московской бирже с помощью услуг лицензированных брокеров, работу которых контролирует Центробанк. Тема структурных продуктов не имеет ничего общего с работой на Форексе и другими видами финансовой деятельности. Для совершения операций, описанных в материале нужно будет открыть брокерский счет.

Что такое структурные продукты

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

Но можно нырнуть еще глубже и создать на базе нескольких таких производных инструментов еще один, с заранее известными параметрами рыночного риска. Это и будет структурный продукт.

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

Сколько можно заработать

Доходность структурного продукта меняется в зависимости от коэффициента участия и изменения стоимости базового актива (акции, индекса и т.п.)

Пример:

Если вы выбрали коэффициент участия в 70%, а цена базового актива изменилась в нужную вам сторону на 10%, то доход составит 7%.

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

В одной из предыдущих статей мы разбирали использование структурных продуктов для частных инвесторов на примерах реальных стратегий на август текущего года. Вот спецификация одной из них (защита капитала на уровне 100%):

Использование структурных продуктов позволяет получать и доход, который будет выше, чем при вложениях в сам базовый актив – для этого нужно отрегулировать параметры продукта (его срок, уровень защиты капитала и т.п.).

Как инвестировать в структурные продукты

Все довольно просто – для начала нужно открыть корпоративный брокерский счет, сделать это можно онлайн (выбирайте опцию «при помощи консультанта»).

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

  • Базовый актив
  • Уровень защиты капитала
  • Направление движения базового актива (рост или падение)
  • Начальная цена базового актива
  • Коэффициент участия
  • Срок структурного продукта

На этом все – останется только дождаться исполнения заданных условий.

Полезные ссылки по теме инвестиций и биржевой торговли:


ссылка на оригинал статьи https://habr.com/ru/company/iticapital/blog/465703/

Между первой и второй линиями технической поддержки

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

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

Традиционный процесс поддержки в Банке был построен по классической схеме и выглядел следующим образом
image
рис.1 Схема организации процесса сопровождения (было)

Запрос проходил через первую, вторую и третью линии поддержки, распределялась между ними в следующих пропорциях: 15:75:10.

Первая линия — Service Desk — прием, обработка, маршрутизация обращений с использованием следующих каналов коммуникации:
телефон — 8% от всего количества обращений
портал самообслуживания — 83% от всего количества обращений
электронная почта — 4% от всего количества обращений
чат-бот в Viber и Telegram — 5 % от всего количества

Также первая линия занимается решением инцидентов удаленно на рабочих местах пользователей, предоставлением доступов в информационные системы Банка. О работе этого подразделения я написал в отдельной статье — ссылка здесь

Вторая линия — команды сопровождения прикладного ПО + инфраструктура + DBA + …,

Третья линия — это команды разработки.

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

Взяв выборку из инцидентов за несколько месяцев и проведя анализ их жизненного цикла, мы выяснили, что большую часть своей жизни они проводит в очереди, в ожидании анализа сотрудником команды сопровождения второй линии (иногда до 80%), периодически, с переназначением между командами и продолжительной перепиской в теле запроса.
В процессе разбора и проведении анализа этих инцидентов, мы выяснили, что для решения интеграционных ошибок коллегам нужна информация со стороны смежных интеграционных систем (логи, анализ влияния и т.д.), за которой они и обращаются друг к другу, маршрутизируя инциденты.

В целях минимизации времени решения инцидентов, как пилотный проект, мы решили создать кроссфункциональную объединенную команду из сотрудников первой и второй линии для решения инцидентов в фронт системах Банка – интернет-банк, мобильный банк, сервисы отправки сообщений (sms и push) + основная фронт — офисная система Банка.

Эта команда является промежуточной между первой и второй линиями — полуторная линия поддержки, которую мы назвали “Frontline”.

Уже на стадии формирования этой команды мы столкнулись с определенными трудностями, в том числе, со стороны менеджеров второй линии, так передача даже одного сотрудника на этот проект от каждой из систем означала уменьшение капаситета текущей команды. Да и сами сотрудники второй линии, которые должны были участвовать в пилоте не горели желанием погрузиться с головой только лишь в решение инцидентов.
Путем итерационных переговоров, мы смогли договориться о том, что основная задача участников со второй линии в этом проекте — обучение сотрудников первой линии, совместное создание общей базы знаний, выстраивание процессов внутреннего взаимодействия, предоставление необходимых доступов, и после этого, постепенное возвращение обратно в свои подразделения.

Местом локации «Frontline» стал ИТ-Центр Банка в городе Обнинск.

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

  • два сотрудника первой линии поддержки
  • два сотрудника группы сопровождения фронт-офисной системы
  • два сотрудника группы сопровождения Интернет-банка и мобильного банка
  • один сотрудник группы сопровождения сервисов информирования клиентов (sms & push)

Основной фокус команды был сконцентрирован на 3-х показателях:

  • СКОРОСТЬ — 70% запросов, поступающих в команду, необходимо решать не более чем за 8 рабочих часов
  • КОЛИЧЕСТВО — команда может маршрутизировать на вторую линию поддержки не более 20% запросов
  • КАЧЕСТВО — доля переоткрытых пользователями инцидентов не должна быть более 3%

image
рис. 2 Процесс обработки инцидентов с участием Frontline

Следующая трудность, с которой мы столкнулись в начале пилота, это — отсутствие команды в изначальном нашем ее понимании, при ее наличии.

Несмотря на то, что сотрудники «Frontline» находились рядом в одном помещении, попыток перехода к кроссфункциональности, обмена опытом, значительного взаимодействия внутри не возникало. Каждый участник, как и ранее, был сосредоточен на решении запросов по своей системе, в результате — кто-то был “завален” инцидентами, кто — то был явно более свободен.

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

Зачем?

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

Сделали необходимые учетные записи, предоставили достпы к логам приложений и баз данных, и вперед! 🙂
Сначала скорость решения инцидентов снизилась. Понятное дело, когда ты не знаешь тонкостей работы системы, а тебе еще и инциденты по ней решать надо — это задача непростая. Но ребята стали обращаться за помощью друг к другу, изучать и обновлять общую базу знаний и постепенно дело пошло.
Также каждый день мы стали проводить небольшие стендапы в начале каждого рабочего дня, около листов бумаги которые мы наклеили на стены и с ежедневными показателями. Мы обсуждали и дорисовывали их маркером, радуясь их выполнению или обсуждая причину неудачи, в случае если не смогли их достигнуть.
В последующем, конечно, мы заменили эти листы бумаги онлайн дашбордами.

image
рис.3 Дашборд эффективности Frontline

Здесь нужно сказать отдельное «спасибо» руководителю команды сопровождения фронт-офисной системы Банка, который взял на себя функции лидера и культивировал развитие командны изнутри — Алексей, спасибо! 🙂

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

image
рис.4 Пилотный проект Frontline, первые показатели

Очень скоро стало понятно, что пилот успешно “взлетел”, и целесообразно проект масштабировать.
Постепенно, мы начали добавлять в команду компетенции по другим системам, выводить сотрудников второй линии и добавлять сотрудников из Service Desk.
Постепенно мы перешли к «Т — кроссфункциональности», когда за каждым участником закреплены одна основная система и две смежные.

image
рис. 4 Сравнительная статистика за 2018 год по времени решения запросов между Frontline и командами сопровождения второй линии

За 2018 год, команда Frontline закрыла больше инцидентов, чем любое другое подразделения сопровождения в Банке. Ребята значительно превысили установленные таргеты, в очередной раз показав, что командная работа и кроссфункциональные компетенции позволяют достигать значительных результатов.
Для второй линии поддержки «Frontline» сегодня — это надежный «щит», который значительно снижает поток обращений приходящий к ним.

image
рис.5 Количество и доля инцидентов решенных во «Frontline» (на рис. — Team1) по отношению к инцидентам, решенным на второй линии по всем системам Банка

Сегодня все участники «Frontline» — это сотрудники из Service Desk, которые решают инциденты по основным фронт системам Банка, выдерживая заданные целевые показатели.
Так же «Frontline» — это следующая ступень для сотрудников Service Desk в нашей карьерной лестнице, перед переходом на вторую линию поддержки.


ссылка на оригинал статьи https://habr.com/ru/company/homecredit/blog/465511/