Зарабатываем на солнечной энергии или пассивный доход в 25% годовых, практический опыт. Часть 2


КДВП © Diana, made by Siuzanna

Часть 2. Практическая

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

Шаг 1. Получаем выделенную мощность

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

Подключение теперь не дешевая штука, официальная стоимость зависит от облэнерго, но вы можете посмотреть стоимость заранее, есть калькулятор www.nerc.gov.ua/?calc.
По Украине колеблется от ~1-го до ~6К$ за 30кВт, в зависимости от Облэнерго. Это при условии, что до подстанции, меньше чем 300м по прямой (стандартное подключение).

ВАЖНО! Качество линии и стабильная работа подстанции критически важны. В общем случае, подключение должно проводиться выделенной линией до подстанции. Тогда соседи ограждены от поднятия напряжения, станция не вылетает в ошибку на максимуме генерации, и вообще так правильно.

А если больше 300м?

А еще у Вас может быть больше чем 300м по прямой – стоимость подключения смело множим на 1.5 -2х (при этом выделенная линия, правильного сечения, просто необходима).
А еще на подстанции почти всегда нет свободной мощности – всех подключают как потребителей, а подстанции старые и загруженные. Никого не волнует, что вы будете генерировать и разгружать подстанцию.
А еще нужна добрая воля облэнерго и подрядчиков. Может не быть материалов, начальник в отпуске, ну и вообще. А есть еще и РЭС….
Поэтому, время на пробивание стены бюрократии от момента подачи заявления до получения 3-х фазного ввода может составлять до полугода очень просто.

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

Но вот вы преодолели все бюрократические преграды, и начинается монтаж ввода.
Проблемы с вводным автоматом — реально очень распространенные. Кто-то подводит себе бОльшую мощность, что б получить автомат 63А, кто то «перепаковывает».

ВАЖНО! Купите промышленный вводной автомат. Под гильзы. Этим вы сэкономите очень много нервов и денег. Не слушайте никого, кто будет говорить, что не влезет, а зачем, не будем. Он должен там стоять. И желательно не экономить на бренде. Я успел поменять 3 сгоревших простых брендовых автоматов, пока не пришел к этой истине.

Как впихнуть невпихуемое

А зачем промышленный автомат?

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

Пример начала плавления провода.

Не успели подтянуть.

В комплекте стандартного подключения, все прочие автоматы ставятся самые дешевые. Стоит озадачиться этим отдельно. РНПП обычно перегревается, УЗО должно быть более 100 мА, иначе будет постоянно выбивать (итого замена еще 4-х 30мА УЗО).

Стандартное подключение, 2 итерация


Кто угадает, что оказалось в корне не верно тут? Ток УЗО не в счет.

Параллельно стоит купить двунаправленный счетчик с модемом и заказать его параметризацию. В Украине крайне популярны

ACE 6000

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

Вообще с подрядчиками стоит дружить, порой они творят чудеса.

Итого в среднем стандартное подключение 30кВт со всеми автоматами, счетчиками, работами и прочими расходами будет порядка 4-8К$.
Забыл упомянуть в первой части – для получения ЗТ нужно право собственности на дом, землю и очень часто сертификат на инвертор. Остальное достается быстро и не больно.

Шаг 2

Выбираем оборудование

Солнечные панели.

Основное в цене большой дСЭС – это солнечные панели. С момента начала постройки, цена на них успела упасть с 0,5$/Вт до 0,35$/Вт теперь за Tier1, и продолжает падать. Можно найти панели и по 0,25$/Вт от Tier2 производителя.

Все панели поделились в зависимости от понятия Tier. Tier 1 – самые лучшие, Tier 3 — некоторые говорят, что такого Tier-а не бывает рыба бывает только первой свежести.

Не так страшен Tier, как его малюют.

Bloomberg оперирует понятием Tier1, которое описывает _финансовое_ состояние компании, производящей солнечные панели. Помимо этого, это своя линия производства, поставки на внешние рынки, определенные объемы продаж.
В целом неплохой рейтинг, но на самом деле о качестве никто ни сказал ни слова.
Сам список приводить нельзя, но он легко гуглится. Стоит сравнивать независимые списки, некоторые любят подпихнуть туда свои панели, и народ верит.
Tier2 – это обычно те, кто собирает солнечные панели, из чужих ячеек. Либо не захотел выполнять все рекомендации Bloomberg. Главный недостаток этого варианта – у соседа могут стоять панели с крутыми ячейками, а какие приедут тебе – никто не скажет заранее. И как они себя поведут в работе тоже не известно.
Поэтому каждый может выбрать для себя свой вариант – либо платим немного больше, и получаем надежду на качество, либо играем в лотерею, но задешево.

Я выбрал панели JA Solar (Tier 1, Китай).

Почему я их выбрал? На тот момент на рынке была «Европа», крутые бренды типа LG (с ценником х2-3), куча мелких завозчиков (кто что смог притащить), и 2 фирмы, на которые я нашел прямой выход. Вот эти фирмы и возили Ja Solar.

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

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

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

Мой совет — что угодно, но только у проверенного поставщика. Начинают подделывать все. Переклеили шильдик, красивая коробка, и вуаля – Tier1.
Глобально я за Tier1, но это не догма. Рынок Tier2 Украины сейчас рвет Amerisolar, но см. пункт про шильдики, производителя ячеек и поставщика.

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

Вторая итерация была с тем же Ja Solar, но уже выполненных по технологии Half-cell. В то время была как раз разгар маркетинговых войн у кого длиннее больше токопроводящих дорожек (Bus Bar), и во всю штамповались решения 5BB, 12BB и т.д. Half Cell – режем ячейки поперек, и получаем, в теории, в 2 раза больше проводов и меньше сопротивление. Я тоже пал жертвой маркетинговой политики, я горел желанием купить именно Half Сell. Все усугублялось тем, что я видел реальные результаты работы 33,6 кВт станции в жару. А тут как раз обещали сильно улучшенные характеристики.
К сожалению, это больше маркетинговый ход. Реальная выработка увеличилась на 3-4%, и то только в жаркую погоду.


Сравнение одинаковых по мощности станций, одна на простых Ja Solar, вторая Half Cell
Проседание с утра вызвано небольшим затенением.

Так а сколько нужно панелей то??
Уже имея опыт эксплуатации, могу с уверенностью утверждать, что размер «солнечного поля» направленного на Юг, должен быть 37000+ кВт, и это будет приводить к минимальным потерям и максимизации прибыли. Есть мнение, что поставив 45 кВт панелей, потери тоже уложатся в разумный диапазон. Не знаю, буду тестировать.

Какие именно панели брать сейчас? Если места достаточно, то лучше всего брать модель в оптимальном соотношение $/Вт. Сейчас идет явный перевес в сторону Mono Perc. Думаю можно и их рассматривать, но тут только Tier1 ( читаем про LeTID ).
Есть новая фишка, двухсторонние панели. Отзывы хорошие. Только многие умалчивают, что их крепление стоит опять же в N раз дороже. Ну и как то облагораживать нужно землю, белых камешков, например, насыпать.

А 40кВт панелей работают вот так

40 Half Cell VS 33.6 Half Cell VS 33.6 простых
График сильно меняется от температуры, ветра, высоты солнца над горизонтом (про зависимость от самого солнце и облаков, я надеюсь, и так понятно).

Инвертор
Рынок чуть ли не суровее чем рынок панелей. Кто что привез, тот то и хвалит. Все еще круто замешано на фоне «серых поставок» с Европы. Были предложения и чудесных инверторов с шильдиком 30кВт, а реально 35+ кВт.

Теперь скорее на чем больше маржа, тот то и продает.

Топ производителей инверторов опять же легко гуглится. Тода были популярны Fronius, ABB, Huawei и попадались предложения SMA и KACO. ABB успешно «слило» свой бизнес по инверторам, моё отношение к инверторам Fronius негативное. Остальное не рассматривал. Была одна большая проблема – в линейке громких (тогда) имен именно 30кВт моделей почти нет. И тут начинается то, что меня убило вообще.

Людям монтируют в лучшем случае 2 инвертора, стандартная схема 27+3 (15+15) или сразу 3 инвертора (а могем!) по 10. Иногда люди удовлетворяются просто 27.

Причем отстаивают свою точку зрения надежностью, резервируемостью и прочим. За деньги 3*10 я могу купить 2 своих 30кВт инвертора и 1 положить на склад, для резервируемости.

Так а что у меня? Считаю заслуженный хит продаж в Украине (по инсайдам, не только я так считаю)

Huawei SUN-2000 33KTL-A

.

Когда все только начиналось, на рынке были все те же Huawei SUN-2000 33KTL, но без буковки А. Я специально подождал месяц (а потом еще 4 пока писал жалобы, см. шаг 1), что б заказать именно их, с буковкой «А», прочитав спецификацию. Это «задушенный» промышленный инвертор, единая линейка исполнения для 33, 36 и 42 кВА! Все тот же корпус и шикарный пассивный радиатор. Очумелые ручки бьются (по легендам кто то таки смог, сервис говорит неправда) над возможностью что то мыкнуть, и получить 33кВт вместо 30.

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

Еще из плюсов – большой диапазон входных напряжений, низкое напряжение старта, 4 независимых MPPT трекера и полный набор защиты, как по переменке так и постоянке.

Есть и минус – для связи в комплекте есть только Bluetooth свисток, а вот для связи с Китайской компартией и удаленного мониторинга нужно докупать блок за 450$

SmartLogger 1000, первые киловатты.
Учитывая, что у меня N к 1, то я его приобрел, очень удобно. Но в общем случае, нужно к нему подойти, и посмотреть на лампочки, что б понять его состояние, или подключиться с телефона (3-5м).

Колхозим свой мониторинг

Самое простое решение – любое Android устройство с удаленным доступом (например телефон с TeamViewer).
У инвертора есть RS485, торчащий наружу, SmartLogger подключается именно к нему. Мне выслали расшифровку протокола, и народ уже начал делать свои логгеры, на основе китайских RS485 шлюзов. Кто то сделал приложение на телефон. Видел решение за 250$ на малине и телеграмме. Каждое все равно имеет ряд минусов, как на меня.
Я думал сделать свой продукт, но вот статья и отпуск это как то отодвинуло. Не совсем ясно и с правами на протокол. Если кто то знает про RS485 шлюз с 3G, которому хватает питания от USB 2.0, для стабильной работы, буду рад за советы в личку.

