SATtva Персональная страница
темы архив все rss xml 2.0
 
 
блог
досье
связь
english
 

MITM от Yota

22.05.2015
крипто

По-видимому, при попытке открыть запрещённый ресурс по HTTPS, Yota приветствует своих пользователей попыткой подмены сертификата:

image

Nice try Yota, but no.

Циклическая сортировка в Python

05.04.2015
софт

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

links = ['http://foo.com/page1',
         'http://foo.com/page2',
         'http://foo.com/page3',
         'http://foo.com/',
         'http://blah.org/file0',
         'http://blah.org/file1',
         'http://foobar.net/some_page',
         'http://foobar.net/another_page',
         'http://foobar.net/yet_another',
         'http://blah.org/file2',
         'http://blah.org/file3',
         'http://blah.org/file4']

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

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

Для начала определим критерий сортировки: нас интересует имя хоста:

from urllib.parse import urlparse

sort_by_host = lambda url: urlparse(url).netloc

Ну, а теперь самое весёлое. Этот код можно легко переписать в однострочник, но, памятуя, что свобода лучше, чем несвобода явное лучше неявного, сделаем его более наглядным:

from itertools import groupby, zip_longest

# Сортируем по именам хостов.
sorted_urls = sorted(links, key=sort_by_host)
# Группируем хосты.
grouped = [list(group) for _, group
           in groupby(sorted_urls, key=sort_by_host)]
# Сортируем хосты циклически.
interleaved = list(zip_longest(*grouped))
# Преобразуем в однородный список без None-элементов.
output = [item for group in interleaved
          for item in group if item is not None]

# Полученный результат.
for link in output:
    print(link)

# http://blah.org/file0
# http://foo.com/page1
# http://foobar.net/some_page
# http://blah.org/file1
# http://foo.com/page2
# http://foobar.net/another_page
# http://blah.org/file2
# http://foo.com/page3
# http://foobar.net/yet_another
# http://blah.org/file3
# http://foo.com/
# http://blah.org/file4

Для ценителей лаконичности та же функция в одну строку. Ну, или уж как получится. :)

output = [i for e in list(zip_longest(*[list(g)
          for _, g in groupby(sorted(links, key=sort_by_host),
          key=sort_by_host)])) for i in e if i is not None]


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

GPG Remote

18.02.2015
софт

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

Документация на английском и репозиторий
Документация на русском
Скачать

Показали по тиви

10.02.2015
blender

Ну, почти. На самом деле, в Голливуде на Academy Awards (в простонародии, Оскар) acceptance talk, где чествовали Эрвина Коуманса, главного разработчика Bullet Physics.

Пару лет назад Phymec (a.k.a. Chiaroscuro) обратился с просьбой позаимствовать какой-нибудь из этих панорамных рендеров для одной из его потрясных физических анимаций (сделанных с использованием той самой библиотеки Bullet), на что я, конечно же, с удовольствием согласился.

И тут ВНЕЗАПНО... Не перестаю удивляться, насколько мир маленькая деревня.

Нямка

02.01.2015
blender

image

image

image

Деревянный Томск

02.01.2015
мнение

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

Центр творческой конвергенции

02.12.2014
blender

Концептуальный конкурсный проект развития исторической территории в рамках Преображенской зоны (г. Томск).

image

image

image

image
image
image
image

image

image

image

image

image

image

image
image
image
image

Пришёл чудесный спам

21.10.2014
право

Избранное:

Детективное агентство ********** предлагает Вам информационно-поисковые услуги
<...>
Тексты СМС – 160.000 за месяц, 250.000 за полгода (МТС, Билайн, Мегафон)
<...>
Определение местоположения по телефону – 50.000 рублей (по всему миру, точность до дома), если телефон в Москве – 40.000 рублей
<...>
Пробив IP-адреса – 35.000 рублей (Московский регион)
<...>
Движения средств по счету фирмы – 100.000 рублей за год (любой регион)
Остаток средств на счету фирмы и сумма оборота за квартал – 50.000 рублей
<...>
Взлом почты (mail.ru, yandex.ru, rambler.ru) – 15000 рублей (результат зависит от посещаемости ящика)
<...>
А также ряд специфических услуг (помощь в возврате долгов, физическая поддержка, получение прав без экзаменов, разрешение на оружие и т.д. и т.п.)

Сбился со счёта, на сколько статей УК они тут нарекламировали.

По ссылке -- убогий сайт-визитка с половиной пустых разделов. Телефоны с московскими номерами, офис -- в Махачкале.

Интервью, вот, дал

14.08.2014
blender

