Зарабатываем на лицензию Zennoposter или Путь от кубиков до С#

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
#region Лирическое отступление (можно не читать)
//(практика C# далее...)
Все началось с покупки шаблонов под ZP. Покупал разные шаблоны. И один из купленных шаблонов совершенно не хотел корректно работать. Это был шаблон для накрутки VK на сайте Likes.fm. Прошел месяц, два, три... Шаблон не работал, покупатели негодовали. А мне нужно было накручивать группы.

И понял я что придется писать шаблон самому. Долгое время я боялся подходить к ProjectMaker. Но выбора не было, нужна была накрутка. Я вроде не дурак, уж что-то простенькое наваяю.

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

То что справа это какой-то шаблон с форума по разгадыванию рекапчи2. VK как раз тогда поменял дизайн и ввел рекапчу. Я разгадывание так и не запустил. Шаблон благополучно накручивал баллы и без разгадывания.

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

В общем 2 недели теории и "практики" и в конце августа я решаю принять участие в одном не дешевом тренинге. Для простоты его прохождения решил написать для себя шаблон. Подумал, что он наверняка может также пригодится и другим и 28 августа выложил на складчике анонс своего шаблона. Шаблон был не простой. Я понятия не имел как его буду делать. Но делать надо было. Всего за несколько часов набралось 10+ желающих по 1000р. Такого я не ожидал. Появился очень хороший стимул действительно написать этот шаблон.

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

#endregion
Ну что ж приступим к написанию шаблона на C# для Likes.fm. Шаблон писал специально для конкурса... Цель была уложиться со статьей и шаблоном за день, т.к. времени совершенно нет.

Рассмотрим первый снипет залогинивания в VK
PHP:
instance.ClearCache(); //чистим кэш
instance.ClearCookie(); //чистим куки

Tab tab = instance.ActiveTab;
tab.Navigate("vk.com", "vk.com"); //переходим по ссылке
if (tab.IsBusy) tab.WaitDownloading(); //ждем полной загружки страницы

//находим элементы на странице
HtmlElement inputEmail = tab.FindElementByXPath("//input[@id='index_email']", 0);
HtmlElement inputPass = tab.FindElementByXPath("//input[@id='index_pass']", 0);
HtmlElement buttonLogin = tab.FindElementByXPath("//form/button[contains(text(),'Войти') or contains(text(),'Log in')]", 0);

//производим с ними манипуляции (ввести значение, кликнуть)
inputEmail.SetValue(project.Variables["cfg_login"].Value, "Full");
inputPass.SetValue(project.Variables["cfg_pass"].Value, "Full");
buttonLogin.RiseEvent("click", "Full");
Переходим на сайт VK:
instance.Active.Navigate("vk.com", "vk.com");
Т.к. C# - объектный язык, то будем использовать эти преимущества.
PHP:
Tab tab = instance.ActiveTab;

tab.Navigate("vk.com", "vk.com");
if (tab.IsBusy) tab.WaitDownloading();
Tab tab = instance.ActiveTab;
Это означает, что мы создаем объект типа Tab(закладка) с именем tab и присваиваем ему значение instance.ActiveTab (активная закладка)

Далее мы берем объект tab и обращаемся к его методу Navigate (открыть ссылку)
tab.Navigate("vk.com", "vk.com");

Так же получаем свойство объекта tab IsBusy (занятость).
И обращаемся к методу объекта tab WaitDownloading - что означает ждать загрузки.

И того выше приведенный код означает:
Создаем объект
Переходим по ссылке.
если(закладка занята), то ждем ее загрузки. (if (tab.IsBusy) tab.WaitDownloading()

Это все не профессиональное объяснение. Максимально простое, чтобы новичок не просто бездумно копировал снипеты, а более-менее понимал, что там происходит.

Следующий код идентичен первому, но как мы видим более громоздкий:
PHP:
instance.ActiveTab.Navigate("vk.com", "vk.com");
if (instance.ActiveTab.IsBusy) instance.ActiveTab.WaitDownloading();
Приведу еще пример. Следующие куски кода дадут один результат:
Код:
string strPattern = @"(?<=^).*?(?=\)\ )");
string strMsg = "3) Трололо";
string strResult = Regex.Match(strMsg, strPattern).Value;
Код:
string strResult = Regex.Match("3) Трололо", @"(?<=^).*?(?=\)\ )").Value;
Вернемся к написанию нашего бота:
Создаем объект HtmlElement с именем inputEmail
HtmlElement inputEmail = tab.FindElementByXPath("//input[@id='index_email']", 0);