Хочу огорчить читателей, на момент написания статьи, Huawei SUN-2000 33KTL-A попал в EOL, и точной информации, что будет вместо него, мне не предоставили.

Шаг 3. Выжимаем максимум.

У каждого инвертора есть оптимальный диапазон напряжений. У Huawei KTL33A это 620В. Если напряжение будет 800 или 500 – потеряем 1%. Если выйдем за эти рамки – потери увеличатся.
Второй параметр, на который нужно обратить внимание – это напряжение старта. Тут оно довольно низкое, 200 В. Пальцем показывать не будем, но у конкурентов стартовое напряжение 580В. И инвертор не стартует, пока солнце не поднимется достаточно высоко и на панелях не будет 580В. Тоже самое и на закате. Так же, со временем, панели деградируют. И как только в жаркую пору напряжение просядет ниже 580В, получим или уход оптимальной точки MPPT или отказ от работы.

Значит наша задача, собрать панели так, что б в летний, самый оптимальный период, они выдавали 650+ В, с тем расчетом, что б при расчетной деградации в 10% мы были на максимуме.

Переходим к интересным циферкам из даташита солнечной панели.

У каждой панели они свои. Нас интересуют две основные цифры — Open circuit voltage и Temperature Coefficient of Voc. Зная их, мы можем всё посчитать. А, ну и еще мощность самой панели, конечно же.

Посмотрим на мою 265 Вт панель Ja Solar

Open circuit voltage (Voc) – 37.95В
Это напряжение короткого замыкания, выше него панель выдать не может, при STC (Температура ячеек 25С).
Но у нас есть бывает зима, и при охлаждении (как и нагревании) напряжение у нас меняется на Temperature Coefficient of Voc (BVoc) «- 0.33/C» (напряжение растет на 0.33В при охлаждении на 1 градус ниже STC, и падает на ту же величину при нагреве).
По правилам безопасности, положено проводить расчет на не превышение максимального напряжения в 1000В. Панели сертифицированы именно на это напряжение, как и кабель да и УЗИП. Именно этот инвертор выдерживает 1100В.
Итого, в морозный февральский день, солнце выглядывает из-за туч и освещает панели под углом 90 градусов и световым потоком 1000Вт/м2. Снега на них конечно при этом нет. Панели имеют температуру окружающей среды, инвертор на холостом ходу (или отключен), и напряжение выходит за допустимые рамки, что влечет за собой пробой изоляции и т.д. (такого быть не может, но так считать положено).
Обычно считают, что панели не будут холоднее 15С. Я с этим согласен, т.к. даже под снегом (сам удивился), или когда в небе тучи, они все равно работают и греются.

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

Формула выглядит так –
V max = Voc * (100+ BVoc*(-15-Tstc))/100
Значит максимальное напряжение, какое может быть в теории в одной панели будет
V max = 37.95*(100+ (- 0.33)*(-40))/100 = 37.95*1.132=42.96В
Значит, больше 1000В/42.96В = 23.2 панелей мы поставить не можем. Я много читал и общался про мой тип панели, и знаю, что их ставят и по 24. Но это скорее на свой страх и риск. 23 панели гарантированно не сгорит. По слухам, 26 у кого-то погорело.
Итого имеем в одной цепочке (стринге) 23 последовательно подключенных панелей.
Это даст нам теоретическую мощность 265Вт*23 = 6095кВт, теоретическое рабочее напряжение (при NOCT) 28,29В*23 = 665.85В. В реальности летом будет еще ниже.
Итого, для достижения 40кВт нам нужно 40/6 = 6,5 стрингов, не красиво.

Итого, лучшие возможные варианты:
1. – делаем 7 стрингов 23*265, и будет мощность солнечного поля 42665Вт
2. — делаем 6 стрингов, 23*265 и будет мощность солнечного поля 36570Вт
3. – делаем 7 стрингов, но ставим по 22 панели в стринг. Мощность солнечного поля 40810Вт.

Я считал, что 33,6кВт по самые уши, поэтому ставил 6 стрингов по 21 панели. Теперь жалею, но это сведется к перестановке панелей. Будет ли Вам куда переставлять панели – еще тот вопрос.
Теперь я скорее за вариант №1.
В современных панелях напряжение выросло, а тепловой коэффициент уменьшается. Но считать нужно для каждого конкретного случая.
Теперь зная, что всего будет 7 стрингов по 23 панели, итого 161 панель, нам нужно их разместить.

Шаг 4. Наземные конструкции.

Популярностью пользуются 2 типа конструкций –

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

родилось такое чудо

.

В ходе работ были внесены коррективы – глубина бетонирования 0,9м, первая стойка высота 60 см, дальняя пляшет от нее. Все распорки были выкинуты. Расстояние между стойками 2м.

процесс бетонирования

Однорядная конструкция, с рудиментами распорок
Направляющие под панели можно ставить как С профиль, так и трубу 40*40. Сначала ставил С профиль.

Потом делал на основе трубы 40*40*2 (некоторые рекомендуют 3мм) и болты, как на меня,

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

Выбор типа конструкции очень сильно зависит от местности, и если есть возможность вместить все в 2 ряда, я бы наверно поставил и 1 двурядную себе, с целью экономии земли.
Ну и конечно, когда совсем нет места, люди строят «паруса» — один цельный щит из панелей.
Тут нужен профессиональный расчет, но я не представляю, как нормально это обслуживать, да и страшно, что вырвет с корнем. Не говоря про цену металла.

Во время разметки конструкций, я немного зациклился на выставлении панелей на Юг. В итоге отмечали землемеры, которые обмеряют землю для геокадастра. Теперь я более мягко к этому отношусь, и скажем крутить конструкцию на +-5 (10) градусов в зависимости от ландшафта и затенения все таки стоит.
Затенения избегаем любой ценой. Оно очень сильно влияет на общую выработку, и если тень падает хоть на одну панель, нормально перестает работать весь стринг, в который она присоединена.

Построили, грунтуем, красим. В моем случае сверлим отверстия по шаблону под панели. Роем траншеи для кабелей или готовимся вести воздушки. Кому как.

Шаг 5. Приезжает оборудование. Начинаем собирать.

Перед этим этапом считаем, что у Вас подведена мощность 30кВт, стоит вводной щиток с УЗИП, РНПП.

Я провёл пол года, читая кто и как строит, посмотрел на пару пром СЭС, ну и домашние тоже. Но вот так взять и отгрохать все без совета знающих людей – все таки было страшно. Подробных инструкций я опять же не встречал. Были привлечены кураторы, я бы так сказал. Они отвечали на мои вопросы, просчитали те конструкции по принципу лучше перебдеть и были привлечены монтаж высоковольтной части. За разумные деньги и сдельно.

Из оборудования итого нам понадобится:
Панели
Инвертор
Автомат, 63А
Солнечный кабель – 6мм2. Кто то ставит 4мм2, но наше дело уменьшить потери. Если линия длинная, иногда ставят СИП16, через гильзы. Плюсы и минусы отдельно. Вариант с СИП-ом не совсем правильный, будьте осторожны.
Кабель ВВГнг – от инвертора к щитку, 16мм2. Все так же уменьшаем потери.
Сами монтажные щитки

УЗИП + Предохранители – по желанию. Производитель инвертора утверждает, что они не нужны. Я делал с ними,

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

«Солнечные коннекторы» — в комплекте с инвертором идут шикарные, под обжимку. Изначально мне рассказали, что они под пайку, и я купил дополнительно много простых, да и похуже.
Крепеж для солнечных панелей (у меня болты М8)
Прокладки под панели – паронит (дешево и сердито), или алюминиевые
Гофра всех цветов и размеров (+кабельные каналы)

В первую очередь ставим панели. В целом монтаж довольно быстрый. Но, обратите внимание, что складировать горизонтально их нельзя. Поцарапаете/продавите стекло или оставите следы.
Под каждую панель идут прокладки. Говорят, гальваническая коррозия будет. Её масштабы мне тяжело просчитать (есть разные мнения), но паронита нарезать не жалко.

Установка инвертора – вызывает кучу споров.
Я считаю, что лучше всего его ставить ближе всего к счетчику. Да, кабеля по постоянному току пойдет больше (500м легко), но потери по постоянному току, намного ниже чем по переменному.

Сторонники теории инвертор рядом с панелями (так же на всех промышленных станциях ставят), дополнительно его защищают от воровства, делая разные мыслимые и немыслимые конструкции.

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

Если ставить на доме – нужно избегать прямого попадания солнечных лучей. Так же
нужно понимать, что он летом работает как 0,6 кВт нагреватель, и в комнате рядом с ним не всегда может быть комфортно. Еще он умеет гудеть и круто щелкать при старте пусковыми реле.

Проводим кабеля, всюду наконечники/гильзы.

Проверяем правильность сбора стрингов высоковольтными клещами — если все сделано верно, на стригах появляется напряжение ~ 800 В (холостой ход). У меня разница на каждом стринге была в пределах 1-2В.
Проверяем все по переменке, еще раз затягиваем все контакты, и запускаем станцию.

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

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

После этого (лучше параллельно) пишем заявление в РЭС про замену счетчика на двунаправленный.

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

Собираем пакет документов и подаем на Зеленый Тариф.

Тут начинается второй круг ада. Могут попросить дополнительные бумажки и сертификаты. Поверьте — их проще, дешевле, быстрее достать, чем доказать, что по закону, они не нужны. У каждого облэнерго свои «тараканы», поэтому единого рецепта нет.
Из самого печального, одно из южных облэнерго нашей страны, все тот же Huawei SUN-2000 33KTL-A (30 кВт, 33кВА) считает как ~27 кВт инвертор значение cosY в военное время может достигать 4. Аналогично и с другими моделями.

Вод собственно и все. Получаете на руки договор и становитесь небольшой, но генерирующей установкой.

Обслуживание действительно простое. Внимательно следить за контактами, ранней весной, в середине лета точно проверить, подтянуть соединения. Трава реально вырастает высокой. Косить мотокосой – удел отважных. А так можно пройтись средством против бурьянов.
Иметь обязательно в запасе вводной автомат, наконечники, наконечники для автомата в подстанции, желательно еще и автомат для подстанции.

По следам первой части – да, вопрос рисков был не раскрыт.
Основной риск, который я вижу – это прекращение выплат по ЗТ со стороны государства.

