Top.Mail.Ru
? ?

Предыдущие 15

20 янв, 2023

Роршах предвидел

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

This industry is afraid of me. I have seen its true face. Code is a product of schizophrenic delirium, and delirium is full of insufferable thirst for profit, and when this bloated buggy crap won't be able to fit into anyone's head, all the scum will drown. The accumulated filth of technical debt, backdoors and adware will foam up about their waists and all the codewhores and their managers will look up and shout "Save us!"... and I'll look down and whisper "No."

18 сент, 2022

История про Avant и его bookmarks.dat

Почти с появления у меня интернета в 2003-м и года до 2009-го я использовал в качестве основного браузера китайский Avant Browser. В нем были табы, жесты мышью, быстрое отключение скриптов/картинок/флэша и удобный органайзер избранного, и все это в инсталляторе размером 2 МБ.

И шифрованный файл закладок...Свернуть )
Метки:

23 май, 2020

Rust Engineer

Мад скиллз сами себя не это.

Image

3 апр, 2020

Ежегодных контестов псто 2020

Google Code Jam
В качестве решений принимается код на C, C++, Python 2, Java, а еще на всякой экзотике типа Bash, C#, Clojure, D, Dart, F#, Go, Groovy, Haskell, JavaScript, Julia, Kotlin, Lisp, Lua, Objective-C, OCaml, Octave, Pascal, Perl, PHP, Python 3, PyPy 2, R, Ruby, Rust, Scala, Swift, TypeScript, Visual Basic

3 апр 23:00 UTCКвал (27 часов), проходят все, набравшие 30+ баллов
11 апр 01:00
19 апр 16:00
2 май 09:00
Раунд 1A, 1B, 1C (2.5h), проходят по 1500 из каждого
16 май 14:00Раунд 2, проходит 1000 и получают футболки
6 июн 14:00Раунд 3, проходит 25
7 авг 10:30Финал (4h) (Калифорния), призы $15k-$2k-$1k


TopCoder Open
Правила

18 апр 16:00 UTC
28 апр 11:00 UTC
Раунд 1A, 1B, до 2500 участников в каждом, проходит по 750 + топ250 по рейтингу
23 май 16:00
2 июн 15:00

9 июл 11:00
18 июл 16:00
Раунд 2A, 2B, проходит по 200
9 июл 11:00
18 июл 16:00

1 авг 16:00
18 авг 11:00
Раунд 3A, 3B, проходит по 40, футболки всем ненулевым участникам
1 авг 16:00
5 сен 16:00
Раунд 4, проходит 11 (было 10)
TBDФинал, призы $10k-$1.5k-$0.5k

UPD: Даты R2, R3, R4 перенесли


Facebook Hacker Cup
Скопипастил правила, так что это не точно.

24 июл 17:00 UTCКвал, 72ч, проходят все, решившие хотя бы одну задачу
15 авг 17:00Раунд 1, 24ч, проходят все с 30+ баллами
29 авг 17:00Раунд 2, 3ч, топ500 получает футболки, топ200 проходит
12 сен 17:00Раунд 3, 3ч, неясно, будет ли финал


ICFPC: 17 июл 13:00 UTC


Yandex Cup
Возвращается после перерыва в 2019, в несколько сокращенном виде

с 19 окт 12:00 до 25 окт 23:59 UTC+3Квал, 2ч с момента начала, проходят все с 5+ баллами
7 нояФинал, призы: налоговый консультант

23 дек, 2019

Как настраивать Chrome

Браузер


Согласно StatCounter, примерно 70% интернета пользуется браузером Chrome. Он разработан американской корпорацией Google, которая зарабатывает, собирая и используя данные, которыми вы бы не хотели с ней делиться. Chrome это качественный и популярный браузер, потому что основывается на проекте Chromium, браузера с открытым исходным кодом. Корпорация Google добавляет в этот продукт модули, фактически отправляющие всю веб-активность пользователя (посещенные сайты, скачанные файлы, набранный текст, поисковые запросы, когда пользователь открывает и закрывает Chrome, что еще стоит на его машине) в его досье, используемое для нужд информационной войны и иногда для впаривания ненужных товаров. Для минимального подобия приличий заявляется, что эта функциональность помогает пользователю.