По блендероводству.

Кто хотел на pgpru матановую капчу?

10.10.2013
софт

Из нового движка:

image

Energy/Entropy

22.05.2013
blender

Конкурсная работа по теме Math is Beautiful, второе место. По условиям сцена должна быть сгенерирована процедурно, постобработка запрещена.

image
image
image

Neumann TLM-102 Special Edition (with EA-4 shock mount)

04.12.2012
blender

3д-екабря посвящается. Плюс небольшое видео (28 MB).

The quote of the day:
I've been told that forensics teams will soon try to analyse SATtva's renders to find finger prints...
Jean-Philippe Grimaldi

image

image

Энергосбережение

19.03.2012
blender

Визы для интерактивного сервиса по расчёту энергоэффективности квартиры.

По ссылке -- просмотрщик панорам (в версиях для линукса и винды) и картинки в полном разрешении, файло на 30 Мб:
energy_panorama.zip (sig)

image

image

image

image

Рядом с Филом

14.03.2012
мнение

Ответил на несколько вопросов по крипто-тематике для "Деталей мира", №5 [7] 2012. Авторы журнала дважды молодцы: взяли интервью у Фила Циммермана и не забыли поставить ссылку на pgpru.com, как я их просил. Текст опубликован на стр. 78-81.

Работа над ошибками

04.03.2012
мнение

Очевидно, проблемы, имевшие место на декабрьских выборах, не остались для властей незамеченными. Необходимые оргвыводы сделаны. Меры приняты.

Утром отправился на избирательный участок. Голосую там далеко не первый раз, членов УИК знаю по крайней мере в лицо, мою семью они тоже знают.

Подошёл к члену комиссии, отвечающему за мою территорию, передал ей паспорт, она открыла журнал регистрации избирателей на нужной странице. Она смотрит на страницу, я смотрю на страницу. Смотрим друг на друга: моё имя в журнале зачеркнуто. Похоже, она удивлена не меньше моего. Обращается к председателю, та отвечает: "Вчера вечером звонили из УФМС, потребовали вычекнуть ряд избирателей по причине снятия с регистрации". Спрашиваю с улыбкой, без меня меня женили? Сейчас, говорит, выясним. В паспорте отметка о регистрации стоит, так что явно какое-то расхождение. Председатель куда-то звонит, по-видимому в ТИК, минуту о чём-то разговаривает. Кладёт трубку и обращается к другому члену УИК, ведущей журнал дополнительных избирателей: "Раз отметка о регистрации не погашена, внесите".

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

Феерический пресс-релиз от СК РФ

05.02.2012
мнение

"О ходе процессуальных проверок о нарушениях, связанных с проведением избирательной кампании по выборам депутатов Государственной Думы Российской Федерации шестого созыва":

Но самое примечательное, что все смонтрированные видеоролики были распространены с одного сервера, который расположен на территории США в штате Калифорния.

ВНЕЗАПНО youtube хостится в Калифорнии? No way!

Без мэйла жизни нет

22.12.2011

Мастерхост отличился, практически на сутки отключив мои сайты, хостящиеся на его серверах. В аут ушёл не только веб, но и все DNS-записи, так что почта всё это время тоже была недоступна. Если вы пытались до меня достучаться где-то с часа-двух ночи 22 декабря МСК и получали возвраты сообщений, теперь знаете, почему. Можете писать снова.

GlassExpert. Экстерьеры

19.11.2011
blender

Вторая часть того же проекта. (Карты окружения с openfootage.net.)

"Брусничка", Томск
image image
image image


"Стройпарк", Томск
image image
image image


Томская ТВЗ, ЦИТ
image image image
image image


Томская ТВЗ, Инженерный центр
image image image
image image
ЧБ-вариант в порядке эксперимента:
image image


ФОК, Кемерово
image image
image image
image image


Hilton DoubleTree, Новосибирск
image image image
image image image
image image

GlassExpert. Интерьеры

14.11.2011
blender

Первая часть проекта-долгостроя -- интерьерные визуализации для изготовителя систем остекления повышенной сложности. По ТЗ вид за окнами не требовался, это моя отсебятина для портфолио (фотки с commons.wikimedia.org), так что не стоит ждать особого совпадения пейзажей с реальной действительностью.

"Брусничка", Томск
image

Томская ТВЗ, ЦИТ
image

Томская ТВЗ, Инженерный центр
image

ФОК, Кемерово
image

Hilton DoubleTree, Новосибирск
image

"Стройпарк", Томск
image

Yoru. Suzumushi

08.07.2011
blender

Ночь. Цикады.

image