Искать объект будем по пути XPath

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

Аналогично находим другие элементы. Чтобы донести всю прелесть xPath постараюсь находить элементы по разному. Вот один из примеров:
Составляю путь следующим образом
HtmlElement buttonLogin = tab.FindElementByXPath("//button[contains(text(),'Войти') or contains(text(),'Log in')]", 0);

Мы находим два элемента. И один из них в каком-то сайтбаре. Не разбираясь что это за сайтбар я немного модифицирую путь:
HtmlElement buttonLogin = tab.FindElementByXPath("//form/button[contains(text(),'Войти') or contains(text(),'Log in')]", 0);
В данном пути мы находим элемент по тексту содержащемуся внутри элемента contains(text(),'Войти') но при чистке куки VK может нам выкинуть страницу на английском, поэтому мы добавляем: or contains(text(),'Log in')]
Что означает или такой путь или такой...

Далее берем наш объект inputEmail и используем его метод SetValue (установить значение)
inputEmail.SetValue(project.Variables["cfg_login"].Value, "Full");

project.Variables["cfg_login"].Value - переменная из настроек проекта (логин)

"Full" - способ эмуляции. None, Medium или Full (документация)

И снова берем объект buttonLogin и вызываем его метод RiseEvent (клик)
buttonLogin.RiseEvent("click", "Full");
Все свойства и методы объектов сами появляются после того как вы поставите точку после объекта

Ну вот мы уже почти профи. Значит переходим ко второму снипету.
 
Тема статьи
Способы заработка
Номер конкурса статей
Седьмой конкурс статей

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
PHP:
Tab tab = instance.ActiveTab;
int intVote = 0; //объявляем номер для голосования по умолчанию - 1. (отсчет всегда от 0)

//ищем ссылку на голосование
HtmlElement elOpros = tab.FindElementByXPath("//div[@type='poll']/descendant::a[@class='open_offer']", 0);
//если этот элемент существует, то выполняем действия в скобках {  }:
if(!elOpros.IsVoid){
    //ищем элемент с вариантами голосования
    HtmlElement elMsg = tab.FindElementByXPath("//div[contains(text(),'Проголосуй за вариант:')]/div[@class='info_msg']/div", 0);
    //если этот элемент существует, то определяем за какой номер голосовать:
    if(!elMsg.IsVoid){
        string strMsg = elMsg.InnerText; //получаем содержимое div элемента с заданием
        // получили к примеру: "3) 3. Надежда Кучкина"
        strMsg = Regex.Match(strMsg, @"(?<=^).*?(?=\)\ )").Value; //выдергиваем регулярным варажением номер за который надо голосовать
        intVote = Convert.ToInt32(strMsg); //предыдущую строковую переменную преобразуем в числовую, чтобы можно было производить числовые операции
    }
    //таким образом, если задание с номером присутствовало, то мы получили в переменную intVote номер для голосования
    //если задание было проголосовать за любой номер, то значение переменной intVote осталось по умолчанию (0)
  
    //находим ссылку для перехода на задание и кликаем по ней (RiseEvent). (Сокращенный вариант):
    elOpros.RiseEvent("click", "Full");
    Thread.Sleep(1000);
  
    Tab tabVk = instance.AllTabs[1];
    if (tabVk.IsBusy) tab.WaitDownloading();
  
    //находим нужный вариант:
    HtmlElement elGolos = tabVk.FindElementByXPath("//div[@class='radiobtn_label']", intVote-1);
    elGolos.RiseEvent("click", "Full");
    Thread.Sleep(1000);
  
    tabVk.Close();
    Thread.Sleep(1000);

}
int intVote = 0;
Объявляем номер за который будем голосовать по умолчанию, если нет четких инструкций (как на скриншоте). Отсчет ведется от нуля.

Находим элемент на основании которого определяем есть ли вообще задания для голосования. Этим элементом будет ссылка на само задание.
HtmlElement elOpros = tab.FindElementByXPath("//div[@type='poll']/descendant::a[@class='open_offer']", 0);
Почему я ищу именно ссылку, а не какой-нибудь div с заданием? Как выяснилось там в зависимости от задания появляются разные дивы. В результате придется составлять кучу лишнего кода. Так что если нет задания, то и ссылки на него не будет.

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