Риски воровства – многие сильно перестраховываются (в т.ч. и я), но реальных случаев снятия панелей/инверторов было всего 2-3, и то по слухам. Намеренной порчи панелей – да, говорят, что бывает чаще раза в 2 (до 10 случаев). Воровство еще не смонтированных панелей, и явного кидалова на этапе заказа оборудования – увы, всё больше и больнее.

Риски что выйдет из строя – перекрываются 5-ти летней (расширяемой до 20) гарантией на инверторы, 25 летней гарантией на солнечные панели (есть нюансы).

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

Более распространенная ситуация – попадание молнии. Порой выгорает инвертор и/или диоды на панелях. Ставить грозозащиту по периметру домохозяйства – накладно. Опять же, может «прилететь» и по переменке. Поэтому ставим внешние УЗИП и верим в лучшее.

Тут не помогло. И это младшая модель Huawei, но модель 33KTL без А, как и конкуренты, выглядит крайне схоже.Надеюсь, теперь понятно, почему я ждал именно 33KTL-A

Небольшое отступление на тему Зеленого Тарифа для частных домохозяйств.
Распределенная генерация, если подойти с умом, может быть полезной. Для этого надо, например, балансировать генерацию в пределах потребления домохозяйства/подстанции/10кВ линии/населенного пункта. И в зависимости от опыта эксплуатации, выдавать определенные лимиты, с использованием этих чисел. Главная цель – уменьшить обратные перетоки и как следствие потери.
Последние полгода поднялось активное движение, со стороны государственных органов, против малой генерации. А то, что сами разрешили 50кВт (слава богу временно) и хватаются за голову, ай ай, у них нет потребления (физику не учим), они зарабатывают слишком много (риски не учитываем) – давайте свернем малую генерацию…
Но при этом скромно молчат, о построенных и получивших ЗТ участках по 2-3 МВт, состоящих из частных домов, и сделанных не без поддержки свыше.
Умалчивают о промышленных СЭС, как отбеливаются на них деньги, возвращается НДС и списываются налоги.

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

Всем мира и солнечного неба над головой!

Часть 1. Финансовая


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

Продающий + красивый интернет-магазин на WordPress за 269$ «с нуля» — наш опыт

image

Это longread будет друзья и довольно откровенный, но я чего-то не видел подобных статей. Тут масса опытных ребят в части Интернет-магазинов (разработки и продвижения), но что то никто не написал как сделать классный магазин за условно 250$ (а можно и за 70$) который будет отлично выглядеть и отлично работать (продавать!). И все это можно сделать самому без программиста. Ну вообще неплохо иметь программиста рядышком, который будет нежно дышать вам в затылок и поправлять ваши корявые ручки, но т.к. я сам не будучи программистом сделал инет-магазин, то знаю о чем говорю. Еще раз — программист ни разу мне не помог для этого магазина.

Итак, погнали. Магазин вот этот — мы ловко продаем базы для спама. Ага. Для спама. Я напишу отдельную статью, как мы делаем эти базы… мы сами то не спамим, а продаем базы (к слову, если кто то думает, что достаточно просто спарсить 2ГИС и дело в шляпе — разочарую — все на порядок сложнее и у нас работает 3 программиста на этом направлении fulltime между прочим). Статья в работе и будет веселой :). Там еще поделимся итогами спама от наших клиентов — работает, кстати, работает всеми нелюбимый спам.

Что заставило написать эту статью? Сегодня на VC вышла публикация, где ребята сравнивали Битрикс и некие другие среды разработки. Пацанам в комментариях написали, мол чего забыли WordPress? Ответ интересный — ну так там дыр полно как в швейцарском сыре. И привели ссылку на отчет…(там в статье найдите сами). И да, я видел этот отчет от производителя отличного плагина для защиты WordPress 🙂 они классно напугали, чтобы покупали их плагин. Но если чуть-чуть (слегка, не вспотев) поработать (последняя версия, обновления + бесплатный плагин для защиты типа Wordfence) то вероятность взлома стремиться к минимуму. Дело в том, что 80% сайтов на WordPress сделаны «на коленках» — их миллионы и конечно же % взлома большой по сравнению с magenta которую внедряют уже более опытные спецы.

Наша задача была сделать Интернет-магазин по продаже баз. Кстати, это чуть сложнее чем продажа физических товаров (хотя там могут быть определенные нюансы из-а калькулятора доставки, здесь я признаюсь не ковырялся). Почему? У нас базы компаний хранятся на Amazon S3 (почему — напишу позже) и пришлось повозится с связкой. Если у вас стоимость доставки одинаковая для всех регионов и товаров (ну или логика очень простая) — то вам будет даже проще запустить все из коробки.

Ну давайте по шагам, так будет проще всем осознать как сделать неплохой Инет-магазин за 200$ (а я приведу вам пример как сделать все тоже самое и за 50$ без потери качества).

Хостинг

Хостинг — у нас hostland.ru. Ссылка не реферальная, я там никого не знаю. Да просто нормальные парни, делают нормальное дело. Ау… если вы там меня слышите — закиньте нам может на баланс пару вкусняшек что ли — реклама то нативная 🙂 Хостинг WordPress стоит около 300 рублей плюс минут 50 рублей, даже перепроверять не хочу). Личный кабинет простой, все понятно, с первого раза за пару часов сделаете типовой WordPress.

Доменное имя

А забыл друзья мои — доменное имя! 🙂 Это же шаг №1 — ну мы покупали на nic.ru (я вообще рекомендую этих парней), хотя сейчас наш хостер дает нам бесплатные доменные бонусы и мы новые домены у них берем. Можно я не буду считать стоимость покупки домена в зоне RU? Наверное в метро в Москве проехать туда-сюда стоит столько же, только там за год оплата 🙂 Шаг 2 — нужно направить доменное имя на ваш созданный сайт WordPress у хостера. Ну для этих целей мы используем Yandex.Connect. Честно скажу, нужно повозится, но если голова на плечах есть, то вы сможете сделать связку следующую:

nic.ru -> Яндекс.Коннект -> редактор DNS и там прописать IP адреса -> хостера.

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

Ну, что у нас там по балансу? 300 рублей за хостинг (дальше буду в долларах, так проще — около 5$) + 0 рублей (не хочу считать) за регистрацию доменного имени. Ну пока бизнес тянет эти затраты 🙂 скрипим, но тянем.

Тема

Нам нужна тема. Я выбрал тему SAVOY — 50$ стоит. Почему? Ну она такая милая 🙂 и простая, без ущерба функциональности. Есть документация на английском (тоже все понятно). Причем с темой идет сразу woocommerce с демо-контентом. Что такое woocommerce? А это плагин, который позволяет вам сделать Интернет-магазин с нуля. Он бесплатный.

Так, что там у нас — 55$ потратили.

К слову, в покупку темы входит 6 месяцев поддержки. Поверьте — помогают ответами на дурацкие вопросы даже на Pidgin English. Тема ставиться легко и быстро, ставит нужные плагины сама.

После установки можете уже начинать в woocommerce править товары свои. Удалять демо товары, добавлять свои. Тут нечего писать вообще, руководств как это сделать миллион, все просто и понятно.

Спам 🙂 после покупки

Таки дальше? Что говорят умные дяди и тети с высоких трибун конференций по электронной коммерции? Они советуют после покупки «замучать» тебя письмами с напоминаниями. ОК, мы же следуем рекомендациям взрослых? И как это сделать? А у нас есть отличный плагин для этих целей стоит 99$. Если вам вдруг это дорого (я и сам так подумывал, да ладно, один раз живем), то прошу пожаловать сюда, тут он стоит целых 5$! Вы прежде чем писать гневные комментарии, что я пропагандирую ворованный софт, прочитайте ниже суть.

image

Надо переводить текст на картинке? Если коротко — плагины для WordPress выпускаются под лицензией GPL, что означает что после покупки плагина любой может распространять его как угодно. Что делают эти красавцы? Они покупают плагин за 99$ и потом продают за 5$ всем желающим. И это в правовом поле заметьте. И я там был, пиво-мед пил — скажу так, работает. Минус? Нет поддержки, поэтому если хотите сделать ваш магазин на перспективу — лучше купить у разработчиков официально. А если проверяете гипотезу надо-ненадо-получится-неполучится — можно и здесь. Но, еще раз — это не пропаганда воровства, это данность, которую можно принимать и использовать или нет. Решать вам, но я за официальные источники.

У меня ушло часа 2 чтобы разобраться с плагином follow up и настроить “догоняющие” письма. Ну конечно, там функционал просто огромный, триггеров может быть масса. Выглядит это как на картинках ниже. Видно, что есть два «догоняющих» письма и уже есть запланированные отправки тем, кто скачивал базы. Все понятно и работает четко.

image

image

Ну что, сколько мы там уже потратили? Ну давайте считать что 55 + 99 = 150$. Кстати, там многие плагины предлагаю подписку на год — не советую, купили установили и все. Пройдет год, можете купить обновления ну или нет.

Так, что там у нас дальше? А! как письма то слать триггерные? Яндекс.Почта вам в помощь. Она бесплатная, к ней можно по SMTP подключиться и все. Я для этих целей использую плагин (он бесплатный тоже )) WP Mail SMTP. Разберетесь, там все просто.

Мы правда сейчас перешли от Яндекс.Почты на SendGrid, т.к. стали слать по 1000 писем триггерных в день и Яндекс.Почта посчитал что мы спамеры (если что — Яндекс, мы не спамеры, мы делаем базы для спама, но сами ни-ни, это честные триггерные письма). SendGrid’у все равно на далеких Питерских парней, и он за 15$ в месяц дает нам 40 000 писем 🙂 и что удивительно, указанный выше плагин для отправки писем из WordPress просто превосходно с ним дружит (1 касание и работает).

Ну да ладно, почту настроили, 150$ потратили. Поехали дальше?

Оплаты

Нам надо принимать оплаты за базы компаний по кредитным картам? Надо бы. Есть плагин Яндекс.Касса для Woocommerce. Бесплатный. Работает. Что же все бесплатно-то? Чудеса, но это правда.

Партнерка

Мы пошли дальше и сделали реферальную партнерку, т.к. базы дорогие, можно платить много. Я не уверен, что все владельцы Инет-магазинов делают свою партнерскую программу (чаще подключаются к таким сервисам, как admitad), но если вдруг — загляните сюда affiliatewp.com/pricing 99$ и могучий (я не шучу, там можно сделать ВСЕ) инструмент у вас в кармане. Баланс 240$ (гуляем…).

