Записки разработчика
28 subscribers
22 photos
4 files
131 links
Заметки о используемых инструментах и технологиях, прочитанных статьях и книгах, размышления о саморазвитии и решении прикладных задач.
Download Telegram
Показательный пример (по мотивам статьи):
Человек, очень сильно интересующийся парсером питона, создал патч, который уменьшает потребление памяти парсера на 30%. Очень клево, да? Правда, изменений очень много.
Но за полгода этот патч никто так и не поревьювил. А в конце еще и Гвидо ван Россум резюмировал:
"Python's parser wasn't designed to *efficiently* parse huge data tables like that, and if you have that much data, using JSON is the right answer.... Sometimes a change is just not worth the effort."
Мне кажется отличный пример прагматичности, так иногда мы делаем кучу больших, опасных изменений, которые не двигают проект вперед, а служат скорее некой ачивкой для разработчика.
Очень часто в проектах вижу использование оператора:
x &= y
Все бы хорошо, но почти везде его используют для операндов с типом bool. Cкорей всего лень писать:
x = x && y, а оператора x &&= y, как известно,
в С++ нет, поэтому делают такой "хак".
Но нужно понимать. что замена не релевантная и при смене типа у x или y - команда будет работать не так, как вы ожидаете.
Неожиданно осознал, что в нашем проекте практически никто не использует namedtuple, а это чертовски удобная вещь и часто помогает значительно сократить объем копипасты!
Немного про стремные хаки, которые работают:
В проекте dava.engine, в классе файла под андроидом есть код, который 10 раз подряд пытается открыть файл и засыпает на 100 милисекунд, если открыть не получилось. Казалось бы, зачем? Этот код появился после фикса бага в DLC - только что скаченный файл при попытки открытия был недоступен. Эмпирически вывели, что после 8 попыток файл гарантированно открывался. Вот и вставили 10 (на всякий случай!) попыток на открытие.
Стоит отметить, что есть похожий хак в коде хромиума - попытка удаления файла два раза подряд.
К сожалению, наш мир не идеален и нужно понимать, что на файлы - это внешняя среда по отношению к программе, и с этой средой может твориться все что угодно - файлы могут быть использованы другими процессами (вирусы, антивирусы, системы контроля версий и прочие сканеры), баги по работе с файлами в других приложениях и же даже нас может подвести оборудование.
Если с кодом в хромиуме это выглядит как простое решение достаточно сложной проблемы, то в коде dava.engine это грязный хак. Проблема, очевидно, есть и с ней стоило бы разобраться. Почему временная задержка помогает? Может сообщение о завершении скачки файла пришло раньше, чем оно на самом деле произошло? Файловые дескрипторы закончились? Сторонние процессы лочат доступ? К сожалению, узнать это будет уже сложно. Код ведь работает, а если работает - не трожь. 🙂
Как в астраномии ведется обмен знанием о событиях взрыва сверхновых, гравитационных волнах и прочее? Мне казалось, что это некие пресс релизы с кучей excel файлов, которые рассылаются по почте. А если что-то срочное - то звонят по телефону или даже скайпу. Не знаю с чем связано такое глупое заблуждение, но я был рад узнать о International Virtual Observatory Alliance.
Смысл этого сообщества в создании "виртуальной обсерватории" для своевременного обмена астрономическими событиями. Эти события имеют описываются в определенном формате - VOEvent (в xml =). Для обмена есть свой собственный протокол поверх TCP/IP VOEvent Transport Protocol. Соответственно, для всего этого есть проект на github.
Зачем это? И что это дает?
Да все просто - обсерватории мира объединены в одну сеть и если какая-либо обсерватория регистрирует событие о, к примеру, гравитационных волнах, то можно автоматически навести телескоп на предполагаемый участок неба и в реальном времени снять другие параметры этого события.
Есть так же и специализированные проекты - для получения сообщений конкретно о гамма-всплесках. Без проблем получилось запустить, посмотрим, сколько нотификаций о событиях я получу =) UPD. За 15 минут - 3 события.
Принцип работы алгоритма Код Хаффмана. Используется в архиваторах, изображениях и при передаче данных по HTTP.
Алгоритм простой, и, как по мне, потрясающе красивый, поэтому обязателен к ознакомлению.
Ловушка для беспилотного автомобиля :)
https://github.com/kamranahmedse/developer-roadmap
Ветка развития fronend, backend, devops специалиста в картинках) Оргиниальный способ, нужно сказать, так как каждый желающий может выразить свое пожелание создав Issue или pr c фиксом, коих там много)
Запилил тут недавно пакет для питона, подробнее в статье:
https://telegra.ph/Idealnyj-proekt-paketa-s-podderzhkoj-raznyh-versij-pitona-04-24
Очень бесит в поисковой выдаче qaru.site, который по факту является автоматически переведенными ответами со stackoverflow.com.
Благо добрые люди написали блокировщики поисковой выдачи. Сначала попробовал блокировщик от гугла, но оказалось что он уже мертв). Но нашелся более удачный вариат Google Hit Hider, который работает, кстати, не только для гугл поиска.
Советую скачать Violentmonkey (потому что он опен сорсный) и установить непосредственно скрипт для блокировки.
И все работает отлично!
Duff's device - пример извращения, которое так любят создавать программисты.
register n = (count + 7) / 8;      /* count > 0 assumed */

switch (count % 😍
{
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}

Это раскрутка цикла вкупе с необычной возможность языка С - сквозная конструкция do{}while.
И именно это необычное свойство позволяет создать облегченный потоки на голом языке C.
Можно почитать статью Операционная система из говна и палок, там описан подход с указанием всех источников.
Есть кучу реально крутых проектов, которые меняют мир к лучшему.
А есть fartscroll.js 🙂
Даже если ваш аккаунт и пароль хранится в виде хеша и никогда не передается серверу явно, при угоне базы можно восстановить по хешу ваши креды. Тут можно скачать словарь таких хешей:)
https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm
Поэтому:
1) Пользователи - не используейте одни и те же пароли
2) Разработчики - дополнительно солите хеш (можно даже несколько раз), когда кладете в базу.
Livelock - аналог deadlock, только система не блокируется, а занимается бесполезной работатой и ее состояние постоянно меняется, но тем не менее она зациклилась.
https://deadlockempire.github.io/
Клевый онлайн тренажер для понимания сути проблем синхронизации потоков.
Зарядка для ума и прокачка твоего технического скила!