Ищем задание с четкими инструкциями:
HtmlElement elMsg = tab.FindElementByXPath("//div[contains(text(),'Проголосуй за вариант:')]/div[@class='info_msg']/div", 0);
Соответственно, если этот элемент существует, то определяем за какой номер голосовать:
PHP:
    if(!elMsg.IsVoid){
        string strMsg = elMsg.InnerText; //получаем содержимое div элемента с заданием
        // получили к примеру: "3) 3. Надежда Кучкина"
        strMsg = Regex.Match(strMsg, @"(?<=^).*?(?=\)\ )").Value; //выдергиваем регулярным варажением номер за который надо голосовать
        intVote = Convert.ToInt32(strMsg); //предыдущую строковую переменную преобразуем в числовую, чтобы можно было производить числовые операции
    }
string strMsg = elMsg.InnerText
Объявили объект типа строка с именем strMsg и присвоили ему значение elMsg.InnerText
Т.е. мы взяли объект elMsg, который нашли ранее и применили к нему метод InnerText, тем самым получив внутреннее содержимое этого элемента (само задание).
Далее мы берем наш объект strMsg, в котором хранится само задание. А оно будет вида: "2) Тётя Глаша лучшая". И регуляркой выдергиваем, то что идет до скобки ). Тем самым получая номер для голосования.
strMsg = Regex.Match(strMsg, @"(?<=^).*?(?=\)\ )").Value;
Тем самым мы получили число в виде текста, т.к. объект у нас строковый string strMsg
Что бы производить с нашим числом математические операции и операции сравнения нам надо преобразовать (конвертировать) его в объект числовой:
intVote = Convert.ToInt32(strMsg);
Заодно присваиваем нужное значение нашей переменной intVote (в моем примере это будет "2")
Если же такого задания не будет, то в переменной intVote останется значение по умолчанию 0.

В новой вкладке на сайте VK находим элемент для клика:
HtmlElement elGolos = tabVk.FindElementByXPath("//div[@class='radiobtn_label']", intVote-1);

Т.к. элементов (чекбоксов/кнопок) несколько, то в intVote-1 указывается какой именно нам нужен.
Мы помним, что получили значение для голосование 2, но отсчет элементов в C# у нас идет от 0. Соответственно там, где в голосовалке 1 в C# - 0. Всегда на 1 меньше. Вот мы и вычитаем 1 из полученного значения.
//Как мы помним в коллекции элементов у нас нет последнего параметра (называется перегрузка), т.к. мы в коллекцию берем все элементы. А здесь можно выбирать.

Далее все стандартно. Кликаем на найденном элементе. Закрываем вкладку.

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

Сказано - сделано.
Создаем отдельный снипет в начале проекта:

Вставляем туда:
PHP:
project.Context["vkVote"] = (Action) (() => {
   //сюда вставляем наш код для голосования
});
Круто! Теперь мы можем вызывать выполнение этого кода из любого снипета, из любого места всего одной строкой:
project.Context["vkVote"]();

Ахренеть! Да, мы крутые прогеррррры!!!
 

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
#region Лирический антракт

Likes.fm - лучший сервис по накрутке VK. Возможно, единственный за который не банят ни аккаунты, ни объект накрутки. В сервисе есть собственный ограничитель, который не дает выполнять за день критическое количество действий. При раскрутке групп, также действуют ограничения на количество подписчиков в день, а также планомерный рост подписчиков из-за дня в день, который зависит в том числе и от размеров группы. По моим наблюдениям "отвал" подписчиков из групп не более 10% за год. Банят только тех кто параллельно пользуется другими сервисами.

Цена на заработанные баллы Likes.fm на рынке примерно 40р+/- за 1000 баллов. Баллы продают обычно с аккаунтами. Часто с возвратом аккаунта после использования. С одного аккаунта я накручивал, кажется около 600 баллов за день. Не бейте больно, если приврал. Знаю точно что не меньше 300. Накрутка максимального количества баллов для аккаунта происходила за пару часов с достаточно большими паузами между действиями (около 40 секунд). Антикапчей не пользовался.

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

Естественно это трата драгоценного времени впустую, кто бы это не делал. Даже если это делает контент менеджер, это трата его времени, а соответственно вы больше платите ему.

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