Аналитика

Какой владелец магазина без аналитики? Никакой. Как слепой котенок — это не я сказал, это дяди и тети с трибун. Давайте подключим Google Analitycs + Яндекс.Метрика. Плагинов полно, бесплатные. Даже ничего писать больше не хочу — все работает ИЗ коробки. Но! У нас ведь Интернет-магазин, нам надо отслеживать конверсии, воронки, коробки, избушки, кукушкиловите плагин и не благодарите. Тоже гад бесплатный (капиталисты развращают нас, стонущих под гнетом санкций :).

SEO

Так, баланс не изменился, погнали дальше. Что говорят SEO — магистры? Картинки надо сжимать, дабы было хорошо, если сжимать не будете — будет хреново. Я вот кстати верю, поэтому ставим БЕСПЛАТНЫЙ (сука) плагин SMUSH. Сами найдете, вам хватит, поверьте.

Чтобы сайт хорошо ранжировался в поиске, он должен работать быстро (это не я сказал). Ну вообще я не знаю как еще можно ускорить мой сайт на хостинге за 300 рублей в месяц (по мне он и так очень быстрый, хотя стоп — это же wordpress, я что то не то говорю?) но как в том анекдоте — (кеширование) нам не помешает. Поэтому ставим плагин для кеширования.

WP Fastest Cache (пара кликов и он находится и ставится). Я не удивлю наверное уже никого, если скажу что он тоже бесплатный. Там много каких-то мутный настроек, я вообще ничего не настраивал, включил его (активировал и включил кеширование) и все. Спецы могут схватиться за умные головы — но мне и так ОК. Вот так:

image

В нем настройки были по умолчанию какие-то, я их даже не трогал. Дальше я вычитал в одной статье (она была большая, а это значит полезная и умная) что стоит поставить плагин Autoptimize для еще лучшей работы сайта. Ну… сказано сделано, поставил, потыкал галочки и все. Работает. Там, кстати, есть прикольная опция — lazy load для картинок. В чем суть — он картинки подгружает чуть позже после загрузки текста, человеку так приятнее (сам проверил, факт) — то есть уже читаешь, а картинка плавно так появилась. Причем он что то там умеет сжимать — но это уже высшая математика, ну ее нафиг — у нас цель базы для спама продавать, а не вникать глубоко в недра PHP.

image

image

Что это дает в итоге? Ну вот смотрите, я без программиста добился в анализаторе Google неплохого результата. Есть мнение что это влияет на ранжирование в поиске, я верю поэтому радуюсь. На десктопе результат близок к 100, а вот мобайл (78) подкачал, подкачал — но тут нужны уже ловкие и слегка волосатые руки программиста, т.к. я не знаю как улучшить. Картинка для доказательства:

image

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

Доставка

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

Сказано — не сразу сделано. Нашли плагин который интегрируется с woocommerce и позволяет людям, кто купил базу, получать ее с S3. Целых 29$ стоит, но мы скрипя осилили. И это отлично работает. Вот так хранятся базы (см. картинку ниже). Цена хранения в год близка к чашке кофе тоже, не буду считать даже. Там есть нюансы, которые я узнал побившись головой об стену настроек, но если у вас голова на плечах — справитесь (впрочем, вряд ли тут много тех, кто продает скачиваемые товары — вам это даже не надо будет делать).

image

Что у нас по балансу? 240 + 29 = 269$.

Резервное копирование

Чуть не забыл резервное копирование сайта – есть плагины, бесплатные, скопирую куда хочешь в облака. Впрочем чего это я – хостер делает резервные копии сам в рамках тарифа. Но если вдруг кому-то нужно — поищите backup плагины для WordPress. Я настроил в облако DropBox и работает :). И да, это все тоже бесплатно (включая DropBox).

SSL

Для сайта нужен SSL? Ой да ладно – сертификат Let’s encrypt плюс бесплатный плагин Really Simple SSL = все работает. Кстати, разработчики плагина Really Simple SSL не соврали — там нет настроек :). Что касается сертификата, то хостер дает его нам автоматически и продлевает сам каждые 90 дней. Все работает, копейки не заплатили.

Ой ее, забыл я важный плагин Cyr-To-Lat — он автоматом преобразовывает кириллицу в латиницу, включая названия файлов изображений и т.п. Он бесплатный, поклон автору. Не забудьте его поставить.

Яндекс.Маркет

Что то просто у нас все так идет, не находите? Может быть надо помучаться с фидами для Google merchant + Yandex Market? Ну вы ведь хотите как-то рекламировать свои товары на эти площадках? Если да – бесплатный (вот гады, слов нет) плагин Product feed Pro все делает на УРА. Он поддерживает какое-то немыслимое количество разных типов фидов (feeds), включая Яндекс :). Работает из коробки, проверено. Вот как у нас, фид для Яндекса, обновляется ежедневно:

image

Кто-то может спросить — а зачем вам фид на Яндекс.Маркет, вы ведь продаете виртуальный продукт. Отвечаю картинкой:

image

Я подумал, не помешает 🙂 и сделал. Вообще забегая вперед отмечу, что базы компаний — это абсолютно легальный продукт. Мы просто анализируем сайты (в РФ или около 9 млн.), чтобы классифицировать компании (Инет-магазины, Мед.центры и т.п.) и собрать контактные данные, хотя звучит “базы для спама” очень агрессивно что ли. Поэтому мы не имеем проблем с Яндексом и Google вообще, т.к. это в правовом поле. Я вот точно категорически против сбора контактов физиков с АВИТО (сотовые телефоны) и т.п. меня самого замучили телефонные спамеры.

Ну так что у нас с балансом? А он не поменялся, 269$ а магазин то уже работает и очень неплох. Что еще? Все ругают безопасность WordPress (точнее ее отсутствие) — БЕСПЛАТНЫЙ плагин WordFence творит чудеса. Вам чего там не хватит? Я уверен, что хватит, настроек масса в бесплатной версии, можно очень сильно затянуть гайки.

Скорость работы

Часто говорят, что при большой количестве товаров (страниц) WordPress начинает работать медленно. Это не так. Проверено моим опытом. Вообще отвлекусь, в моей компании около 10 программистов .NET, мы делаем и крупные порталы и приложения, но мы сами очень активно используем WordPress для проектов, где можно им обойтись, хотя никто не знает PHP. Причина? Из коробки можно сделать очень многое, да, это будет не так «кошерно», как если бы поработал дизайнер, специалист по UI, верстальщик и т.п. — но вы сами то верите, что можно сделать Интернет- магазин который уже работает (!) и приносит прибыль за 269$ “с нуля” без готовых компонентов? Я не верю, т.к. знаю сколько стоит разработка. Если уж WordPress “из коробки” вам станет мал, то поверьте, есть большое количество спецов, которые докрутят вам плагины + тему под ваши нужды.

Ну я отвлекся, в заключение — про производительность. Мы тут ради бизнес- эксперимента делаем сайт один сайт, там подразумевается около 3 млн. записей (страниц). Портал такой смешной. И мы попробовали сделать его на WordPress (точнее еще делаем, вы статью читаете — а мы еще делаем, заливаем контент). Я попросил знакомого DevOps настроить виртуальную машину под управлением Ubuntu чтобы WordPress работал при таком количестве записей быстро. Это стоило 4 000 рублей — работа спеца (там он много мне слов сказал типа redis, memcache, nginx и т.п.) и 300 рублей в месяц за VPS (я взял самую простую — вот здесь). Так вот, мы пока залили в WordPress порядка 15 000 записей, он даже не пукнул — летает (тем кто не верит — siteprofile.ru — туда еще данные заливаются, пока пишу). Я уверен, что 1 млн. он переварит. Собственно если в вашем Интернет- магазине будет условно 500 000 товаров — то поверьте, WordPress будет работать даже на самом дешевом хостинге, ну уж если начнет тупить, вместо 300 рублей в месяц, заплатите 600 рублей в месяц 🙂 и вам подкинут ресурсов.

image

Как импортировать данные в WordPress? Есть отличный плагин WP all Import который просто творит чудеса — проверено опытом. Он не дешевый, но я ведь вам подсказал, где найти на 95% дешевле, а? 🙂 (еще раз — это не совсем правильно использовать плагины за 5$, но ресурс очень популярный, оттуда берут если не все, то многие — мы сами разработчики, и я понимаю как это когда твой продукт вместо 100$ продают за 5$ и ничего не поделать). Данный плагин потребуется, если решите залить массово товары, он, к слову, и картинки отлично импортирует.

На этом все. Вывод? Потратили 269$ (а можно и меньше, если покупать плагины по 5$) и запустили Интернет- магазин. Он, кстати, выглядит очень даже прилично и что более важно — стабильно работает. И еще — он красивый, даже сам удивляюсь что «из коробки» получается все очень даже аккуратно.


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

Перекрестная репликация между PostgreSQL и MySQL


Я в общих чертах расскажу о перекрестной репликации между PostgreSQL и MySQL, а еще о методах настройки перекрестной репликации между этими двумя серверами базы данных. Обычно базы данных в перекрестной репликации называются однородными, и это удобный метод перехода с одного сервера реляционной СУБД на другой.

Базы данных PostgreSQL и MySQL принято считать реляционными, но с дополнительными расширениями они предлагают возможности NoSQL. Здесь мы обсудим репликацию между PostgreSQL и MySQL, с точки зрения реляционных СУБД.

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

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

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

Перекрестная репликация между MySQL и PostgreSQL нужна для однократной миграции с одного сервера баз данных на другой. Эти базы данных используют разные протоколы, поэтому связать их напрямую не получится. Чтобы наладить обмен данными, можно использовать внешний опенсорс-инструмент, например pg_chameleon.

Что такое pg_chameleon

pg_chameleon — это система репликации из MySQL в PostgreSQL на Python 3. В ней используется опенсорс-библиотека mysql-replication, тоже на Python. Образы строк извлекаются из таблиц MySQL и сохраняются как объекты JSONB в базе данных PostgreSQL, а потом расшифровываются функцией pl/pgsql и воспроизводятся в базе данных PostgreSQL.

Возможности pg_chameleon