К счастью, несколько групп специалистов по безопасности, разработчики альтернативных браузеров на базе Chromium, майнтайнеры Debian, собрались и сделали патчи под заголовком ungoogled-chromium, которые отключают шпионскую активность, встроенную в Chromium. Используя исходный код Chromium и эти патчи, можно собрать Chromium, который вообще не обращается к серверам Google, если пользователь его явно не попросит.

Чтобы избежать повсеместного использования свободного браузера Chromium вместо своего шпионского Google Chrome, Google собирает дефолтный релиз Chromium с флагами, исключающими из браузера, например, поддержку видео. Проект ungoogled-chromium-windows исправляет в том числе и это.

Здесь я расскажу, коротко и по-русски, как собрать свой Chromium, не обладая знаниями программирования.

ИнструкцияСвернуть )

Я использую описанную сборку Chromium с этими настройками в качестве основного браузера уже около месяца, полет нормальный.

22 июл, 2019

Инфраструктура Python

В ноябре 2017 я начал собирать в виде IPython Notebook сниппеты работы с разными полезными для исследовательского программирования библиотеками Python, регулярно используя их как шпаргалку. Потом структурировал, разбил на главы, и обнаружил, что получается что-то похожее на книгу. Увы, спустя некоторое время времени на этот проект перестало хватать, особенно на полировку, поэтому готовыми к бета-ридингу можно назвать только главы 1,2,6,7,8,9,10, остальное на стадии жесткого черновика. Надеюсь, оно будет полезно кому-нибудь и в таком виде.

1. Введение в язык Python
2. Строки, даты, коллекции
3. Взаимодействие с системой
4. Источники данных
5. Богатый вывод
6. Веб
7. Математика, численные вычисления
8. CAS
9. Графы
10. Визуализация
11. Машинное обучение
12. Медиа
13. GUI
14. CTF
15. 3D графика

Патчи/ревью/предложения можно писать в комменты (анонимусы разрешены).

UPD: Поменял ссылки на nbviewer, работает лучше. Гитхаб здесь.

3 июл, 2018

Теормин по STL для СП, часть 1/2

Это теоретический минимум по STL для занимающихся спортивным программированием, подмножество возможностей стандартной библиотеки C++, полезных для решения алгоритмических задач. Группировка преимущественно по заголовку и контексту использования. Почти все упоминаемые имена лежат в пространстве имен std, для него и только для него  следует использовать после #include

using namespace std;



<iostream>, <iomanip>
    cout, cin, while (cin >> ...)
    getline, while+getline, getline после cin
    <iomanip>: fixed, setprecision, setw, setfill, hex/dec
    <iomanip>: noskipws/skipws
    cin/cout.tie(0); cin/cout.sync_with_stdio(false); endl vs '\n'
<cstdio>: printf/scanf для жирных инпутов
<vector>
    clean != empty
    begin, end, rbegin, rend
    push_back, pop_back, emplace_back, front, back
    insert
    size, resize, capacity, reserve, swap hack/shrink_to_fit
    vector<bool>
<string>
    string(10, ' '), std::string("a") + "b"
    length/size, substr
    push_back
    to_string, stoi
    find, rfind, find_*_of, string::npos
<sstream>: stringstream ss("str"), ss.str()
<cctype>
    isalpha, isalnum, isblank, isdigit, islower, isupper, isxdigit
    tolower, toupper, использование совместно с transform
<deque>
<queue>: priority_queue
<tuple>: pair, make_pair, .first/.second; tuple, make_tuple, get<#>();
Лексикографическое сравнение
<map>, <set>
    map, сортированность ключей
    [key]= vs at, for (auto kv : mapa) { }
    count, erase
    set, insert