Т.е. вы либо продаете свои услуги по "раскрутке" постов в группе. Либо продаете данный шаблон целевым покупателям и они сами занимаются своими группами. Профит везде куда не посмотри.

Лично я хотел реализовать оба варианта. Даже хотел добавить автоматизацию продажи "готовых" аккаунтов. После набора определенного количества баллов аккаунты размещались бы автоматом в какой-либо специализированный интернет-магазин.
Но что-то пошло не так... Точнее я отвлекся на другие свои шаблоны и до этого ни когда наверное не доберусь, ибо идей слишком много, а времени слишком мало. Так что дерзайте!
#endregion

Отдохнули и хватит. Пора работать

Будем писать комментарии.
PHP:
IZennoList lstComment = project.Lists["comment"];
Tab tab = instance.ActiveTab;

//ссылка для задания
HtmlElement elLinkComment = tab.FindElementByXPath("//div[@type='comment']/descendant::a[@class='open_offer']", 0);
//если этот элемент существует, то выполняем действия в скобках {  }:
if(!elLinkComment.IsVoid){
  
    string strComment = string.Empty; //задаем пустую переменную в которую положим комментарий
    //напиши комментарий:
    HtmlElement elWriteComment = tab.FindElementByXPath("//div[contains(text(),'Напиши комментарий')]", 0);
    if(!elWriteComment.IsVoid){
        int intRandomElementNumber = new Random().Next(0, lstComment.Count-1); //получаем рандомное число в пределах количества строк списка с комментариями
        strComment = lstComment[intRandomElementNumber]; //получаем строку из списка
    }
  
    //Скопируй комментарий:
    HtmlElement elCopyComment = tab.FindElementByXPath("//div[contains(text(),'Скопируй комментарий')]/div[@class='info_msg']/div", 0);
    if(!elCopyComment.IsVoid){
        strComment = elCopyComment.InnerText;
        project.SendInfoToLog(strComment);
    }

    //кликаем по ссылке задания
    elLinkComment.RiseEvent("click", "Full");
    Thread.Sleep(1000);
  
    Tab tabVk = instance.AllTabs[1];
    if (tabVk.IsBusy) tab.WaitDownloading();
    Thread.Sleep(5000);
  
    //находим поле для ввода текста
    HtmlElement elFakeBoxReply = tab.FindElementByXPath("//div[contains(text(),'Написать комментарий')]", 0);
    if(!elFakeBoxReply.IsVoid) project.SendInfoToLog("да");
    elFakeBoxReply.RiseEvent("click", "Full"); //кликаем по нему, т.к. без этого оно не активно
    Thread.Sleep(1000);
    instance.SendText(strComment, 20);
Emulator.SendKey(tabVk.Handle,System.Windows.Forms.Keys.Enter, KeyboardEvent.Down);

    Thread.Sleep(5000);
    tabVk.Close();
    Thread.Sleep(1000);
}
Создаем объект со списком IZennoList lstComment = project.Lists["comment"]; в котором у нас будут лежать комментарии заранее напарсенные


Задаем пустую переменную в которую положим комментарий
string strComment = string.Empty;
Ее надо объявить заранее. Иначе если объявить в любом операторном блоке if(){ } for(){ } и т.д., то за пределами этого блока мы не сможем обращаться к этой переменной.

Как обычно находим задание на странице Likes.fm:
//напиши комментарий:
1) HtmlElement elWriteComment = tab.FindElementByXPath("//div[contains(text(),'Напиши комментарий')]", 0);
//Скопируй комментарий:
2) HtmlElement elCopyComment = tab.FindElementByXPath("//div[contains(text(),'Скопируй комментарий')]/div[@class='info_msg']/div", 0);

И в зависимости от того какое у нас задание, то такой коммент мы и положим в переменную strComment

В первом блоке:
int intRandomElementNumber = new Random().Next(0, lstComment.Count-1); //получаем рандомное число в пределах количества строк списка с комментариями
Здесь мы получаем случайное число от 0 до lstComment.Count-1
А lstComment - это у нас тот самый список с комментариями, который мы объявили выше. Обращаясь к методу Count мы подсчитали количество строк в списке.

Т.к. мы сгенерировали выше случайное число intRandomElementNumber, то возьмем коммент из списка под этим номером
strComment = lstComment[intRandomElementNumber];

Если у нас сработал второй 2) блок задания (скопировать коммент), то мы присваиваем переменной strComment внутренний текст объекта elCopyComment
strComment = elCopyComment.InnerText;