Несколько схем MySQL из одного кластера можно реплицировать в одну целевую базу данных PostgreSQL с конфигурацией «один ко многим»
Имена исходной и целевой схем не могут совпадать.
Данные репликации можно извлечь из каскадной реплики MySQL.
Таблицы, которые не могут реплицироваться или создают ошибки, исключаются.
Каждой функцией репликации управляют демоны.
Контроль с помощью параметров и файлов конфигурации на базе YAML.

Пример

Хост vm1 vm2
Версия ОС CentOS Linux 7.6 x86_64 CentOS Linux 7.5 x86_64
Версия сервера БД MySQL 5.7.26 PostgreSQL 10.5
Порт БД 3306 5433
IP-адрес 192.168.56.102 192.168.56.106

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

$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz $> tar -xJf Python-3.6.8.tar.xz $> cd Python-3.6.8 $> ./configure --enable-optimizations $> make altinstall

После успешной установки Python3.6 нужно выполнить остальные требования, например создать и активировать виртуальную среду. Кроме того, pip-модуль обновляется до последней версии и используется для установки pg_chameleon. В командах ниже намеренно устанавливается pg_chameleon 2.0.9, хотя последняя версия — 2.0.10. Это нужно, чтобы избежать новых багов в обновленной версии.

$> python3.6 -m venv venv $> source venv/bin/activate (venv) $> pip install pip --upgrade (venv) $> pip install pg_chameleon==2.0.9

Затем мы вызываем pg_chameleon (chameleon — это команда) с аргументом set_configuration_files, чтобы включить pg_chameleon и создать каталоги и файлы конфигурации по умолчанию.

(venv) $> chameleon set_configuration_files creating directory /root/.pg_chameleon creating directory /root/.pg_chameleon/configuration/ creating directory /root/.pg_chameleon/logs/ creating directory /root/.pg_chameleon/pid/ copying configuration  example in /root/.pg_chameleon/configuration//config-example.yml

Теперь мы создаем копию config-example.yml как default.yml, чтобы он стал файлом конфигурации по умолчанию. Образец файла конфигурации для этого примера приводится ниже.

$> cat default.yml --- #global settings pid_dir: '~/.pg_chameleon/pid/' log_dir: '~/.pg_chameleon/logs/' log_dest: file log_level: info log_days_keep: 10 rollbar_key: '' rollbar_env: ''  # type_override allows the user to override the default type conversion into a different one. type_override:   "tinyint(1)":     override_to: boolean     override_tables:       - "*"  #postgres  destination connection pg_conn:   host: "192.168.56.106"   port: "5433"   user: "usr_replica"   password: "pass123"   database: "db_replica"   charset: "utf8"  sources:   mysql:     db_conn:       host: "192.168.56.102"       port: "3306"       user: "usr_replica"       password: "pass123"       charset: 'utf8'       connect_timeout: 10     schema_mappings:       world_x: pgworld_x     limit_tables: #      - delphis_mediterranea.foo     skip_tables: #      - delphis_mediterranea.bar     grant_select_to:       - usr_readonly     lock_timeout: "120s"     my_server_id: 100     replica_batch_size: 10000     replay_max_rows: 10000     batch_retention: '1 day'     copy_max_memory: "300M"     copy_mode: 'file'     out_dir: /tmp     sleep_loop: 1     on_error_replay: continue     on_error_read: continue     auto_maintenance: "disabled"     gtid_enable: No     type: mysql     skip_events:       insert:         - delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo       delete:         - delphis_mediterranea #skips deletes on schema delphis_mediterranea       update:

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

В файле конфигурации default.yml есть раздел глобальных параметров (global settings), где можно управлять такими настройками, как расположение файла блокировки, расположение логов, период хранения логов и т. д. Дальше идет раздел переопределения типов (type override), где указан набор правил для переопределения типов во время репликации. В примере по умолчанию используется правило переопределения типа, которое преобразует tinyint(1) в логическое значение. В следующем разделе указываем детали подключения к целевой базе данных. В нашем случае это база данных PostgreSQL, обозначенная как pg_conn. В последнем разделе указываем данные источника, то есть параметры подключения исходной базы данных, схему сопоставления исходной и целевой баз данных, таблицы, которые нужно пропустить, время ожидания, память, размер пакета. Заметьте, что «sources» указано во множественном числе, то есть мы можем добавить несколько исходных баз данных для одной целевой, чтобы настроить конфигурацию «многие к одному».

База данных world_x в примере содержит 4 таблицы со строками, которые сообщество MySQL предлагает для примера. Ее можно загрузить здесь. Пример базы данных поставляется в виде tar и сжатого архива с инструкциями по созданию и импорту строк.

В базах данных MySQL и PostgreSQL создается специальный пользователь с одинаковым именем usr_replica. В MySQL ему предоставляются дополнительные права на чтение всех реплицируемых таблиц.

mysql> CREATE USER usr_replica ; mysql> SET PASSWORD FOR usr_replica='pass123'; mysql> GRANT ALL ON world_x.* TO 'usr_replica'; mysql> GRANT RELOAD ON *.* to 'usr_replica'; mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica'; mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica'; mysql> FLUSH PRIVILEGES;

На стороне PostgreSQL создается база данных db_replica, которая будет принимать изменения из базы данных MySQL. Пользователь usr_replica в PostgreSQL автоматически настраивается как владелец двух схем pgworld_x и sch_chameleon, которые содержат фактические реплицированные таблицы и таблицы с каталогами репликации соответственно. За автоматическую конфигурацию отвечает аргумент create_replica_schema, как вы увидите ниже.

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123'; CREATE ROLE postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica; CREATE DATABASE

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

$> vi /etc/my.cnf binlog_format= ROW binlog_row_image=FULL log-bin = mysql-bin server-id = 1

Сейчас важно проверить подключение к обоим серверам баз данных, чтобы при выполнении команд pg_chameleon не возникло проблем.

На узле PostgreSQL:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

На узле MySQL :

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

Следующие три команды pg_chameleon (chameleon) подготавливают среду, добавляют источник и инициализируют реплику. Аргумент create_replica_schema в pg_chameleon создает схему по умолчанию (sch_chameleon) и схему репликации (pgworld_x) в базе данных PostgreSQL, как мы уже говорили. Аргумент add_source добавляет исходную базу данных в конфигурацию, считывая файл конфигурации (default.yml), и в нашем случае это mysql, а init_replica иницализирует конфигурацию на основе параметров в файле конфигурации.

$> chameleon create_replica_schema --debug $> chameleon add_source --config default --source mysql --debug $> chameleon init_replica --config default --source mysql --debug

Выходные данные этих трех команд очевидно указывают на их успешное выполнение. Все сбои или синтаксические ошибки указываются в простых и понятных сообщениях с подсказками по исправлению проблем.

Наконец, запустим репликацию с помощью start_replica и получим сообщение об успешном выполнении.

$> chameleon start_replica --config default --source mysql  output: Starting the replica process for source mysql

Статус репликации можно запросить с помощью аргумента show_status, а просмотреть ошибки — с помощью аргумента show_errors.

Результат.

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

Результат.

Репликация не считается настроенной, пока мы не протестируем ее в реальном времени, как показано ниже. Мы создаем таблицу, вставляем пару записей в базу данных MySQL и вызываем аргумент sync_tables в pg_chameleon, чтобы обновить демоны и реплицировать таблицу с записями в базу данных PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10)); Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values (1,'one'); Query OK, 1 row affected (0.00 sec) mysql> insert into t1 values (2,'two'); Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql Sync tables process for source mysql started.

Чтобы подтвердить результаты теста, запрашиваем таблицу из базы данных PostgreSQL и выводим строки.

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";  n1 |  n2 ----+-------   1 | one   2 | two

Если мы выполняем миграцию, следующие команды pg_chameleon будут ее окончанием. Команды нужно выполнять после того, как мы убедимся, что строки всех целевых таблиц были реплицированы, а результатом будет аккуратно перенесенная база данных PostgreSQL без ссылок на исходную базу данных или схему репликации (sch_chameleon).

$> chameleon stop_replica --config default --source mysql  $> chameleon detach_replica --config default --source mysql --debug

По желанию следующими командами можно удалить исходную конфигурацию и схему репликации.

$> chameleon drop_source --config default --source mysql --debug $> chameleon drop_replica_schema --config default --source mysql --debug

Преимущества pg_chameleon

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

Недостатки pg_chameleon

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

Итоги по pg_chameleon

Метод репликации в pg_chameleon отлично подходит для миграции базы данных из MySQL в PostgreSQL. Существенный минус в том, что репликация только односторонняя, поэтому специалисты по базам данных вряд ли захотят использовать его для чего-то, кроме миграции. Но проблему односторонней репликации можно решить еще одним опенсорс-инструментом — SymmetricDS.

Подробнее читайте в официальной документации здесь. Справку по командной строке можно найти здесь.

Обзор SymmetricDS

SymmetricDS — это опенсорс-инструмент, который реплицирует любую базу данных в любую другую распространенную базу данных: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird и другие облачные экземпляры БД, например Redshift, и Azure и т. д. Доступные функции: синхронизация баз данных и файлов, репликация нескольких ведущих баз данных, фильтрованная синхронизация, преобразование и другие. Это инструмент на Java, и требуется стандартный выпуск JRE или JDK (версии 8.0 или выше). Здесь можно записывать изменения данных по триггерам в исходной базе данных и направлять их в соответствующую целевую базу данных в виде пакетов.

Возможности SymmetricDS

Инструмент не зависит от платформы, то есть две или несколько разных БД могут обмениваться данными.
Реляционные БД синхронизируются с помощью записи изменения данных, а БД на основе файловых систем используют синхронизацию файлов.
Двусторонняя репликация с использованием методов Push и Pull на основе набора правил.
Передача данных возможна по защищенным сетям и сетям с низкой пропускной способностью.
Автоматическое восстановление при возобновлении работы узлов после сбоя и автоматическое разрешение конфликтов.
Совместимость с облаком и эффективные API расширений.

Пример

SymmetricDS можно настроить в одном из двух вариантов:
Ведущий (родительский) узел, который централизованно координирует репликацию данных между двумя ведомыми (дочерними) узлами, и обмен данными между дочерним узлами осуществляется только через родительский.
Активный узел (узел 1) может обмениваться данными для репликации с другим активным узлом (узел 2) без посредника.