<unordered_set>, <unordered_map>
    std::hash<T>::operator()
<algorithm>
    min, max, minmax, max_element, min_element
    sort, предикат с tie, stable_sort, is_sorted
    sort/iota + next_permutation
    unique/remove/remove_if + .erase
    reverse
    fill, copy, copy_n, <iterator>: back_inserter, istream_iterator
    most vexing parse
    find, find_if, count, count_if
    search
    includes, set_union, set_intersection, set_difference, set_symmetric_difference
    lower_bound/upper_bound
<iterator>: begin(cont), end(cont), size(cont)
<numeric>: accumulate, partial_sum, iota
<cmath>
    hypot, atan2, pi = atan(1) * 4
    round, floor, ceil
    abs
<complex>
<limits>: numeric_limits<int>::max()
<random>
<utility>: swap
<bitset>
<chrono>: std::chrono::high_resolution_clock::now()
<functional>
Compiler-specific: __builtin_popcount, __builtin_clz, __builtin_ctz, __gcd, __int128


Объяснения к каждому пункту под катом. Соавтор — udpn. Большинство примеров кода любезно предоставлены Evil_Stivie.

Еще вас могут заинтересовать:
Лексика решений TopCoder
Гримуар C++


РазвернутоСвернуть )

Продолжение в части 2.

29 ноя, 2017

Гайд по триатлону: CTF, часть 2/2

Это продолжение поста об ABCTF.

Write-upСвернуть )
Метки:

Гайд по триатлону: CTF, часть 1/2

В этом посте я расскажу про одну из дисциплин триатлона — соревнования по информационной безопасности CTF. CTF расшифровывается как Capture The Flag. Изначально соревнования такого рода представляли собой противоборство двух команд, каждая из которых пыталась взломать сервера другой и не допустить взлома своих, поддерживая, тем не менее, их доступность. Этот формат многим (включая меня) не нравится. Я предпочитаю формат Jeopardy, похожий на одноименную игру («Своя игра»): задачи различной стоимости разделены на несколько категорий, а положение команды вычисляется из суммы стоимостей решённых задач.

Традиционными категориями являются Cryptography, Web hack, Reversing, Forensics. В последнее время всё чаще на соревнованиях встречаются новые категории: Algorithms, похожая на алгоритмическое спортивное программирование, и Reconnaissance, про разведку по открытым источникам в интернете.

В процессе решения задачи, будь то взлом криптоалгоритма, реверсинг какого-нибудь запутанного бинарника или поиск нужного аккаунта в сети, участники находят флаги — короткие опознаваемые строки. Они отправляются автоматическому чекеру в качестве решения. Например, на описываемом контесте флаги имели вид abctf{s0m3th1ng_s1m1l4r}.

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

Если вы заинтересовались темой, почитайте учебник от UFO CTF.
Список предстоящих соревнований


Write-upСвернуть )

Разбор категорий Reconaissance, Programming, Web Exploitation, Reverse Engineering, Binary Exploitation в следующем посте
Метки:

15 сент, 2016

Заголовок окна AlReader2

Одна из лучших читалок fb2 AlReader2 лет 5 как не обновляется для десктопа. У нее есть недостаток, который мешает мне жить. Независимо от того, какой файл открыт, заголовок окна остается прежним, “AlReader2”. Это мешает увидеть на панели задач название книги и не дает понять в отчете хронофагуса, какую книгу я читал в определенное время и сколько времени это заняло. Поэтому я взял hex-редактор и исправил недоработку.

Как?Свернуть )

23 июл, 2016

Программистский триатлон

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