На странице же для оставления комментариев, пришлось немного вы%;№ться. Поле ввода текста не активно. На него сначала надо нажать.
Поэтому вместо установления значения для поля (как мы это делали в самом начале), мы жмякаем по нему:
elFakeBoxReply.RiseEvent("click", "Full");
Ну а дальше мы воспользовались эмуляцией ввода текста:
instance.SendText(strComment, 20);
После чего, вместо поиска очередных кнопок мы сэмулировали нажатие кнопки энтер.
Emulator.SendKey(tabVk.Handle,System.Windows.Forms.Keys.Enter, KeyboardEvent.Down);
 
Последнее редактирование:

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
#region История успеха
Ну а как же без нее? В конце концов у нас не законченный рассказ. Так на чем я там остановился?...
Ах, да. Я вписался в какую-то жопу, не зная как из неё вылезать...
В общем, в течение месяца я дрючил гугл, яндекс и этот форум и еще пару человек на складчике. И таки написал свое безобразие:

Скрипт, конечно работал и выполнял свои функции, но с точки зрения "грамотности" - это была жесть.
Там была такая запутанная логика, что я боялся там что-то исправлять, потому что я уже не понимал где я и что делаю.
В результате за 1.5 месяца ковыряния в ProjectMaker я заработал 90000 руб. чистыми. 77к на складчике и 13к вне. Скрипт купили за первый месяц более 100 человек.

Немного подучившись я конечно исправил все то безобразие:

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

К чему я это?
1) А к тому что не надо быть идеалистами и ждать когда вы станете в чем-то разбираться действительно хорошо, чтобы начать зарабатывать деньги.
2) Вписывайтесь в авантюры. Ставьте сложные задачи. Жесткие дедлайны.

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

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

#endregion

Закончили с лирикой. Продолжаем обучение.

Наконец мы дошли до менеджера задач. Я решил особо не выпендриваться и сделать самое элементарное управление:

PHP:
int intLoop = Convert.ToInt32(project.Variables["cfg_loop"].Value);

for(int i=0; i<intLoop; i++){
   
    project.Context["vkAddFriend"]();
    Thread.Sleep(5000);
   
    project.Context["vkRepost"]();
    Thread.Sleep(5000);
   
    project.Context["vkVote"]();
    Thread.Sleep(5000);
}
Для нашего цикла берем переменную из настроек шаблона:
int intLoop = Convert.ToInt32(project.Variables["cfg_loop"].Value);
Т.к. все переменные в зеннопостере (не C#) являются строковыми, то конвертируем переменную в число.

Задаем цикл повторений:
for(int i=0; i<intLoop; i++)
int i=0 - начиная с 0 и до тех пор пока i меньше intLoop
После каждого цикла (круга) увеличиваем значение переменной на 1 - i++
Можно также уменьшать i--

Вот и весь менеджер задач. Что? Мало? Согласен, слабенько как-то. Мы же тру программеры. Нам надо что-то поинтереснее. Ок. Уговорили. Усложним задачу.

PHP:
int intLoop = Convert.ToInt32(project.Variables["cfg_loop"].Value);

for(int i=0; i<intLoop; i++){
    int rnd = new Random().Next(0, 100);
    if(rnd <= 60){
        project.Context["vkAddFriend"]();
        continue;
    }
    if(rnd <= 80){
        project.Context["vkRepost"]();
        continue;
    }
    if(rnd <= 100){
        project.Context["vkVote"]();
        continue;
    }
}
В каждом цикле генерируем случайное число от 0 до 100:
int rnd = new Random().Next(0, 100);

Далее сверяем if(rnd <= 60) Если rnd меньше 60, то запускаем функцию добавления в друзья
project.Context["vkAddFriend"]();
После выполнения функции выполняется continue;
Это означает, что последующие строки кода не выполнять и необходимо сразу перейти к следующему циклу (кругу).
Таким образом мы не сверяем rnd с 80 и 100, т.к. rnd заведомо будет меньше, если она уже меньше 60.

В результате мы можем настроить, чтобы разные задания выполнялись с разной частотностью.
В нашем случае мы получили, что
project.Context["vkAddFriend"](); выполняется в 60% случаев, когда число сгенерировалось от 0 до 60
project.Context["vkRepost"](); в 20% случаев (от 60 до 80)
project.Context["vkVote"](); в 20% случаев (от 80 до 100)


Поздравляю! Теперь мы не просто прогеры.
Теперь мы настоящие кулхацкеры.


 

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Резерв

Незабываем, что сам код в шаблоне достаточно подробно закомментирован. Также там сделал репосты, о которых не писал в статье.
 
Последнее редактирование:

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
пошагово и подробно, мне оч понравилось. Только плюс
 
  • Спасибо
Реакции: Karamzin

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
только скрыта история как ты с момента боязни ПМ вдруг стал писать на си шарпе)
а сорян проглядел - В общем 2 недели теории и "практики" и в конце августа я решаю принять участие в одном не дешевом тренинге.
 
  • Спасибо
