-
Накручивание голосований на Друпал.ру
Простой скрипт на Питоне, накручивающий голосовалки на Друпал.ру:
import threading import urllib import re import sys import time import random try: _, nid, variant = sys.argv[:3] except: print "Usage: python poll.py nid variant" exit(1) PROXY_PATTERN = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{2,5}" POLL_URL = "http://www.drupal.ru/inner_poll/vote_js" PROXY_URLS = ( "http://feeds.feedburner.com/best-proxy/oKhv", ) proxies = [] for url in PROXY_URLS: try: proxies.extend(re.findall(PROXY_PATTERN, urllib.urlopen(url).read())) except: continue params = { "n": nid, # node id "v": variant # variant id ("0,1,n" if multiple) } data = urllib.urlencode(params) threads = [] print len(proxies), "proxies =)" time.sleep(3) def job(p): time.sleep(random.randint(0, 60)) urllib.urlopen(POLL_URL, data=data, proxies={'http': 'http://' + p}) for p in proxies: t = threading.Thread(target=job, args=(p, )) try: t.start() except: pass
Запускать так:
python poll.py nid variant
, где nid — номер ноды, variant — номер варианта ответа (нумерация с нуля) либо варианты через запятую.
Комментарии к коду.
- На Друпал.ру голосование разрешено всем, даже анонимам.
- Единственное ограничение на голосование — IP должен быть уникальным в пределах номера ноды.
- Запрос осуществляется методом POST с передачей двух переменных: номера ноды и варианта. Про CSRF-токены не, не слышали.
- Каждый запрос делаем через свой прокси. Список прокси берем из RSS-ленты сайта http://best-proxy.ru/ Лента, как вы заметили, пропущена через Фидбернер, т.к. создатели сайта огораживаются от граббинга.
- Каждый запрос выделяем в свой тред.
- КПД проксей где-то 10%, что тоже неплохо.
Область применения скрипта — накрутка и троллинг.
Комментарии из старого блога
03/10/13 RxB: Ну зачем… Теперь все будут знать
03/10/13 Иван Гришаев: Да и хрен с ним. Во-первых, на Д.ру одни пхп-шники, во-вторых, best-proxy.ru больше не обновляется, прокси из РСС-ленты не работают.
03/25/13 Александр Мальков: Но, все равно - спасибо. Интересный подход.
-
Работа с Яндекс.Диском из 1С
1С умеет удивлять. Например, чтобы работать с Яндекс.Диском, не требуется никакого шаманства, все из коробки:
Путь1 = "https://login:pass@webdav.yandex.ru/path/to/file.txt"; Путь2 = "c:\file.txt"; КопироватьФайл(Путь1, Путь2); УдалитьФайлы(Путь1); КопироватьФайл(Путь2, Путь1);
Данный код копирует файл из облака Яндекса на локальный диск, удаляет из облака и заливает обратно. Вместо
login
иpass
подставляем логин и пароль Яндекса.Это дико удобно, потому что, в отличии от Дропбокса, Яндекс поддерживает Вебдав. Диск от Яндекса раскачивается до 10 Гб в полпинка. Таким образом, все прайсы, фотки и прочую статику можно хранить в диске от Яндекса.
Комментарии из старого блога
04/17/13 Руслан: Приветствую, ну а что удивительного. Я так понимаю яндекс диск резервирует служебную папку. КопироватьФайл - просто копирует в эту папку файл, а яндекс приблуда висячая в трее, сама синхранизирует данные.
Пробовали сделать данный не шаманский код, без установленного яндекс диск по?
04/18/13 Иван Гришаев: Код работает без установленного Я.Диска. В 1С где-то зашита поддержка протокола Вебдав, по которому работает Я.Диск. ФТП тоже поддерживается. В том и прикол, что для работы с файлами из облака устанавливать клиент не нужно.
04/18/13 Руслан: Ну тогда действительно прикольная штука. Надо по экспериментировать ;)
08/03/13 Илья: А уверены, что именно 1С поддерживает webDAV а не ОС? Попробуйте под ХР запустить этот код
08/03/13 Иван Гришаев: Уверен, так написано в доках. А что, под Икс-пи не работает?
12/23/13 Александр Маляев: Огромное спасибо за наводку! А то никак не мог придумать, куда бы свои 500Гб на Яндексе приспособить. А тут mail.ru еще облако замутило и терабайт в подарок всем дало, и WebDAV скоро обещают - вообще тема будет!
01/16/14 Иван Гришаев: У мейл.ру подвох в том, что все залитые данные становятся их собственностью, они могут делать с ними все, что хотят. Например, слить бекапы ваших баз конкурентам. Разве что на архив выставлять пароль.
01/16/14 Александр Маляев: Вы сами понимаете что они это делать не будут. Всего один прецедент, и его так раструбят по всем соцсетям и новостным лентам, что потом не отмоешься. А при миллиардных оборотах так глупо рисковать своей репутацией ради каких-то копеечных архивов? Техподдержка MAIL.RU уже отвечала на этот вопрос, дав понять что этот пункт просто формальность. Конечно все мы понимаем что если спецслужбам понадобятся материалы то любой их предоставит, и MAIL.RU не исключение, но многим ли есть повод скрывать что-то от высокопоставленных органов? Мелкие нарушения в налоговом законодательстве никого не волнуют ни капли. За много лет моей работы сотни архивов баз и паролей ко всему прошли через почту, файлообменники, СМС - и ничего. А уж почта не менее доступна кому надо чем облака.
01/16/14 Иван Гришаев: Снимите розовые очки. Номера телефонов продают спамерам все. Мейл ру могут слить ваши данные, потому что вы не сможете явно доказать, что слили именно они. Вручную они не буду рыться в ваших данных, скорее, это делает программа, которая ищет во всей этой помойке что-то интересное. Базы от 1С интересны, их можно тайком продавать.
01/16/14 Александр Маляев: Да, кстати в 1С 7.7 такой поддержки WebDAV нет.
02/27/14 Виталий: А есть ли возможность из 1С8 получить публичную ссылку на скопированный файл.
02/27/14 Иван Гришаев: Нет, только средствами Я.Диска.
03/16/15 Андрей: А куда этот код надо прописать? и как без ПО яндекс.Диска настраивать путь к базе из самой 1с?
03/16/15 Иван Гришаев: Этот код вы помещаете в любое место, например, в тело формы, модуля. Вторую часть вопроса не понял.
03/16/15 Андрей: Подскажите можно настроить доступ к яндекс.диску путем https://login:pass@webdav.yandex.ru/path/to/file.txt т.е при выборе пути к БД что указывать? эту строку? как работает такой доступ?
03/16/15 Иван Гришаев: Андрей, мне кажется, вы не так поняли. БД тут ни при чем. Предположим, что в Я-диске у вас есть папка documents, а в ней файл price.xls. И предположим, что ваш Я-логин
andrey
, a парольSuper123
Тогда вы можете выкачать файл из Я-диска прямо из кода 1с таким образомКопироватьФайл("https://andrey:Super123@webdav.yandex.ru/documents/price.xls", "c:\documents\price.xls");
или наоборот, загрузить файл с локального диска в Я-диск
КопироватьФайл("c:\documents\price.xls", "https://andrey:Super123@webdav.yandex.ru/documents/price.xls");
Проблема только в том, что в последних билдах 1С стал глючить SSL
03/16/15 Андрей: А как подключить яндекс диске(с базой 1С) она будет работать? в настройках указать путь к БД 1с какой ? с дисками локальными все понятно а как быть с Яндекс дискам? можно подключить диск командой https://login:pass@webdav.yandex.ru? или нет? просто хочу организовать доступ не локальный(БД не на компе), а скажем через яндекс диск. Это возможно ?
03/16/15 Иван Гришаев: Андрей, вы можете синхронизировать файл базы через Я-диск только когда не работаете с ней. Когда вы начинаете работу, файл открывается процессом 1С и сторонние процессы не смогут его прочитать. Кроме того, если много клиентов постоянно перезаписывают один и тот же файл, могут возникнуть конфликты, и чья-то сторона вынуждена будет принять не свои данные. Если вам нужна единая база данных, воспользуйтесь хостингами вроде
virtual1c.net
03/16/15 Александр Маляев: Андрей, теоретически это возможно, так как удаленную Webdav-папку можно смонтировать как локальный диск и работать с ней как с обычным диском. Но фактически вы работать не сможете, т.к. скорость будет примерно такая как если бы вы умудрились запустить 1С на каком-нибудь древнем 286-ом.
Если хотите удаленную а не локальную 1С - то смотрите в сторону “облаков”, в случае этого решения и данные и их обработка происходят на одном удаленном сервере, клиенту “гонится” либо картинка (в случае удаленного рабочего стола), либо небольшие куски данных, отобранные и обработанные сервером (в случае тонкого клиента).
04/29/15 Алексей: Подскажите пожалуйста, доводилось ли Вам получать с ЯндексДиск штатными средствами 1С 8.3 список файлов в произвольной папке? Без подключения внешних XML библиотек ? Все пишут, что надо сделать запрос (даже без тела), указав только атрибуты (заголовки объекта HTTPЗапрос):
PROPFIND / HTTP/1.1 Host: webdav.yandex.ru Accept: */* Depth: 0 Authorization: Basic "+ВКодировкеBase64(ЛогинПароль:ИмяФайла)
Но,
"PROPFIND / HTTP/1.1 "
- это ведь не атрибут, это команда. И как тогда её выполнить штатными средствами 1С?04/29/15 Иван Гришаев: Здравствуйте, не приходилось. Нужно смотреть документацию, позволяет ли 1С отправить хттп-запрос методом PROPFIND. Если нет, то увы.
Проверьте, можно ли передать урл Яндекс-диска в функцию
НайтиФайлы()
Если тоже нет, установите cURL из запускайте его из 1С как процесс. Текст ответа распарсите силами 1с11/20/15 Сергей Лиманчук: Иван, всё прекрасно работало где-то полгода, но с середины вчерашнего дня не копирует никакие файлы, 1С возвращает ошибку “Удаленный узел не прошел проверку”. Любопытно, что мобильное приложение 1С для iOS продолжает работать, ошибка вылезает только на ПК.
11/20/15 Иван Гришаев: Сергей, да, с какого-то времени схема перестала работать, к сожалению. Вы можете заменить диск от Яндекса на ФТП-сервер. Все то же самое, только в файловом пути пишете
ftp://
вместоhttps://
-
Красота в Питоне: чистка строк
Есть многострочная (юникодная) строка. Скажем, номера телефонов в столбик.
Как получить список телефонов безо всякой мишуры вроде пустых строк и лидирующих/конечных пробелов ?
В Питоне это делается в 3 (три!) строки:
data = u''' 23-33-34 89644616130 79144905640 266653 ''' phones = data.splitlines() phones = map(unicode.strip, phones) phones = filter(bool, phones) print phones [u'23-33-34', u'8 964 461 61 30', u'7 9144905640', u'266653']
Вот за что я люблю этот язык.
-
Джанго: тестовый сервер или боевой?
Вот как определить, в какой среде запущена Джанга:
# settings.py import sys DEBUG = "runserver" in sys.argv
Очень удобно — при запуске тестового сервера всегда будет включен дебаг, а в бою — выключен.
-
Дрянь
Заходим на сайт Сноба. Загрузка подтормаживает. Ставим расширение для Хрома Ghostery. Видим следующее:
Заблокировано двенадцать(!) источников и почти 30(!) запросов ко всяким счетчикам, виджетам и прочей дряни. Вот полный список (ссылки укорочены многоточиями):
- http://ads.adfox.ru/165877/prepareCode?p1…
- http://ads.adfox.ru/165877/prepareCode?p1=bi…
- http://ads.adfox.ru/159305/prepareCode?p1=b…
- http://ads.adfox.ru/165877/prepareCode?p1=bisr…
- http://luxup.ru/tr/8523/&r=http%3A//www.google.com/reader/view…
- http://ad.adriver.ru/cgi-bin/erle.cgi?sid=110529&sz=reader_index&…
- http://ad.adriver.ru/cgi-bin/erle.cgi?sid=166191&target=top&bt=21..
- http://static.chartbeat.com/js/chartbeat.js
- http://s.clicktale.net/WRc3.js
- http://connect.facebook.net/ru_RU/all.js
- https://graph.facebook.com/fql?q=SELECT%20total_count%20FROM%…
- http://partner.googleadservices.com/gampad/google_service.js?v=276501
- http://www.googletagservices.com/tag/js/gpt.js
- http://www.google-analytics.com/ga.js
- http://www.google-analytics.com/__utm…
- http://www.google-analytics.com/__utm.gif?utmwv=5….
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=4…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=5&utm…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=6&utmn=42…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=7&utmn=154032…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=8&utmn=242…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&utms=9&…
- http://www.google-analytics.com/__utm.gif?utmwv=5.3.9&ut…
- http://www.google-analytics.com/__utm.gif?utmwv…
- http://counter.rambler.ru/top100.jcn?2327123
- http://counter.rambler.ru/top100.scn?2327123&rn=880223809…
- http://www.tns-counter.ru/V13a…
- http://mc.yandex.ru/metrika/watch.js
Ладно, аналитику Гугла можно принять. Но зачем счетчики от Яндекса и Рамблера? А теперь подумайте о том, что каждый раз вы грузите себе на комп это говно.
Нет, установив однажды AdBlock и Ghostery, пользоваться интернетом без них уже не сможешь.
-
Колл-центр, типа
На рисунке изображена схема будущего колл-центра нашей организации:
Никогда не мог понять, зачем тратить сотни тысяч на разработку и внедрение подобных схем (плюс затраты на оборудование, поддержку, интеграцию), когда можно увеличить штат телефонистов и отвечать живым голосом.
Очевидно, что человек звонит, когда информации на сайте, листовках и т.д. уже не достаточно. И заставлять его слушать тарабарщину, давить на кнопки, ждать — нехорошо. В моей практике ни разу не было случая, когда робот-автоответчик помог в решении проблемы.
Но поскольку у нас Крупная® Организация™, то и схема колл-центра должна быть Корпоративной® и Энтерпрайзной™ — взрывающей мозг, проще говоря. А я устроил маленький саботаж — сделал так, чтобы из любого уровня этого ада можно было соединиться с оператором, нажав «ноль».
Уверен, это будет самой используемой фичей.
-
Регистрация в Микрософте
Вот такая скатерть ожидает всякого, кто желает получить регистрационный ключ для Вижуал Студии Экспресс. Несколько пустяковых вопросов:
- Если продукт бесплатный, зачем трясти с меня какие-то ключи? Вот когда куплю — тогда и буду регистрироваться.
- «Имя и фамилия» — читаем заблуждения программистов об именах.
- Зачем дата рождения? Зачем выпадающий список на 31 день? Быстрее вписать руками (я родился 31 декабря и поэтому во всех списках последний). Почему выбор года начинается с 2013? На сайте могут регистрироваться новорожденные? Если нет — зачем засорять список, если да — кому нужна эта дата?
- Зачем спрашивать пол? Если позарез нужно знать, почему бы не поставить мужской по умолчанию? Политкорректность?
- Проверка пароля на вхождение зубодробительных элементов. Очень плохой принцип. Хочу 123, значит, пусть будет 123. Все равно учетка на 1 раз.
- Адская капча в 8 символов. Нормальные люди давно поняли, что боты и китайцы ломают любые капчи, вред от них только пользователю.
- Спам-галка воткнута по умолчанию.
И все это — для того, чтобы получить несчастный ключ. Воистину, Микрософт не дружит с разработчиками.
-
Драйверы торгового оборудования
Есть такая штука — философия Unix. Это свод принципов проектирования систем и программ. Когда вы их придерживаетесь (в т.ч. при разработке под другие системы), то все работает хорошо, а когда отклоняетесь — начинаюстя фейлы.
Один из принципов состоит в том, что программа делает что-то одно, но очень хорошо. Например, отлично обрабатывает какие-то файлы. Еще один принцип — программа должна быть управляемой другими программами. Например, все данные, вводимые с клавиатуры, можно передать в параметрах командной строки.
Как следствие из этого — интерфейс программы для связи с внешним миром тоже является отдельной задачей и выносится в дополнительную абстракцию. Так, типичная *nix-программа представляет из себя библиотеку, которая просто делает что-то хорошо. Ее можно подключить в проект и пользоваться зашитыми функциями. Это один из возможных уровней абстракции. Второй — когда пишется команданая утилита. Это просто обертка, которая парсит аргумены командной строки, вызывает функцию библиотеки и выводит результат в stdout. Третий — ГУЙ для конкретной оболочки/среды. Опять обертка, которая пользуется командной утилитой/библиотекой. Четвертый — COM-сервер для Винды. Очередная обертка, сердце программы — библиотека — остается неизменным. Пятый — CGI-скрипт для веб-сервера. Аналогично вышесказанному.
И так далее. Суть этого подхода в том, что любой желающий сможет прикрутить чужой код к своей системе.
Но есть уроды-программисты, которые распространяют код в качестве COM-компонент, крутящихся только под Виндой. И плевать, что основная часть кода кроссплатформенна — нет, покупай Винду, ставь антивирус, потому что программер Вася не выучил Си/Плюсы, а сел быдлокодить в Вижуал Бейсике. И все это — в промышленных масштабах.
Я имею в виду конкретно разработчиков драйверов для торгового оборудования Атол и Штрих-М. Их драйвера — апофеоз идиотизма. Школьнику известно, что устройства, втыкаемые в COM-порт, могут работать в любой операционке, потому что взаимодействие с ними сводится к трем шагам — отправил байты в порт, подождал, прочитал ответ. Все!
Нормальный программист написал бы библиотеку, отдельно — командную утилиту, потом ГУЙ и т.д. Потом бы подтянулись 1С-ники со своими компонентами, COM-объектами и прочей чушью. И все бы это работало в любой системе.
Но нет же — качайте их драйвера с COM-объектом. И операционные системы, которые могли бы сделать процесс торговли надежней и безопасней, в пролете. Но мир не без добрых людей — находятся энтузиасты, которые пишут кроссплатформенные драйвера на том же Питоне, например. И работают они хоть на FreeBSD. Спасибо вам за это, ребята.
Короче, бородатые мужики, заложившие основы IT-систем, знали как надо делать программы. Нужно чаще впоминать их принципы. А если ваша программа работает только в Винде или тупит в ожидании нажатия кнопки — идите в жопу.
-
Привязка пользователей к телефону
Интернет-гиганты вроде Вконтакта, Одноклассников, Киви и др. давно смекнули, что привязывать учетку лучше не к емейлу, а сотовому. Это правильно. Если ваш сервис хоть немного связан с приватными данными и финансами, требуйте от пользователя сотовый, потому что ему же лучше будет — заполучить физически чужой телефон гораздо труднее, чем взломать виртуальную почту. Плюс телефон есть у всех, в т.ч. у бабушек и детей.
Специальный абзац для параноиков, уверенных в том, что светить номер — значит, нарываться на спам и лохотронщиков. Во-первых, опсосы и так сливают базы номеров тем, кто хорошо за это платит — помните лотерею на миллион от Биллайна? Во-вторых, спамить через смс дороже и сложнее, значит, отсекаются крупная часть спамеров. В-третьих, в любом нормальном телефоне можно поставить блок на нежелательные номера. В-четвертых, опсосов в последнее время шугают за спам, так что даже устное обращение в колл-центр возымеет действие.
-
1С и JSON: сериализация ссылок
Обновил функцию
json()
: http://pastebin.com/HFaEaETXТеперь ссылки справочников и документов преобразуются не в строки вида
"Счет №123 от 31.12.2012"
, а в строку-уникальный идентификатор, например,"f96fbf5f-3ade-11e1-b823-003048643e2d"
. Зачем это нужно?Затем, что разрабатывают конфигурации для 1С в основном криворукие уроды, которые не знают о том, что в каждой таблице должен быть уникальный id, по которому можно однозначно найти элемент таблицы. Это приводит к тому, что коды делают не уникальными или уникальными в пределах владельца. В итоге никакой пользы от кода нет - на кой он нужен, если не уникален? Что делать, если код известен, а владелец нет?
Специально для борьбы с уродами-разработчиками моя функция любезно вернет вам гуид ссылки, который самый что ни на есть уникальный. А текстовое представление ссылки справочника или документа можно получить в запросе функцией “представлениессылки()”.
Кстати, разработчики 1С тоже уроды, потому что гуид - это и есть ссылка и ее по идее можно получить в запросе. Почему это до сих пор не реализовано - тайна.
Комментарии из старого блога
07/10/14 Yan: Кстати, разработчики 1С тоже уроды, потому что гуид — это и есть ссылка и ее по идее можно получить в запросе. Почему это до сих пор не реализовано — тайна.
+100
07/10/14 Иван Гришаев: Согласен, частенько гуида недоставало.