Задать вопрос
  • Смысл упаковки ключевых аргументов в python 3?

    @nirvimel
    Да много где приходится использовать. Первое что вспоминается:
    1. Если одна функция является оберткой над другой функцией, реализация которой может меняться, то обертка принимает **kwargs и передает в оборачиваемую функцию, при этом может происходит изменение/добавление/удаление элементов словаря, т.е. параметров оборачиваемой функции.
    2. Написание декораторов - обобщение случая №1, когда оборачивается не конкретная функция, вызываемая по имени, а переменная.
    3. Часто используется в различных ORM, когда через параметры функции передаются значения полей модели/записи БД (сама ORM не имеет понятия о конкретной модели/таблице).
    4. Не уверен насчет того, насколько это правильный паттерн проектирования, но любую функцию принимающую словарь единственным аргументом можно переписать так, чтобы она принимала **kwargs, это дает возможность более удобной передачи аргументов f(var=42), вместо создания словаря на лету f({'var': 42}), и оставляет возможность передать готовый словарь через вызов с распаковкой аргументов f(**the_dict).
    Ответ написан
    1 комментарий
  • Как преобразовать строку HEX значений в текст на Python 3?

    @abcd0x00
    >>> s = '0025043F043504400435043004340440043504410025043204410435044500200432'
    >>> b = bytes.fromhex(s)
    >>> b.decode('utf-16-be')
    '%переадрес%всех в'
    >>>
    Ответ написан
    7 комментариев
  • Написание кроссплатформенного приложения (linux/windows) + сервер статистики. Что выбрать?

    @alexxandr
    you'll see in memory only 0xDEADFACE
    C++, для интерфейса Qt
    Ответ написан
    Комментировать
  • Разблокирование в Гугле после очистки от вредоноса? Как избежать подобных проблем?

    @nirvimel
    https://sitecheck.sucuri.net/results/rem-31.ru
    Ищите эту строку pix-00.tizerbank.com и начинайте чистить с этого места. Если начнет опять появляться, то у вас шелл на сайте, стирайте все под корень и перезаливайте из бекапа.
    Ответ написан
    Комментировать
  • Статьи из книги. Как быть?

    @nirvimel
    1. Зависит от лицензии на произведение. Лицензия может разрешать воспроизведение с_сохранением/без_сохранения копирайта, как например лицензия википедии. Для большинства бумажных книг воспроизведение (копирование), конечно же, запрещено.
    2. Зависит от способа рерайта. Меняя местами слова и используя синонимы вы создаете производное произведение (derivative work). В соответствии с open source лицензиями, производные произведения должны сохранять лицензию оригинала и публиковаться также с приведением текста лицензии. Закрытые лицензии запрещают не только публикацию, но и создание производных произведений. Но если вы пишите сочинение на тему оригинала (типа школьного "изложения"), то это не производное, а оригинальное произведение, вы его автор и в праве распоряжаться своим авторским правом по своему усмотрению.
    Ответ написан
    4 комментария
  • Что мой провайдер знает обо мне?

    @nirvimel
    Когда я захожу на определенный сайт, провайдер видит URL?

    Да.

    А если я захожу на https?

    Известен IP сервера и имя домена. Больше ничего.

    Откуда провайдер узнает, что я скачиваю определенный фильм/программу через torrent?

    Торрент-клиент общается с трекером по HTTP. Все видно насквозь: конкретные торренты + вся статистика (когда начато скачивание, когда закончено, когда пошла раздача, сколько роздано). Возможно подключение к трекеру и по HTTPS, но rutracker.org такой возможности не дает (мне тоже интересно почему).

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

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

    Или он отслеживает факт скачивания .torrent файла, а затем делает вывод по идущим пакетам, что это скачивается?

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

    Когда я пользуюсь VPN, что видит провайдер?

    Видит шифрованный траффик на конкретный IP. По IP можно узнать, что этот диапазон продается под VPSы. Сам факт шифрованного трафика вешает абонента в списки тех, "кому есть что скрывать", а значит подозреваемых при любом розыске.

    Что я зашел на определенный IP и с него идут зашифрованные потоки?

    Дальнейшее направление трафика от VPN-сервера отследить невозможно (по крайней мере, на оборудовании провайдера в автоматическом режиме). Но при целенаправленной слежке за абонентом в принципе возможно по временным меткам сопоставить трафик абонента с трафиком любого сервера.

    OpenVPN будет работать через VPN IP и в браузере и при обновлении Windows, драйверов, ...?

    В зависимости от настройки. Но в общем случае, да, так.

    Читал, что в Windows есть такая особенность, что если провайдер как-то урезает пакет, то VPN отключается и сайту показывается мой реальный IP?

    Это не связанно с провайдером. Это особенность Windows. Когда VPN отваливается, весь трафик вылетает наружу в открытом виде. Опять же зависит от настроек. Но это еще одна цена "удобства" при использовании Windows.

    При этом провайдер видит на каком я сайте, что скачиваю?

    VPN отвалился - хацкер спалился.

    Таких фишек много?

    Смотря о чем речь. В сфере сетевой безопасности и анонимности различных нюансов вообще много.

    Как от них защитится?

    Учить мат.часть. Разбираться в сетевых протоколах и в устройстве ОС.

    Если пользуюсь каким-то расширением типа ZenMate, dotvpn, провайдер аналогично как и с VPN видит что что-то отправляется и приходит на определенный VPN IP?

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

    При использовании Tor, кто-то пользуется моим IP, пока я пользуюсь чужим?

    Нет. Если у вас не сконфигурирован Exit Node.

    Что при этом видит провайдер, что я получаю потоки данных с определенных IP и каждый раз разный IP?

    У них есть система точного обнаружения использования Tor. Это факт остается в логах с теми же последствиями, что и для VPN.

    Провайдер видит URL?

    Через Tor и VPN - нет.

    Каким образом можно полностью управлять сетью на ПК, видеть что, куда и когда отправляется или приходит на ПК (Windows, Linux)?

    Видеть все: https://www.google.com/search?q=Wireshark
    Блокировать все лишнее: https://www.google.com/search?q=Comodo+Firewall
    Ответ написан
    22 комментария
  • Какие обязанности клиентской и серверной части?

    @nirvimel
    Если все, чем вы занимаетесь в web, сводится к CRUD, тогда роль бекенда в вашей работе может сводиться к:
    1. Аутентификация юзера.
    2. Проверка прав доступа.
    3. Валидация данных от юзера.

    Когда вы столкнетесь с более тяжелыми приложениями с некоторой бизнес логикой (даже!), тогда вы поймете, что фронэнд занимает такую долю в проекте, какую долю занимает кнопка "Пуск" во всей ОС Windows.
    Ответ написан
    Комментировать
  • Почему Python multiprocessing нестабилен?

    @nirvimel
    Хорошо, что вы указали в тегах Windows, это все объясняет. Под Windows нет простого способа "раздвоиться" процессу при вызове multiprocessing.Process, поэтому осуществляется очень сложная эмуляция этого поведения. При этом функция target выдирается из модуля, запускается в отдельном интерпретаторе, а все параметры сереализуются передаются и десереализуются перед вызовом target, при этом инициализация модуля в новом интерпретаторе выполняется частично (инициализируется только глобальный контекс). Подробнее об этом, например, тут, есть еще одна очень хорошая статья где подробно рассмотрен этот механизм, но сейчас не найду ссылку.

    Коротко о том, как готовить multiprocessing под Windows:
    1. Разделять процессы (вызов multiprocessing.Process()) как можно раньше в коде.
    2. По возможности избегать инициализации любых ресурсов и глобальных переменных до разделения. Учитывайте, что этот код выполняется во всех процессах независимо и может давать кучу сторонних эффектов.
    3. Не передавать через args никаких сложных объектов с "поведением" (кроме объектов из самого multiprocessing, он сам знает как их правильно передавать), только голые данные (примитивы или объекты состоящие только из примитивов), которые сериализуются без сторонних эффектов.
    4. Создавать дочерние процессы один раз, и на протяжении всего времени работать с ними посредством обмена сообщениями через Pipe/Queue. Не порождать новые процессы в цикле вычислений в момент "когда понадобятся".
    5. Queue при попытке записи/чтения может блокировать процесс, если при этом происходит запись/чтения в/из нее в другом процессе. (Думаю, именно это и происходит в коде в вопросе).
    6. Лучше использовать Pipe, который в худшем случае блокирует один процесс, а не все, как Queue.
    7. При создании процесса можно передавать ему два Pipe (input одного + output другого), в вызывающем процессе хранить соответствующие им коннекторы и только при помощи их общаться с дочерним процессом.
    8. Можно не делать process.join(), а просто читать результаты из output Pipe, они прочтутся только после того как попадут туда, что дальше будет происходить с процессом уже не важно (можно поставить return после записи в Pipe в дочернем процессе).
    Ответ написан
    4 комментария
  • Как сделать random с неравномерным распределением в Python?

    @nirvimel
    Сделал справочную таблицу по функциям модуля random, которые генерируют значения с заданным вероятностным распределением.

    ФункцияВероятностное распределение
    random.uniform(a, b)Uniform distribution
    (Непрерывное равномерное распределение)
    random.triangular(low, high, mode)Triangular distribution
    random.betavariate(alpha, beta)Beta distribution
    (Бета-распределение)
    random.expovariate(lambd)Exponential distribution
    (Экспоненциальное распределение)
    random.gammavariate(alpha, beta)Gamma distribution
    (Гамма-распределение)
    random.gauss(mu, sigma)
    random.normalvariate(mu, sigma)
    Normal distribution
    (Нормальное распределение)
    random.lognormvariate(mu, sigma)Log-normal distribution
    (Логнормальное распределение)
    random.vonmisesvariate(mu, kappa)Von_Mises_distribution
    random.paretovariate(alpha)Pareto distribution
    (Распределение Парето)
    random.weibullvariate(alpha, beta)Weibull distribution
    (Распределение Вейбулла)


    Что касается вопроса, то, в зависимости от формы графика, которой вы добиваетесь, вам может подойти одно из этих:
    1. random.triangular(0., 1., 0.)
    2. random.expovariate(1.) (параметр lambd характеризует "наклон" графика, значение 1. выбрано произвольно)
    3. math.fabs(random.gauss(0., 1.)) (параметр sigma характеризует "наклон" графика, значение 1. выбрано произвольно)
    Ответ написан
    Комментировать
  • Как зарегистрировать почту в google.com, если логин вроде бы занят и не занят?

    Scorpi
    @Scorpi
    Возможно этот ящик существовал раньше, но его удалили.
    Насколько я знаю логин после этого не освобождается.
    Ответ написан
    4 комментария
  • Как работают партнерские системы?

    @nirvimel
    Используя обычный прокси, можно надурить систему.

    Не так то просто на самом деле:
    1. 99% всех открытых прокси попадают в базы типа MaxMind и по ним легко определяются.
    2. Одного факта клика недостаточно для "засчета" парехода. На принимающей площадке может стоять анализатор пользовательской активности. Обмануть один скрипт, считающий клики - легко. Обмануть комплексную систему по анализу пользовательской активности - гораздо сложнее.
    3. Принимающая площадка может вести подсчет конверсии и при падении конверсии на определенном классе трафика (для этого применяется специальный эвристический классифиватор), информировать об этом партнерку. Партнерка, сопоставив трафик с источником, сразу забанит накрутчика.
    Ответ написан
    Комментировать
  • Парс выдачи Google, как обойти блокировку?

    @nirvimel
    1. Заголовки Accept и Accept-Language зависят от User-Agent. Вы меняете User-Agent, и Гугл может фиксировать это расхождение. Попробуйте для начала вместо getUseragent() задать константную строку. Потом, если вам так нужно менять User-Agent, то посмотрите как это делает Random Agent Spoofer, он согласут все заголовки с фейковым User-Agent, возможно придется лезть в его исходники, поэтому проще с константной строкой.
    2. Попробуйте еще убрать ru-RU из Accept-Language. Это не означает, что пропадут русскоязычные результаты в выдаче или будут проблемы с кодировкой. У меня вообще вся система и браузер не локализованы, это не мешает гуглить по-русски.
    3. https://www.google.ru/search?q=q&num=100 такие запросы шлют только боты. В браузере при поиске с главной страницы Гугала идет запрос огромной длинны с десятком параметров, в том числе, какие-то уникальные хэши. Попробуйте сначала запросить главную, принять и записать все cookies, выдрать из формы поиска url, по которому уйдет запрос, добавьте туда q=blabla и посылайте новый запрос со всеми cookie. Кстати, на каждый запрос приходят новые cookie и их бы неплохо использовать в следующем запросе, как бы это происходило в реальном браузере, это увеличит время/количество_запросов до бана.
    4. Не запрашивайте сразу num=100, вам так проще парсить, а Гуглу так проще банить тех, кто парсит. Уберите этот параметр и выкачивайте SERP по одной странице. Между запросами делайте паузы в несколько секунд как серфил бы живой человек. При этом возможно параллельно работать с другим запросом из другой сессии с другим набором cookies и User-Agent, как будто несколько человек сидят с одного IP из-за NAT. Но, вообще, выборка SERP глубже одной-двух страниц сильно увеличивают подозрение в ваш адрес и приближают капчу, постарайтесь по возможности вообще отказаться от выборки 100 результатов ради того чтобы парсер работал хоть как-то.
    5. Перед тем как делать все это, запустите Wireshark и сравните в нем вживую два запроса: один из браузера, другой от вашего скрипта в его текущей реализации, возможно какие-то различия бросятся в глаза сразу.
    6. Даже при соблюдении всех условий, бан неизбежен рано или поздно, это зависит от объемов трафика, который вы создаете с одного IP. С этим уже ничего не сделать. Спасет только большой пул проксей.
    Ответ написан
    4 комментария
  • Как в python3 отобразить html страницу с кириллицей?

    sim3x
    @sim3x
    print(urllib.request.urlopen("http://ex.ua").read().decode('utf-8'))


    лучше используй docs.python-requests.org/en/latest
    import requests
    requests.get('http://ex.ua').text
    Ответ написан
    Комментировать
  • Как нужно делать рассылку со своего сайта (сервера)?

    @xtreme
    Снимаю порчу по SSH :)
    1. Изучить рекомендации по рассылкам у крупных почтовых сервисов (Google, Yandex, Mail.ru). При подготовке писем для рассылки строго следовать их рекомендациям.
    2. Зарегистрироваться в postmaster.yandex.ru, postmaster.mail.ru, чтобы следить за ходом рассылки писем.
    3. Отлавливать недоставленные письма, убирать их из листов рассылки, дабы не мусорить.
    4. Сделать механизм отписки от рассылки (это один из критериев пункта 1), причем 100% работающий в один клик.
    5. Мониторить нажатие кнопки "Спам" в вышеуказанных почтовых сервисах, также сразу исключать их из будущих рассылок.

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

    Обязательное условие - соблюдать все почтовые правила и не пренебрегать цифровыми подписями - SPF, DKIM, DMARC, правильные записи в DNS (A, MX, PTR).
    Ответ написан
    10 комментариев
  • Как вы освоили шаблоны проектирования?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    Когда начался бум и восторг вокруг концепции паттернов проектирования, выкрики "GoF рулит!" и так далее, я озадачился тем, чтобы понять, что за шум?

    По своей сути - паттерны - это обычные шаблоны проектирования. Заимствовано у обычных архитекторов (те, которые зданиями занимаются). Суть проста. В работе архитектора есть задачи, которые удобно решать одним или несколькими проверенными способами.

    По аналогии в проектировании софта имееются свои архитектурные вопросы вроде разбиения приложения на компоненты/модули, организации зависимостей между ними, распределение функциональных обязанностей и т.п. Как ловко подметили авторы книжки из этой банды четырех (The "Gang of Four") в нашей индустрии можно также выделить некоторе количество типовых шаблонов, проверенных на практике, чтобы тем самым не наступать на уже обойденные другими грабли.

    Суть постижения паттернов заключается в том, чтобы осознать в каких ситуациях правильно использовать тот или иной шаблон проектирования и правильно его применить. Важно понимать при этом, что формула "чем больше паттернов я придумал засунуть с свое приложение - тем лучше" - неверная. Использовать их следует с умом и только там, где они действительно нужны. Кроме того, патерны устаревают, превращаются в анти-паттерны по мере развития технологий (которые в нашей области делают это более чем стремительно). Ну и, конечно, есть шаблоны общепринятые и есть те, которые успешно используются в узких кругах.
    Тут тоже надо понимать, что это не догма какая-то - типа 10 священных паттернов проектирования :)

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

    К изучению паттернов я дам такие советы:

    1) Прочтите пару книжек, чтобы понять, что это за зверь и с чем его едят. Можно взять одну из вариаций книжки GoF или какие-то производные для вашего стека разработки - познакомиться с основными популярными шаблонами. Сразу после этого я посоветовал бы прочесть книжку "Горький вкус Java" (Брюс Тейт) - она про анти-паттерны. Это чтобы понять обратную сторону их использования. Мне понравилась и уберегла думаю от многих проблем. То что на примере Java - неважно. Речь идет о шаблонах, так что представителям других стеков (к которым отношусь и я) будет просто понять все равно.

    2) Постарайтесь осознать, доводилось ли вам сталкиваться в работе раньше с чем-то, что является или могло бы легко стать одним из шаблонов. Где получалось применить концепт верно, а где из-за этого только проблемы были.

    3) В новых проектах, держите в голове полученные по шаблонам знания - вдруг пригодятся.

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

    Я даже пожалуй посоветовал бы подойти к освоению айтишной архитектурной мудрости с другой стороны - со стороны нефункциональных требований или так называемых "-ilities" - их много. Тут вот описаны 7 штук. А вообще их десятки.

    Среди прочих - такие как maintainability (простая поддержка кода), scalability (масштабируемость), extensibility (расширяемость), availability (устойчивость ) и тп. Если, проектируя свое приложение, вы задумываетесь об этих "илитях" и стараетесь их обеспечить в необходимом проекту объеме, то, как правило, ваше приложение будет иметь отличную архитектуру. При этом шаблоны проектирования в ней появятся лаконично сами собой.

    Поскольку идея использовать шаблоны - это попытка опытных программных инженеров дать десяток готовых рецептов менее опытным, чтобы пока они не научились варить "вкусную кашу", они не варили уж что-то совсем несъедобное. :) Учитесь "готовить", разбирайтесь в -ilites :) и все будет хорошо
    Ответ написан
    6 комментариев
  • Инфо.ресурсы для сеошника?

    vettaxa
    @vettaxa
    Увлекаюсь SEO-шмэо
    moz.com/blog - на английском
    texterra.ru
    seoprofy.ua/blog
    habrahabr.ru/hub/search_technologies
    siteclinic.ru/blog
    searchengines.ru
    https://www.youtube.com/channel/UChFgEuw_XRtkPJ3gP... - sempro
    Ответ написан
    Комментировать
  • Заказ карты payoneer на прямую или через биржу?

    opium
    @opium
    Просто люблю качественно работать
    однозначно напрямую, при заказе через биржу там есть определенные ограничения
    разница в функционале
    Ответ написан
    6 комментариев