Реакции: Karamzin

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
Круто с той точки зрения, как вы отнеслись к задаче "изучить С# для зенки". Сам уже год сижу на кубиках. Пора переходить к чему-то более сложному. Спасибо за статью
 
  • Спасибо
Реакции: Karamzin

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113
Еще не успел прочитать статью от корки до корки - но по внешнему виду могу сказать, что статья заслуживает внимание однозначно!
Жаль что исходников шаблонов нет - придется по шагам самому делать... Если кто-то выполнит и сделает шаблончик - забросьте в тему пожалуйста.

P.S. Статью прочитал. Шаблоны нашел. Спасибо создателю за статью - взял для себя новые фишки, на которые раньше не обращал внимания!
 
Последнее редактирование:
  • Спасибо
Реакции: Slava и Karamzin

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Еще не успел прочитать статью от корки до корки - но по внешнему виду могу сказать, что статья заслуживает внимание однозначно!
Жаль что исходников шаблонов нет - придется по шагам самому делать... Если кто-то выполнит и сделает шаблончик - забросьте в тему пожалуйста.
Я не планировал участвовать в конкурсе. Вчера зашел на форум. Посмотрел статьи. Подал заявку. Дали добро. Поставил задачу написать шаблон с нуля для конкурса и статью за сутки. Собственно что и сделал.
Первый шаблон как есть выложил. Шаблон на c# выложил все, что успел написать за это время.

PS Тот шаблон на котором я заработал денег. Он из другой ниши вообще, он закрытый и только для продажи.
 
  • Спасибо
Реакции: Slava и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 758
Благодарностей
2 392
Баллы
113
PS Тот шаблон на котором я заработал денег.
Мне не нужен шаблон, на котором были заработаны деньги - я о том, о чем описано в публикации.
Свое сообщение выше дополнил - просто просмотрев первым взглядом шаблоны не увидел - а уже когда читал тщательно - нашел их, скачал, даже открыл и посмотрел.
Тот что на кубиках - врятли буду разбираться с логикой его работы. А тот что использует Контекст - интересный - раньше я не применял его, так как не понимал зачем он нужен - использовал общий код. Получается, что можно вместо общего кода его использовать.
 
  • Спасибо
Реакции: Karamzin

lzlmrf

Client
Регистрация
14.08.2015
Сообщения
487
Благодарностей
148
Баллы
43
очень насыщенно )
 
  • Спасибо
Реакции: Karamzin

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
А тот что использует Контекст - интересный - раньше я не применял его, так как не понимал зачем он нужен - использовал общий код. Получается, что можно вместо общего кода его использовать.
Если ты уже работаешь с общим кодом, то там и оставайся. Потому что делегаты в зенке - это шаг назад. Нужно наоборот стремиться переходить на общий код.
 
  • Спасибо
Реакции: AZANIR, Adigen и BAZAg

DenisK

Client
Регистрация
28.06.2016
Сообщения
591
Благодарностей
288
Баллы
63

Geograph

Client
Регистрация
16.02.2014
Сообщения
209
Благодарностей
113
Баллы
43
Спасибо за хорошие примеры использования C# с ZP-браузером
Авантюрный Вы, однако, человек - продавать несуществующий товар, да еще и без опыта его создания. :-) Я бы так не смог
 
Последнее редактирование модератором:
  • Спасибо
Реакции: Karamzin

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: Karamzin

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 340
Благодарностей
298
Баллы
83
  • Спасибо
Реакции: Karamzin

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Извиняюсь, перепутал авторов :(
Но этот шаблон достоин седьмого конкурса :-)
 
  • Спасибо