В обоих вариантах обмен данными происходит с помощью Push и Pull. В этом примере мы рассмотрим конфигурацию «активный-активный». Описывать всю архитектуру слишком долго, так что изучите руководство, чтобы узнать больше об устройстве SymmetricDS.

Установить SymmetricDS очень просто: загрузите опенсорс-версию zip-файла отсюда и извлеките ее, куда захотите. В таблице ниже приводятся сведения о месте установки и версии SymmetricDS в этом примере, а также версии баз данных, версии Linux, IP-адреса и порты для обоих узлов.

Хост vm1 vm2
Версия ОС CentOS Linux 7.6 x86_64 CentOS Linux 7.6 x86_64
Версия сервера БД MySQL 5.7.26 PostgreSQL 10.5
Порт БД 3306 5832
IP-адрес 192.168.1.107 192.168.1.112
Версия SymmetricDS SymmetricDS 3.9 SymmetricDS 3.9
Путь установки SymmetricDS /usr/local/symmetric-server-3.9.20 /usr/local/symmetric-server-3.9.20
Имя узла SymmetricDS corp-000 store-001

Здесь мы устанавливаем SymmetricDS в /usr/local/symmetric-server-3.9.20, и тут же будут храниться разные вложенные каталоги и файлы. Нас интересуют вложенные каталоги samples и engines. В каталоге samples хранятся примеры файлов конфигурации со свойствами узла, а также примеры скриптов SQL для быстрого начала демонстрации.

В каталоге samples видим три файла конфигурации со свойствами узла — имя показывает характер узла в определенной схеме.

corp-000.properties store-001.properties store-002.properties

В SymmetricDS есть все необходимые файлы конфигурации для базовой схемы из 3 узлов (вариант 1), и те же файлы можно использовать для схемы из 2 узлов (вариант 2). Копируем нужный файл конфигурации из каталога samples в engines на хосте vm1. Получается так:

$> cat engines/corp-000.properties engine.name=corp-000 db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false db.user=root db.password=admin123 registration.url= sync.url=http://192.168.1.107:31415/sync/corp-000 group.id=corp external.id=000

Этот узел в конфигурации SymmetricDS называется corp-000, а подключение к базе данных обрабатывается драйвером mysql jdbc, который использует строку подключения, указанную выше, и учетные данные для входа. Мы подключаемся к базе данных replica_db, а во время создания схемы будут созданы таблицы. sync.url показывает место связи с узлом для синхронизации.

Узел 2 на хосте vm2 настраивается как store-001, а остальное указано в файле node.properties, который приводится ниже. Узел store-001 выполняет базу данных PostgreSQL, а pgdb_replica — это база данных для репликации. registration.url позволяет хосту vm2 связаться с хостом vm1 и получить от него детали конфигурации.

$> cat engines/store-001.properties engine.name=store-001 db.driver=org.postgresql.Driver db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica db.user=postgres db.password=admin123 registration.url=http://192.168.1.107:31415/sync/corp-000 group.id=store external.id=001

Готовый пример SymmetricDS содержит параметры для настройки двусторонней репликации между двумя серверами базы данных (двумя узлами). Приведенные ниже шаги выполняются на хосте vm1 (corp-000), который создаст пример схемы с 4 таблицами. Затем выполнение create-sym-tables командой symadmin создает таблицы каталогов, где будут храниться правила и направление репликации между узлами. Наконец, в таблицы загружается пример данных.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml vm1$> ./symadmin --engine corp-000 create-sym-tables vm1$> ./dbimport --engine corp-000 insert_sample.sql

В примере таблицы item и item_selling_price настроены автоматически для репликации из corp-000 в store-001, а таблицы sale (sale_transaction и sale_return_line_item) автоматически настроены для репликации из store-001 в corp-000. Теперь создаем схему в базе данных PostgreSQL на хосте vm2 (store-001), чтобы подготовить ее к приему данных от corp-000.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin vm2$> ./dbimport --engine store-001 --format XML create_sample.xml

Обязательно проверяем, что в базе данных MySQL на vm1 есть примеры таблиц и таблицы каталогов SymmetricDS. Заметьте, что системные таблицы SymmetricDS (с префиксом sym_) сейчас доступны только на узле corp-000, потому что там мы выполнили команду create-sym-tables и будем управлять репликацией. А еще в базе данных на узле store-001 будет всего 4 таблицы примера без данных.

Все. Среда готова для запуска серверных процессов sym на обоих узлах, как показано ниже.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin vm1$> sym 2>&1 &

Записи логов отправляются в файл фонового лога (symmetric.log) в папке логов в каталоге, где установлен SymmetricDS, а также в стандартные выходные данные. Сервер sym теперь можно инициировать на узле store-001.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin vm2$> sym 2>&1 &

Если запустить серверный процесс sym на хосте vm2, он создаст таблицы каталога SymmetricDS еще и в базе данных PostgreSQL. Если запустить серверный процесс sym на обоих узлах, они скоординируются друг с другом, чтобы реплицировать данные с corp-000 на store-001. Если через несколько секунд мы запросим все 4 таблицы по обе стороны, то увидим, что репликация выполнена успешно. Или можно отправить начальную загрузку на узел store-001 из corp-000 следующей командой.

vm1$> ./symadmin --engine corp-000 reload-node 001

На этом этапе в таблицу item в базе данных MySQL на узле corp-000 (хост: vm1) вставляется новая запись, и можно проверить ее репликацию в базу данных PostgreSQL на узле store-001 (хост: vm2). Мы видим операцию Pull для перемещения данных из corp-000 в store-001.

mysql> insert into item values ('22000002','Jelly Bean'); Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"  item_id  |   name ----------+-----------  11000001 | Yummy Gum  22000002 | Jelly Bean (2 rows)

Чтобы выполнить операцию Push для перемещения данных из store-001 в corp-000, вставляем запись в таблицу sale_transaction и проверяем, что репликация выполнена.

Результат.

Мы видим успешную настройку двусторонней репликации таблиц примера между базами данных MySQL и PostgreSQL. Чтобы настроить репликацию для новых пользовательских таблиц, выполняем следующие действия. Создаем таблицу t1 для примера и настраиваем правила ее репликации следующим образом. Так мы настраиваем только репликацию из corp-000 в store-001.

mysql> create table  t1 (no integer); Query OK, 0 rows affected (0.01 sec)

mysql> insert into sym_channel (channel_id,create_time,last_update_time)  values ('t1',current_timestamp,current_timestamp); Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id, last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp, current_timestamp); Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger_router (trigger_id, router_id, Initial_load_order, create_time,last_update_time) values ('t1', 'corp-2-store-1', 1, current_timestamp,current_timestamp); Query OK, 1 row affected (0.01 sec)

Затем конфигурация получает уведомление об изменении схемы, то есть добавлении новой таблицы, с помощью команды symadmin с аргументом sync-triggers, который воссоздает триггеры для сопоставления определений таблиц. Выполняется send-schema для отправки изменений схемы на узел store-001, и репликация таблицы t1 настроена.

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers     vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

Преимущества SymmetricDS

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

Недостатки SymmetricDS

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

Итоги по SymmetricDS

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

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


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

Как я стал программистом в 35 лет

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

Я точно также прошел этот путь и около двух лет назад задумался: а чего я хочу дальше, приносит ли мне удовольствие моя работа? И решил сменить специальность — стать программистом!

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

Почему?

Профессию программиста я выбрал не случайно и даже не из-за того, что по слухам там много платят. Началось всё еще в третьем классе, когда у друга появилась приставка к телевизору с клавиатурой. Эта была игровая консоль, но в комплекте со специальным картриджем она превращалась в среду разработки простых игр-платформеров. Потом родители мне купили такую же домой и я “пропал”.

Школа, техникум и институт — везде я выбирал путь как можно ближе к компьютерам, к информационным технологиям. Я был уверен, что стану программистом, ну или системным администратором, как тогда говорили — “компьютерщиком”.

Но жизнь вносит свои корректировки — насущная проблема: без опыта на работу не берут, а опыта без работы не бывает. Главная ошибка на этом этапе — амбиции. Я был уверен в том, что я крутой профессионал и мне должны платить много, ну уж точно не меньше среднего по городу. Много предложений отклонял сам из-за малого оклада.

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

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

И вот в 33 года я начальник отдела, специалист по качеству кабельной продукции с огромным опытом и хорошим окладом. Но всё это не то, нет удовольствия, нет ощущения самоутверждения, радости от работы.

В то время семья крепко стояла на ногах в финансовом плане, можно было пару месяцев прожить только на зарплату жены и некоторые запасы. Тут закралась мысль бросить всё и воплотить свою мечту. Но мечтать на кухне и реально действовать — разные вещи.
Первым подталкивающим фактором стал пример моего друга, который бросил работу, взял семью и уехал куда-то на север работать на аэродром. Его мечта — самолеты. Через год мы встретились и он делился своими впечатлениями, радостью и говорил, что оно того стоит. Я завидовал его решимости, но сам сомневался.

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

В этот самый момент и пришла мысль: “Пришла пора опять много трудиться и учиться, так почему эти силы и время надо тратить на дело, которое не приносит удовольствия, если можно их потратить на мечту?”

Как?

Первым делом я “сжег мосты” — уволился. Это было радикально, но я понимал что не смогу одновременно развиваться по двум направлениям. Опыт первых поисков работы не прошел даром и я стал искать, лишь бы в трудовой книжке написали “программист”. Это работа на статус, на тот самый “опыт”, чтобы найти работу. Оклад тут не имел никакого значения.

Я где-то слышал, что когда ты идешь к цели, то цель начинает идти к тебе. Вот и мне повезло. Довольно быстро я устроился в маленькую компанию к индивидуальному предпринимателю по микро-сервисам. К условиям труда и финансам у меня вопросов не было, главное — запись в трудовой и начало накопления практического опыта. Я понимал, что выполняю простейшие задачи и гордо сказать “Я — Программист” не могу. Не было уверенности в моих способностях — это было лишь самое начало пути.

Поэтому я начал учиться. Учиться, учиться и ещё много много раз … Только так.

Я стал изучать спрос на программистов в моем городе. Смотрел объявления в газетах и на сайтах по поиску работы, изучал советы в Интернете по теме “Как пройти собеседование на программиста” и все прочие источники информации.

Надо соответствовать требованиям работодателей. Даже если эти требования вам не нравятся.

Английский язык


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