29 июля состоится финал Яндекс.Алгоритма. В число 25 лучших в мире программистов я не попадаю, но вот в число 512 лучших уже да, поэтому жду бандероль с выигранной футболкой. Кроме того, недавно после долгого перерыва я вновь написал раунд на CodeForces, чем окрасил себя в фиолетовый цвет и впервые получил четырехзначный рейтинг (по местному аналогу системы Эло), начинающийся с цифры 2. Всего 1004 программиста в мире имеют рейтинг выше.

Выделить время на приличное участие на Kaggle у меня пока не получается, и диплом сварщика мне пришел только в предыдущем посте, но я сделал 2 сабмита на контесте ML Boot Camp от mail.ru, чем выиграл еще одну футболку, заняв 36-е место из 2245 участников. И отомстил тем самым компании mail.ru, которая уменьшила число футболок на Russian Code Cup до 200 и лишила меня возможности их ежегодно получать. Кроме того, по среднему занятому месту на 7 учебных шадоконтестах, если исключить эпизодических участников (2 или меньше раз), я опередил всех студентов своего курса :)

Для участия в серьезных CTF нужна серьезная команда и способность покидать этот мир на несколько дней больше раза в год. В этом году я + камрады Imageudpn и Imagevladkens порвали ABCTF, заняв 7-е место из 1213 команд. Мы оставили позади такие известные команды, как Antichat и команду École polytechnique.

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

А вам слабо? :)

21 апр, 2016

Deep Learning и акварель

Когда в ШАДе дали лабу на Artistic Style Transfer, я недолго думал, что с чем скрестить. Акварелизация Воронцовского дворца это минимизация градиентным спуском суммы штрафов за квадратичные отклонения картинки от исходной картинки и матриц ковариаций выходов нескольких сверточных слоев VGG19 для картинки и выбранного стиля.

Картинка:
Image

Стиль:
Image

Процесс оптимизации в логарифмической шкале по времени:
https://www.youtube.com/watch?v=kCxKqGOTbNY


Это считалось дольше суток. Кто-нибудь, подарите мне Titan X!

12 авг, 2015

Музыкальное 2.0

Пришла пора вновь запускать музыкальный скрипт, который ищет новые альбомы уважаемых мной исполнителей. И вдруг я обнаружил, что БД http://musicbrainz.org/ знает вообще все группы, кроме 60mm, да еще и есть JSON API. Необходимость патчить 500 строк регекспов и эвристик на PHP, которые боролись с дьявольской фантазией редакторов предыдущего источника — Википедии, резко отпала. Заодно размочил счет репозиториев на гитхабе:

https://github.com/sharpden/albumnotify

Вбейте в bands.txt список исполнителей. Запустите python albumnotify.py. Python 2.7, может попросить поставить pip install requests.

Иногда musicbrainz считает, что вы искали не всемирно известную группу Scorpions, а какую-то непонятную South African Choral Group группу с тем же названием. В этом случае надо дописать в bands.txt правильный musicbrainz id вида # c3cceeed-3332-4cf0-8c4c-bbde425147b6.

Nightwish, God is an Astronaut, Xandria, Arjen Lucassen в этом году особенно хороши.

16 фев, 2015

Страшная сказка про IPython

Обновил недавно python-xy. В его состав входит новый IPython второй версии. Запускаю веб-блокнот, стилей нет, неюзабельно. Смотрю в Developer Tools > Network. Стили присылаются, но Content-Type у них text/plain. Несмотря на rel="stylesheet" и type="text/css" у тэга link, браузер в такое не верит и признавать стили отказывается.

Сервер стартует на 8888 порту, по этой строке и начинаем поиски.

РаскопкиСвернуть )
Метки:

11 фев, 2015

Как разбирать форматы

В рамках священной борьбы с разнообразием взор непременно обращается к форматам файлов. На моем винте около 5000 разных расширений файлов, 800 из которых встречаются 10 и чаще раз. Часть из них созданы неизвестно кем, часть непонятно для чего, еще часть неведомо как читать.

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

И уже сделалиСвернуть )

Предыдущие 15

Image