Реакции: Karamzin

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 340
Благодарностей
298
Баллы
83
Но этот шаблон достоин седьмого конкурса
Да, уж, индикаторы, это круто. Жаль статистики заработков нету
> Свои результаты работы показывать не буду, потому что деньги любят тишину.
> Хочу представить Вашему вниманию мою схему заработка, приносящую в месяц до 40% прибыли.


Так какой смысл представлять нашему вниманию свою схему заработка, если деньги любят тишину?
Аргументы "убедительные". Вспоминаю поговорку из детства: женюсь,- куплю!
 
  • Спасибо
Реакции: Karamzin

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 952
Благодарностей
779
Баллы
113
Извиняюсь, перепутал авторов :(
Но этот шаблон достоин седьмого конкурса :-)
ну ну)) там такое описание, что сразу какие-то сомнения.... это обычный автомат для брокера, таких полно, а миллионеров мало.. я не то чтобы на 100% уверен что нельзя прогнозировать успешно, но как-то так, на первый взгляд. хотя применение зенно для такого - это необычно.
моя месага немного нафлудила по теме статьи, но не смог пройти мимо, простите
 
  • Спасибо
Реакции: Karamzin

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 329
Благодарностей
931
Баллы
113
Извиняюсь, перепутал авторов :(
Но этот шаблон достоин седьмого конкурса :-)
Там кроме красивых слов и обещаний нет ничего. Кажется, даже проверку не прошел )) Хотя, теме уже год скоро )) Один отзыв, и тот с вердиктом: "нуегонафиг" ))
Karamzin, плюсую за подход. И к теме, и к оформлению, и саморазвитию ))
 
  • Спасибо
Реакции: DenisK и Karamzin

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Извиняюсь, перепутал авторов :(
Но этот шаблон достоин седьмого конкурса :-)
Если кто не понял, то это не мой шаблон. Судя по отзывам проверяющих у автора там ни чего не вышло.

Спасибо за хорошие примеры использования C# с ZP-браузером
Авантюрный Вы, однако, человек - продавать несуществующий товар, да еще и без опыта его создания. :-) Я бы так не смог
Нет продукта - нет продаж. Там сейчас почти каждый продукт анонсируется еще до его готовности. Когда делаешь шаблон под заказ, то все тоже самое - продаешь еще не существующий шаблон и учишься в процессе.
 
Последнее редактирование модератором:

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 190
Баллы
113
Если ты уже работаешь с общим кодом, то там и оставайся. Потому что делегаты в зенке - это шаг назад. Нужно наоборот стремиться переходить на общий код.
Делегаты не могут быть шагом назад. Делегаты - это один из наиболее часто используемых механизмов работы с кодом в c#. События построены на делегатах, делегаты в многопоточности используются на каждом углу, а также повсеместно используются такие делегаты, как Func/Action/EventHandler
 
  • Спасибо
Реакции: Karamzin

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Делегаты не могут быть шагом назад. Делегаты - это один из наиболее часто используемых механизмов работы с кодом в c#. События построены на делегатах, делегаты в многопоточности используются на каждом углу, а также повсеместно используются такие делегаты, как Func/Action/EventHandler
я же уточнил, что именно в зенке (в снипетах), а не в чистом c#/общем коде.
Потому что делегаты в зенке - это шаг назад.
 

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
@Karamzin, какая минимальная версия зеннопостера для работы шаблона likes.fm.xmlz ?
 
Последнее редактирование:

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63

Koqpe

Client
Регистрация
23.12.2014
Сообщения
1 100
Благодарностей
649
Баллы
113
Регистрация
13.04.2016
Сообщения
650
Благодарностей
52
Баллы
28
Прошу прощения за прямолинейность, но так и не понял зачем этот шаблон и как на нём зарабатывать...
подход в статье начал непойми от куда и зачем это все так и не ясно.
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 340
Благодарностей
298
Баллы
83

sergej_g

Client
Регистрация
29.11.2011
Сообщения
151
Благодарностей
124
Баллы
43
Прошу прощения за прямолинейность, но так и не понял зачем этот шаблон и как на нём зарабатывать...
подход в статье начал непойми от куда и зачем это все так и не ясно.
Шаблон на автомате выполняет задания на сайте Likes.fm. Сам шаблон автор статьи продал на сайте skladchik.com. Вот отсюда и заработок.
 
  • Спасибо
Реакции: Анатолий

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)