Задать вопрос
Профиль пользователя заблокирован сроком с 6 мая 2016 г. и навсегда по причине: Мат в комментариях
  • Как добиться ощущения суперсовременного сайта?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    В каком смысле выглядел - внешне или технически?

    Если внешне, чисто с позиций юзера, то, во-первых, нужны верстка и дизайн. Современные и адаптивные. Можно готовые UI-фреймворки вроде Bootstrap. Вполне современно получится. В 90-е его уж точно не было)) Хотя стандартная его Theme, пожалуй, недостаточно минималистична, кругловатая какая-то)) изменить бы ее чуток.
    Во-вторых, AJAX нужен. Там, где он нужен.
    Все, больше здесь ничего не надо.

    Если же потроха хотите современные, то это уже совсем другое.
    Рассказывать долго, но основное:
    1) Не просто AJAX, а полноценное REST API, способное возвращать не HTML, который тупо вставляется в страницу JSом, а полноценный JSON, удобный для юзания из мобильных/десктопных клиентов, а не только из JS с DOM API. Здесь сложно обойтись без решений вроде ReactJS
    2) jQuery
    3) На сервере MVC и вообще все стройно

    Другой вопрос, на пользу ли такая современность потрохов, если судить объективно.
    Вот скажем Google и VK имеют совсем не современные потроха. У них AJAX возвращает не JSON, а HTML по старинке, иногда небрежно завернутый в JSON (а у VK даже не завернутый), никаких jQuery нет и в помине, MVC (да и вообще четкой архитектуры) тоже, а кроссплатформенное REST API хоть и есть, но весьма такое небрежное и потрохами сайта оно не является, а прилеплено сбоку.
    При этом дела у них почему-то идут гораздо лучше, чем скажем у Mail.Ru Group, которые есть большие любители современных потрохов и вообще всего современного, однако в народе имеют нелестное название "майл.сру", а скажем гугл такого прозвища не имеет.
    Так как же так? Неужели разрабам Google и VK не хватает современности, и они не могут найти себе современных разрабов? А может оно им и не надо, и даже вредно было бы? Подумайте.
    Ответ написан
    4 комментария
  • Можно ли отдельно написать программную часть на java и отдельно "верстку" на Android?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Не совсем, на Android много специфичного, это и такие вещи, как API для отправки SMS, и code-behind для той самой верстки.
    Но вот скажем библиотека для работы с файлами Excel, Word, иным форматом файлов, удобная библиотека для работы с сетью - может быть совместима и с андроидом, и на этапе линковки (jarник вполне можно добавить к проджекту), и на этапе выполнения (если нету специфичных вещей и соблюдены еще кое-какие условия, к примеру, apk не может быть слишком большим по размеру)

    И в любом случае возможна и крайне желательна абстракция, чтобы был фреймворк с классами-обертками буквально для всего.
    Скажем на винде десктопной писать под голое API ОСи - это кошмарный сон любого разраба. А на андроиде почему-то в порядке вещей - со всеми отсюда вытекающими.
    Даже Toast на андроиде и тот убог и однобок:
    Toast.makeText(this, "Hello", 500).show();
    Согласитесь, гораздо лучше было бы, если бы можно было и так:
    MessageBox.show("Hello");
    А для этого надо просто написать класс-обертку по имени MessageBox
    Ответ написан
    Комментировать
  • Как сниффером отловить запросы?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    > ведь там не php (post, get)
    Там не HTTP (POST, GET).

    > Как тогда узнать что и куда, а потом использовать это в php.
    Для вас пока никак. Для меня и то пока никак. А для вас и тем более.
    Сначала нужно научиться с HTTP полноценно работать (там, где он применяется), затем углубиться до уровня TCP (HTTP и другие протоколы основаны на нем), научиться работать с голым TCP, тогда можно будет освоить различные другие протоколы, которые не HTTP, но тоже основаны на TCP (например, XMPP - там TCP + шифрование).
    Но для вайбера, боюсь, придется спуститься еще глубже, до уровня протокола IP. Вот тогда вы освоите дзен и у вас хватит кармы, чтобы побороть долбаных вайберо-буржуев и вскрыть протокол вайбера - VoIP.

    Естественно, все это на практике и только на практике. HTTP для 99.99% всех сайтов (соцсетей и т.д.), TCP для сайтов с NodeJS+socket.io (еще RTMP - для сайтов с Adobe Flash'евскими решениями, обычно это сайты с порно по вебке), XMPP для Jabber и еще некоторых мессенджеров и т.д.
    Словом, практика разработки ботов нужна такая, что без слов, производных от мата, я ее масштабы и вообще всю эту ситуацию описать не могу. Без мата могу только пожелать удачи.
    Ответ написан
    6 комментариев
  • Как отправить клиента на страницу вместе с POST-запросом?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Ну пусть на странице отправляется POST-запрос (хоть JSом, хоть серверно - хотя бы System.Net), а вы пересылайте пользовтаеля на ту страницу. Проблемы?
    Ответ написан
  • Как реализовать сборщик сообщений, постов и фотографий с разных соц.сетей?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Соцсети (именно соцсети, а не мессенджеры) - это обычно классические сайты, работающие по HTTP/HTTPS, даже без сокетов (TCP) или RTMP.
    HTTP - это самый простой протокол из вообще существующих, и для него самый широкий инструментарий (снифферы, библиотеки стандартные и сторонние и т.д.)
    Так что написать такой бот большой проблемы не составляет. Читайте здесь:
    Про HTML-парсинг есть что нового?
    Ответ написан
    Комментировать
  • Какую выбрать среду для написания кода на С++?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    > Громоздкая фиговина
    Небось Community или вовсе какой-нибудь пиратский Professional? Или еще круче - Ultimate? И какого чорта вы это поставили?
    Visual C++ Express 2008 и 2010 совсем не громоздки. Между тем, их вполне хватает, и под винду это уж всяко лучше, чем решения на базе MinGW, будь он хоть новейшей версии, которую только вчера сбилдили.

    > папки, подпапки, все эти замуты с проектами, решениями
    При разработке более-менее крупных проектов, где есть хоть какая-то архитектура и абстракция, все это нужно.
    Как минимум нужны проджекты/решения, именно проджект объединяет несколько файлов исходного кода, если среди них хотя бы 2 файла .cpp, оба из которых нужно отправлять на компиляцию.
    Есть, конечно, другие варианты, например, Makefile, но все равно они по сути сводятся к тем же проджектам, при этом они гораздо менее удобны, это для линуксоидов с их спецификой.

    Хотя да, иногда хотелось бы именно просто создать файл и все, жаль, что MS излишне категоричны и VS не предоставляет такого варианта (такая категоричность аж попахивает линуксятиной - линуксоиды тоже категоричны по-своему)
    Но вот у меня создание проекта с 1 файлом и его сохранение занимает лишнего времени всего секунд 30-60, не более. Неужели это так важно?
    Ничего сильно сложного нет:
    1. Файл -> Создать проект
    2. Нужно выбрать шаблон "Пустой проект"
    3. Проект -> Добавить новый элемент
    4. Выбираем "Файл исходного кода (.cpp)" и не задумываясь вбиваем имя main.cpp
    5. Все, в открывшемся окне можно писать код, затем все сохранить, и запустить отладку (при этом в папке Debug появится exe)
    Можно и еще проще, если пользоваться готовыми шаблонами, например, "Консольное приложение win32", хотя я так не делаю.

    А теперь - главное: о том, почему собсна под виндой следует использовать именно компилятор Visual C++:
    https://otvet.mail.ru/answer/1787375746
    Этот компилятор идет с Visual Studio, но может использоваться и отдельно, в т.ч. из командной строки. Надо заметить, сам по себе компилятор не требует заморочек с проектами и т.д.
    Может его можно и к другим IDE прикрутить. Но это все лишь теоретически, а на практике обычно просто юзают VS и все.
    Ответ написан
    6 комментариев
  • Зачем vk использует переадресацию при входе в систему?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Это у них надо спрашивать. Я только догадываться могу.
    Наверно, для удобства, чтобы развязать то, что занимается авторизацией, и все остальное.

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

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Короче, план такой:

    1. Начинаете с Yii 1.
    Как отметили выше, по нему, пожалуй, побольше гайдов для новичка.
    Как отметили вы сами, он до сих пор используется в некоторых фирмах. Больше знаешь - больше
    Как отмечу я, изучение ретро-инструментов вкупе с современными - не только интересно для любого настоящего программиста, но и реально полезно, т.к. позволяет на опыте разработчиков инструмента делать выводы для себя, учиться на его ошибках, смотреть, какие старые архитектурные или иные решения были не очень, и что в новой версии стало лучше, а что, может быть, и хуже.

    2. Затем переходите на Yii 2.

    3. И - никому, я повторяю, никому - ни в коем случае, ни при каких условиях, ни при каких обстоятельствах - не говорите первым, что вы кодите на Yii 1.
    Видели хитрую рекламу БАДов и прочего дерьма, где мелким, серым шрифтом написано: "не является лекарственным средством"?
    Вот и ваши слова о знании Yii 1 в вашем резюме тоже должны с той же силой "бросаться в глаза", что и этот шрифт в рекламе.
    То есть максимум можно сказать "я пишу на Yii2, также знаю Yii 1" - но не более того.
    А выпячивать в незнакомой фирме свое знание Yii1 первым, пока вас не спросят, нельзя ни в коем случае.

    Я не шучу.
    Я сам по большей части десктопник. И когда пришлось не то что бы даже общаться - а просто явиться серьезным веб-девелоперам из крупных фирм (а может и не очень крупных, но зато тоже очень серьезных), то их просто повергло в шок мое наплевательское отношение к актуализации версий используемого инструмента.
    Однажды я написал на хабре статью-урок для начинающих по Yii2. По Yii2, Карл, даже не по Yii1. Но вот забыл я там расписать пару суперважных фич: не использовал ActiveRecord и не использовал Gii (вместо этого показал новичкам, как все это делается вручную). Боже... Такого бурления фекалий в комментах под своими постами, такого количества минусов, такого количество обозленных и оскорбленных, такого своего аккаунта с такой своей репутацией - я еще не видел никогда...

    Я подумал, что это просто на хабре собираются какие-то злые люди, и решил то же самое повторить то же самое повторить на другом сайте, другой страны, и с совсем другим инструментом.
    А именно, я написал... Нет, точнее сказать, я посмел написать статью по переходу с ASP.NET WebForms на ASP.NET MVC... О ужас, на ASP.NET MVC 2-3 версий!
    Бедные иностранцы, мое преступление буквально лишило их дара слов, они даже уже не могли бурлить в комментах, они могли только тыкать кнопку минуса и кнопку репорта, ну и дальнейшая судьба моего поделия, очевидно, очевидна: "posted 32.13.2015 9:00, deleted 32.13.2015 20:00".

    Короче, я уже отчаялся копаться в причинах, но это факт: увидев версию, хоть на один major отличающуюся от новейшей, серьезные веб-синьоры бесятся так, как будто вы под винду хотите писать для них на голом ассемблере. Как будто вы колете для них дрова каменным топором. Как будто...
    При этом их просто невозможно убедить в том, что изложено в пункте 1, особенно начиная с "Как отмечу я". Просто невозможно. Я пробовал. Не пытайтесь.

    В общем, надеюсь, хоть кто-то оценит мой пост таким, какой он есть - офигительно длинный, офигительно ванильный и - в руках умелого продавца себя (то бишь устраивателя себя на работу) - офигительно полезный.
    Всем желаю удачи!
    Ответ написан
    Комментировать
  • Про HTML-парсинг есть что нового?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    > Смотрю для автоматизации запросов набрал популярность Selenium WebDriver.
    Мне больше PhantomJS нравится.
    А еще вариант с голыми HTTP-запросами, когда берут сниффер вроде Fiddler, отслеживают запросы и затем на ЯП их имитируют. Под виндой обычно для этого берут C#.
    Это требует больших усилий в плане устойчивости к распознаванию бота серваком, и может быть не столь стабильно к изменениям на серваке, зато быстродействие + не надо ничего левого на комп ставить + запросы можно делать из любого привычного ЯП без костылей.

    Не нужно пытаться все слишком упростить.
    Во многих отраслях есть 2 возможности. Можно быть спецом, знать все изнутри, применять средства разных уровней. А можно только уметь тыкать кнопочки, записывать макросы и т.д., т.е. только уметь пользоваться готовыми сверхвысокоуровневыми средствами.
    Так вот, со вторым подходом далеко не уедешь.
    Это ни в коей мере не означает, что спец всегда все делает по хардкору, пишет на асме и т.д. Реальные спецы тоже любят удобство, качество, абстракцию и т.д. И ведь если нужного простого сверхвысокоуровневого средства просто не существует под его задачи, то как раз спец может сам его написать (как говорят, "дай человеку необходимое - он захочет комфорта"), а что тогда сделает дилетант, нахватавшийся вершков и умеющий только готовым пользоваться? Ничего.

    > А вот с парсингом сложнее -- xPath выражения нужно писать вручную
    Вы вообще о чем?
    Откуда вы хотите парсить HTML?
    Не знаю, как Selenium, но из бота на PhantomJS доступны все возможности JavaScriptовского DOM API.
    А для C# есть хорошая библиотека AngleSharp, для парсинга HTML и CSS, где есть не только GetElementById, но и по классу, по тэгу, по CSS-селекторам и вообще вроде все то же, что и в стандарте DOM. Правда, работает медленнее, чем привычный HtmlAgilityPack (в котором все кроме GetElementById делается XPath'ами)
    Ответ написан
    Комментировать
  • Почему не передаются данные из контактной формы?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Так вы в JSе поля формы-то и не отправляете нигде. Просто делаете AJAX-запрос к action и все.
    Или я тупой, а jQuery умнее меня, и даже в такой ситуации догадывается что надо отправить поля?))) Сомневаюсь.

    Вообще сниффер Fiddler советую для подобных случаев, он ведет журнал запросов от клиента к серверу, смотришь журнал и сразу ясно, правильный ли запрос отправил клиент, и если правильный, то на серваке проблема
    Ответ написан
    3 комментария
  • А вы сохраняете себе кусочки кода для повторного использования?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Фреймворки нужно писать.
    Понятия "код на самописном фреймворке" и "(говно)код без фреймворка" - это две большие разницы. Неважно для какой платформы этот код.
    Ответ написан
    Комментировать
  • Где искать сниппеты кода javascript?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Именно сниппеты - маленькие кусочки кода для конкретных маленьких задач?
    В гугле можно искать, по запросам типа "javascript get request", только это тоже требует навыков, и требует труда, иногда приходится ссылок штук 5 пересмотреть, прежде чем найдется нужное.
    А есть нетривиальные задачи, по которым вообще готовых решений нет.
    Ответ написан
    1 комментарий
  • Какую книгу по програмированию/ресурсы выбрать чтоб в последующем писать скрипты/ботов/автокликеры?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Именно автокликеры как таковые - это очень просто, пишется почти на любом ЯП, но они фигня полная.
    Медленно, неудобно в использовании, ведь на экране все время окошки мелькают, а главное - криво (программно очень сложно определить, когда уже появилось окошко, а когда нет, и тем более сложно определить, если это не окошка, а элемент на веб-странице, который еще и подгружается не сразу же.

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

    Начинать действительно стоит с HTTP/HTTPS (это протокол, по которому работает 99,(9)% сайтов и немало приложений),
    Суть здесь в том, что клиентская часть при определенных действиях юзера делает запросы к серверной, вот эти запросы мы сперва вручную перехватываем, затем на любом ЯП имитируем их отправку.
    Для перехвата (это исследовательская часть работы - Research) понадобится сниффер Fiddler. А для отправки запросов (Development) - почти любой ЯП годится, но под виндой лучше C# либо Delphi.
    Подробнее:
    https://otvet.mail.ru/answer/1794591622
    Отмечу, что этот вариант подходит и для сайтов с AJAXом, коих сейчас очень много.
    Советую также изучить AJAX, ведь не умея самому сделать такую архитектуру, вы и с чужим сайтом не разберетесь. Статья по AJAX:
    codeproject.com/Tips/1065669/How-To-Build-Web-Site...
    Все же здесь имеются и нюансы, например, приложение может работать через свой прокси, что затрудняет перехват запросов Fiddlerом, или же это вообще приложение под мобильную ОС, где снифферов толком нет. В целом все это обходится, любому приложению можно задать фиддлеровский прокси, приложения для Android запускаются на Genymotion опять же с прокси и т.д.

    НО! Не стоит ограничиваться HTTP/HTTPS.
    Почему?

    1. Некоторые сайты работают по протоколу TCP (голые сокеты, это ниже уровнем, чем HTTP/HTTPS). Fiddler не покатит.
    Чтобы понять эту архитектуру, и поэкспериментировать с протоколом, советую освоить NodeJS и socket.io - это лучший способ создать свой простенький сайтик с TCP и использовать его как полигон для изучения TCP и написания первого своего бота такого уровня. В качестве сниффера здесь Wireshark, он сложнее и не столь удобен, но можно и с ним справиться.
    Еще бывает протокол RTMP (но это уже с Flashем, на чистом JS не бывает), там вроде Adobeовский какой-то бек-енд, тоже надо освоить так же, как и TCP. В качестве сниффера - Wireshark годится вроде.
    А самый абзац - это клиентские приложения. Вроде Skype, Viber, WhatsApp и т.д. Приложение в отличие от сайта может юзать вообще какие-то редкие протоколы или вовсе свой протокол, из них вроде XMPP самый простой и открытый, с этим сам пока не разбирался.

    2. На некоторых сайтах вроде бы HTTP/HTTPS и все понятно.
    Но всего слишком много. Просто слишком много. Слишком много запросов на одно действие, слишком много параметров запросов, слишком много куков. Например, гугловские сервисы славятся этим.
    Все это имитировать HTTP-запросами реально устаешь, а если хоть что упустишь, то это потенциальная проблема (а боты и так периодически ломаются, когда бек-енд меняется)
    В ряде случаев лучше взять PhantomJS (можно через CasperJS), это браузерный движок, но не простой, а специально для таких целей. Он представляет почти весь функционал, какой нужен. Боты получаются не столь быстрые, как на голых HTTP-запросах (которые, очевидно, даже быстрее человека с браузером), и все это на NodeJS (под виндой это скорее недостаток, чем достоинство, лучше бы C#, хотя можно и PhantomJS прикрутить к C#, но криво), но зато боты более стабильные выходят (гораздо более похожие на реальный браузер с гораздо меньшими усилиями по имитации), и пишутся быстрее.

    P.S. Профессиональный ботовод, бюджет иных проектов составлял 5-значные числа.
    Ответ написан
    Комментировать
  • Какие языки программирования дают контроль над процессорами, ядрами, потоками?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Пессимистичный какой-то слишком вопрос. Как бы почти все они это умеют. Разница скорее в удобстве, скажем на C# (с TPL, async-await) все это точно поудобнее будет, чем на C++, Java.
    Ответ написан
  • Нормальным ли считается такой кусок кода?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Лучше, чтоб main был в отдельном файле, следовательно, и в отдельном классе.
    Ответ написан
    Комментировать
  • Фриланс в России без подписок?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Мне и cyberforum.ru хватает, никаких фриланс-бирж не надо. Главное быть спецом, иметь портфолио, кучу статей на CodeProject/хабре, свой сайт...
    Не сказать, что зарабатываю хорошо, но с каждым годом все больше и стабильнее, и зато свобода во всем. Без работы долго не сижу.
    Ответ написан
    2 комментария
  • Десериализация json в c#?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Снаружи должны быть { } а не [ ]
    Я бы просто перед парсингом исходную строку завернул таким образом:
    {"response": [
      {
        "topic": 1,
        "title": "Тест",
        "text": "Какой-то текст 1",
        "user_id": 1328,
        "user": "user 1",
        "time": 1454613213
      },
      {
        "topic": 2,
        "title": "Тест 2",
        "text": "Какой-то текст 2",
        "user_id": 1328,
        "user": "user 2",
        "time": 1454611021
      }
    ]
    }


    И дальше все без проблем парсится по исходникам из гугла, jobj["response"] - это JArray, ну а в нем уже JToken'ы/JObject'ы

    Хотя может можно и сразу в JArray распарсить такой JSON, не интересовался пока.
    Ответ написан
    Комментировать
  • Как получить данные с сайта у которого нет API?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Если сайт действительно работает по HTTP/HTTPS (99,(9)% случаев это так, хотя возможны TCP, RTMP и др.), то сниффер в помощь. На винде Fiddler самый удобный сниффер.
    Им нужно отследить запросы, которые браузер+сайт делает к веб-морде (включая AJAX, если есть), и эмулировать их на ЯП, не забывая все нужные параметры, заголовки и куки.
    Вместо отправки HTTP-запросов, еще возможно использование PhantomJS, напрямую или с CasperJS. Это медленнее работает, зато меньше телодвижений для полноценной имитации браузера, и в отличие от обычных браузерных движков, там есть весь или почти весь нужный функционал, скажем, файлы в input type=file загружаются без проблем.
    Ответ написан
    Комментировать
  • Какие примеры правильного Java кода можно привести?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    > Java
    > правильное использование ООП...
    Не бывает такого.
    Ответ написан