С изучением языка советую пробовать все методы, до которых дотянитесь. Я учил английский различными методами и заметил, что универсального нет. Разным людям помогают разные методы. Читайте книги на английском (лучше детские, проще разобраться), смотрите фильмы (с субтитрами и без), сходите на курсы, купите учебник, много видеозаписей с семинаров в интернете, различные приложения на смартфон. Когда попробуете всё, поймете, что подходит именно вам.

Мне лично очень помогли детские сказки и сериал “Улица сезам” в оригинале (только базовые выражения, многократное повторение фраз и слов), ещё хорошо по учебнику постигать язык. Не самоучитель, а именно школьные учебники. Я брал тетрадку и выполнял все задания. Но самое важное — заставлять себя искать информацию на английском. К примеру, книги по языкам программирования самых свежих и актуальных изданий всегда на английском. Пока появится перевод, выходит новое издание.

Сейчас мой уровень базовый, уровень “выживания” по одной из оценочных систем. Я свободно читаю техническую литературу, могу объясняться простыми фразами, но даже это уже огромное преимущество на рынке труда, когда в графе резюме в пункте о языках ставишь галочку “Английский”. Мой опыт показывает, что неопытный специалист со знанием английского проще найдёт работу, чем опытный программист без английского.

Инструментарий


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

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

Я составил на листике список инструментов, установил их все на компьютер и пользовался только ими. Без учебы и литературы не обойтись и тут. Смена специальности — это огромное количество времени на самообразование.

Портфолио


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

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

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

Сертификаты и курсы


Без бумажки — мы букашки! Когда люди видят документ, подтверждающий, что вы это знаете или умеете, это производит наилучшее впечатление. Наличие сертификатов по специальности очень сильно помогает в поиске работы. Они бывают разного уровня доверия, но в любой профессии есть сертифицирующий орган, который ценится всеми. Согласитесь звучит шикарно: “Специалист сертифицированный корпорацией Майкрософт”.

Для себя я определил, что пойду за сертификатами после того, как пойму, что “могу”. Я немного почитал про сертификаты Майкрософт, 1С и различных государственных институтов. Принцип везде один: нужны деньги и знания. Либо сам сертификат стоит денег, либо обязательно перед сдачей нужно пройти специальные курсы, ну или сам допуск к сдаче экзамена стоит денег. Причем это ещё не значит, что сертификат вы получите.
Так что, на данный момент, я не имею специализированных сертификатов — ну это пока… в планах имеется.

А вот на курсы повышения квалификации я времени, сил и финансов не жалел. Сейчас уже хорошо развита дистанционная система обучения — вебинары. Большинство крупных институтов страны проводят курсы и семинары. Часто встречаются хорошие скидки или совсем бесплатные семинары. Я считаю главным преимуществом подобных занятий — возможность прямого общения с опытными и знающими людьми. Всегда можно задать вопросы, попросить оценить свою работу из портфолио. И в качестве вишенки на торте получить документ об окончании курсов. Это не сертификат конечно, но показывает работодателю ваше стремление к цели.

Самый важный документ — резюме


Я изучил множество материалов о том, как правильно составлять резюме. Смотрел чужие примеры, советовался с друзьями и знакомыми. Главным вопросом было, стоит ли писать в резюме мои знания, которые не относятся к программированию — к новой специализации. С одной стороны это то, что я умею — можно считать опытом, но с другой — это к делу не относится.

В итоге в своё резюме я включил всё, что у меня было. Весь трудовой опыт, все документы по всем курсам, включая обучение по безопасности труда на производственном предприятии. Перечислил все знания по компьютерам. Даже указал свои хобби и увлечения. И не прогадал!
Единственная моя ошибка, а вам совет на будущее: надо все ключевые, важные для специальности записи, продублировать коротко и без лишних слов в отдельном пункте вашего резюме (например, “навыки и умения”). Это был совет от менеджера по персоналу в первые же дни после моего приема на хорошую работу в крупную фирму. Надо чтобы работодатель мог сразу понять стоит ли изучать ваше резюме дальше или нет. Этот пункт желательно составлять коротко, аббревиатурами, ключевыми словами. А если хотите что-то пояснить, то это надо делать уже далее по тексту резюме.

Когда?

Как понять, что я готов? Когда начать действовать?

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

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

Я видел по статистике на сайте, что мое резюме часто просматривают. Иногда некоторые фирмы заходят на мою страницу с резюме несколько раз. Как мне казалось, что первый раз посмотрел менеджер по подбору персонала, а во второй раз его показали начальнику. Я не знаю как оно было на самом деле, но появилось впечатление, что я заинтересовал людей, что люди совещаются, перечитывают, обсуждают. А это уже половина пути к победе!

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

На работу в банк меня не взяли, но я посмотрел на настоящее собеседование программиста с “первого ряда”. Я выполнил тестовые задания, пообщался с начальниками разных уровней. И самое главное, что я понял по результатам собеседования — это оценка моего уровня как программиста. Я стал понимать где я нахожусь, какой из меня программист, и чего я ещё не знаю. Это важнейшая информация! Помимо перечня недостающих знаний, она дала уверенность в том, что у меня получается. Медленно, но получается.

Когда вернулся домой с собеседования, я сразу исправил заголовок резюме на “стажер-программист”. Мой уровень не тянул на программиста, соответственно работодатели не совсем верно относились к моему резюме. А вот “стажер” вполне реальная оценка моих знаний в новой специальности.

Самый важный шаг


Визит в крупный банк дал необходимое понимание и уверенность в себе. Я перешел к активным действиям. Резюме разместил на нескольких ресурсах и начал активно рассылать запросы на рассмотрение моей кандидатуры в крупные и солидные организации города. Как говорится: “Хочешь стать лучшим, играй с лучшими”.

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

Я выполнил задание, постарался сделать это раньше срока. И отправил.

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

Самое сложное на собеседовании в 35 лет, это объяснить почему я бросил хорошую работу с хорошим заработком и начал всё с самого низа новой профессии. За своё резюме я не переживал, я мог рассказать по каждому указанному пункту, доказать что действительно знаю и умею, всё что там написано и на том уровне, как указал. А вот как я тут оказался и почему?
Как ни странно, этот вопрос был задан одним из последних, но на первом этапе. Я не стал ничего придумывать и рассказал как было, про мечту детства стать программистом и про мою цель: гордо заявить, что я специалист, я инженер-программист! Глупо, наверное, но это правда.
На следующем этапе меня оценивали настоящие программисты, в чье подчинение я впоследствии попал. Тут весь разговор был сугубо по специальности, по знаниям, умениям, навыкам работы с инструментарием. Я рассказывал, как бы решил задания, которые мне предлагали. Разговор был долгим и пристрастным. Потом неожиданное “Через два дня вам позвонят, до свидания.”

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

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

Это только начало

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

Каждый программист развивается по трем направлениям: Программирование, Коммуникабельность, Жизненный личный опыт. Человека, который может писать хороший код найти не сложно. Коммуникабельность — черта характера, которую можно рассматривать как константу. А жизненный опыт — дефицит, так как большинство соискателей — это недавние студенты.

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

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

Ну а для меня всё только начинается!

Сейчас я уже штатный инженер-программист в Инобитек, принимаю участие в разработке медицинских информационных систем. Но гордо называть себя Программистом мне пока рано. Ещё очень многое надо изучить, чтобы самостоятельно разрабатывать программное обеспечение.

Правильно говорят люди, что работа должна нравиться. Ради этого стоит “рыть, потеть и терпеть!”


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

«Автономные Агенты» или исполняем код в открытой криптоплатформе Obyte

Obyte — это открытая крипто платформа, использующая в качестве реестра транзакций Directed Acyclic Graph (DAG, направленный граф без циклов) вместо блокчейна, со свободным равным доступом к реестру для всех участников. DAG, в отличие от привычного всем блокчейна, даёт возможность отправлять данные в распределённый реестр напрямую без участия майнеров за счёт отказа от блоков и от строгой упорядоченности транзакций. По сравнению с блокчейнами, DAG архитектура не нуждается в привилегированных классах пользователей, таких как майнеры, форджеры или блокпродюсеры, поэтому в сети нет посредников между пользователем и реестром, и каждый имеет равный и прямой доступ на добавление транзакций в реестр.

В этой статье я бы хотел рассказать о Obyte, Автономных Агентах и сравнить всё это с Ethereum.

Что такое Автономные Агенты? 

Это программа, исходный код которой хранится в реестре (DAG) и имеющая собственный адрес, аналогичный адресам любых других участников сети. В программе описаны действия, которые будут выполнены в ответ на отправку монет и данных на этот адрес. Если вам знакомы смарт-контракты Ethereum, Автономные Агенты очень близки по смыслу с ними.

Пример из жизни – вендинговый автомат. В ответ на набранный на клавиатуре номер товара и внесение суммы, аппарат выдаёт пользователю сам товар. Есть одно важное отличие АА от вендинговых аппаратов: вендинговые машины контролируются их владельцами, а пользователи лишь надеются, что действия аппарата совпадут с ожиданиями пользователя. Автономные Агенты же по-настоящему автономны: вся программа хранится в DAG, её исходный код виден всем участникам сети, он не может быть изменён, отключён или удалён.

Например, вы можете запрограммировать АА для обмена токенов. Для программирования используется разработанный для этих задач язык — Oscript.
В Obyte также есть понятие смарт контрактов, но они не то же самое, что АА или смарт контракты Ethereum. Главное отличие АА от смарт контрактов Obyte в том, что смарт контракты, как и обычные контракты в реальном мире, действуют между двумя участниками и говорят, при каких условиях контракт может быть выполнен. Проще говоря, набор условий, разрешающих или запрещающих транзакцию. В то же время, автономный агент – это независимый запрограммированный участник, взаимодействуя с которым, мы инициируем его ответную реакцию (новые транзакции, etc.).

Выполнение кода АА начинается после того, как триггер-транзакция стабилизировалась (то есть наступил консенсус по транзакции и double spend точно отсутствует). Каждая full-нода будет исполнять код AA на своей копии реестра, и записывает результат исполнения только в свою базу. Нет необходимости ретранслировать результат исполнения другим нодам, т.к. состояние всех участником сети одинаково и результат исполнения тоже детерминирован и одинаков для всех. Финальное состояние реестра определено только правилами исполнения АА, и не контролируется ни майнерами, ни голосующими, ни кем другим.

Зачем они нужны?

АА позволяют в децентрализованном режиме создавать  такие вещи как

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

И многое другое…

Прозрачность для пользователя

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

Несмотря на тот факт, что Oscript – язык программирования, и создан для восприятия машиной и программистами, а не обычными людьми, мы старались не отходить от наших принципов. Поэтому для людей, не знакомых с программированием, GUI кошелёк попытается до совершения транзакции интерпретировать код АА и показать человеку результат в понятной ему форме:

Oscript — язык автономных агентов

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

Сначала хотелось бы разобрать особенности. 

AA срабатывает только на инициирующие транзакции. Это может быть или просто платёж, или передача данных АА. Например, вы передаёте данные {foo: ‘bar’, value: 100} и они будут получены АА как input, и на основе этого выполнены действия.

К чему есть доступ у АА

  • к любым переменным, описывающим текущее состояние DAG
  • суммы, полученные в trigger транзакции
  • данные из trigger транзакции
  • кто отправил trigger транзакцию
  • переменные состояний нашего и других АА
  • доступ к различным публичным данным из DAG, таким как data_feed от ораклов, real name attestations, etc.
  • балансы нашего и других АА
  • информация об активах (asset)

Возможности Oscript

Oscript — НЕ Тьюринг полный язык, тем не менее, в его арсенале имеются:

  • арифметические операции
  • логические операции (и, или и т.д.)
  • сравнения
  • конкатенация строк
  • некоторые математические функции
  • криптографические функции (создание hash, проверка подписей)
  • ветвления (if/else)
  • нет циклов и функций (для предотвращения бесконечных рекурсий). Более подробно можно узнать в справочнике по этой ссылке

Для контроля использования ресурсов и предотвращения вредоносных сценариев, АА ограничены максимумом в 100 трудоёмких операций, таких как крипто-функции или доступы к базе данных. Проверка происходит в момент деплоя кода Агента.

Зато нет никаких сложных формул для вычисления стоимости исполнения АА. Таких формул вообще нет, исполнение кода является бесплатным, пользователи, как и сам АА, платят только за добавление данных в реестр DAG, как и любые другие участники сети – 1 byte в валюте Obyte на каждый байт данных, добавленных в DAG. Однако АА должен поддерживать свой баланс в байтах не меньше, чем размер всех хранимых им переменных состояния.

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

Автономные агенты в действии

Теперь мы напишем простейший ping-pong сценарий. Мы отправляем AA деньги, он оставляет какую-то сумму себе и отправляет остальное назад. Мы решим одну и ту же задачу на двух платформах — Obyte и Ethereum, и сравним. В Ethereum аналогичные AA сущности обычно называются смарт контрактами (хотя Ethereum white paper один раз называет их автономными агентами).

Ethereum

Я всё буду делать через geth. Запустим ноду в light режиме и дождёмся синхронизации.

geth --testnet --ws --wsapi "admin,db,eth,net,web3,personal" --syncmode "light" --allow-insecure-unlock 

Теперь у нас два варианта развития событий:

  1. дождаться пока пиры будут обнаружены, и начнётся синхронизация
  2. добавить пиров вручную

Я выбрал второй вариант. И в этом на помощь приходит rfikki и его готовый список команд. Подключаемся к ноде и добавляем пиров:

geth attach ws://127.0.0.1:8546 admin.addPeer("enode://bc827e035cf3a42c249374be7ddc9c2fb819765c440116cf01aa6a8d70d03043d29ccd42b32a283f5ab08294467eb3b92fc40111e9af1770c84bc116edae89c0@104.248.199.52:30303"); admin.addPeer("enode://2d86877fbb2fcc3c27a4fa14fa8c5041ba711ce9682c38a95786c4c948f8e0420c7676316a18fc742154aa1df79cfaf6c59536bd61a9e63c6cc4b0e0b7ef7ec4@13.83.92.81:30303"); admin.addPeer("enode://053d2f57829e5785d10697fa6c5333e4d98cc564dbadd87805fd4fedeb09cbcb642306e3a73bd4191b27f821fb442fcf964317d6a520b29651e7dd09d1beb0ec@79.98.29.154:30303"); admin.addPeer("enode://690c93ac2f6e6f711a175cc6a73a3cf3b649eea83c458ce34364c69d1b557bb408693f06bdf6fc31538a744d5c231fdd904cce5665d04ce165032c0fc009a208@104.248.199.160:30303"); 

После чего начнётся процесс синхронизации, и, чтобы не терять время, создадим аккаунт. Для этого в нашем подключении напишем следующие команды и установим пароль:

personal.newAccount(); 

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

eth.syncing # должно быть false eth.blockNumber # должен быть равен номеру самого верхнего блока https://ropsten.etherscan.io/ 

И проверим баланс:

eth.getBalance(eth.accounts[0]) # будет равен 1000000000000000000 

Подготовка закончена и теперь можем перейти к написанию и публикации контракта.

Создадим файл, например pingPong.sol и напишем в него наш контракт:

pragma solidity ^0.5.10;  contract PingPong{     function deposit() payable public {         msg.sender.transfer(msg.value - 20000);     }          function getBalance() public view returns(uint256){         return address(this).balance;     } } 

В данном контракте мы создаём две публичные функции:
deposit — вызываем пополнением и возвращаем за вычетом 20000.
getBalance — просто показывает нам баланс адреса контракта.

Далее нам его нужно скомпилировать, для этого я использую npm модуль solc:

solcjs -o . --bin --abi pingPong.sol 

Теперь подготовим скомпилированные файлы к быстрой загрузке в geth клиенте. Изменим abi файл до вида

var pingPongContract = eth.contract([{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]); 

И bin до вида

personal.unlockAccount(eth.accounts[0]) var pingPong = pingPongContract.new( { from: eth.accounts[0], data: "0x608060405234801561001057600080fd5b5060fb8061001f6000396000f3fe60806040526004361060265760003560e01c806312065fe014602b578063d0e30db0146053575b600080fd5b348015603657600080fd5b50603d605b565b6040518082815260200191505060405180910390f35b6059607a565b005b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b3373ffffffffffffffffffffffffffffffffffffffff166108fc614e2034039081150290604051600060405180830381858888f1935050505015801560c3573d6000803e3d6000fd5b5056fea265627a7a723058207e0b24d2e575e02b188c16b22c5849ff30ecbd61dbdd0eabae34c43ba1522c6064736f6c634300050a0032", gas: 500000}); 

Переходим в клиент geth и подключаем эти скрипты

loadScript('sol2/pingPong_sol_PingPong.abi') loadScript('sol2/pingPong_sol_PingPong.bin') 

Где sol2 — путь до вашей папки со скриптами. После выполнения второго скрипта, он попросит разблокировать аккаунт. Готово.
Далее пишем `pingPong`. Если в результате вы видите, что адрес не пустой — контракт опубликовался, если нет — нужно немного подождать и попробовать ещё раз. 

После этого мы выполним функцию deposit, отправив деньги, и проверим как всё прошло.

personal.unlockAccount(eth.accounts[0])  pingPong.deposit({from: eth.accounts[0], value: 500000}); 

На выходе мы можем увидеть id транзакции. Скопируйте его, он нам понадобится позже. Перед этим вызовем функцию getBalance и увидим там 20000, которые мы вычитаем.

pingPong.getBalance() 

Теперь перейдём на etherscan. Там будет видно в «Internal Transactions» обратный платёж на 48.000. У меня получилось так — https://ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f3630037b5c312d3b66ee85f8#internal

Obyte

Для публикации мы будем использовать Oscript editor

Очистите шаблон, который он нам предлагает. Мы будет писать с нуля. Минимальный АА – это объект с массивом messages.

{ messages: [] } 

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

{ messages: [         {             app: 'payment',             payload: {                 asset: 'base',                 outputs: [                     {address: "{trigger.address}", amount: "{trigger.output[[asset=base]] - 20000}"}                 ]             }         }     ] } 

Здесь мы видим стандартные метаданные для платежа. Изменяются они с помощью «{}» в строках. Для передачи значений используется объект trigger, он хранит в себе информацию о полученном платеже. Более подробно познакомиться с синтаксисом можно в документации.

Вставляем этот код в редактор и после чего нажимаем Deploy. Всё!
АА опубликован и снизу мы видим адрес. Теперь нам понадобится testnet GUI кошелек, установим его и запустим. Далее, чтобы получить немного тестовых монет, переходим в «чат», там выбираем «Bot Store» и добавляем «Faucet Bot». У нас откроется чат, жмём меню слева и выбираем «Вставить мой адрес»

После чего отправляем и ждём сообщения что деньги нам пришли «Payment: …». Далее нам необходимо перейти на главную и дождаться, пока не исчезнет надпись «Включая ожидающие подтверждения» (несколько минут), это означает, что полученные монеты подтверждены, и ими можно пользоваться.

Всё, что нам остаётся, – это перейти в «получить», вставить адрес АА, вписать сумму «500000» и нажать «отправить». Теперь нам необходимо подождать, пока транзакция стабилизируется (проверяя историю). Это нужно, чтобы сработал trigger. Проверим, пришли ли нам обратно деньги:

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

Выводы

Как мы можем увидеть из сравнения выше, у Obyte гораздо проще публикация, написание и контроль того, что произойдёт. Например, в Ethereum далеко не всегда мы можем правильно подобрать gas исходящей транзакции, из-за чего она может подтверждаться очень долго. Из преимуществ Ethereum можно выделить его быструю публикацию и подтверждение (около одной минуты, зависит от выставленного газа). В то время как в Obyte публикация происходит сразу, а время подтверждения зависит от нагрузки сети, при слабой нагрузке – около 10-15 минут, при большой – менее трёх минут.

В следующих статьях мы разберём несколько интересных и живых примеров, например как можно c помощью AA реализовать simple DAO и ответим на ваши вопросы.

Конкурс

В связи с нововведением, приглашаем разработчиков присоединиться к участию в конкурсе на самое интересное и впечатляющее применение Автономных Агентов. Конкурс уже идёт и продлится до середины октября. В качестве примеров из уже полученных заявок есть несколько краудфандинговых АА, две биржи, разнообразные «реестры» и трекеры репутаций, лотереи, игры и т.д. Каждые две недели жюри из членов команды Obyte объявляют лучшие заявки.

Общий бюджет конкурса – $38,000 (по курсу GB на момент старта).

Более подробно о конкурсе можно прочитать в этой статье.


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