Pull to refresh
18
0

Пользователь

Send message

Где в Западной Европе самый низкий НДФЛ?

Level of difficultyEasy
Reading time5 min
Views5.7K

В большинстве западных стран применяется прогрессивная шкала налогообложения про которую ходит много легенд (вполне обоснованных, но есть нюансы) какие большие налоги получаются по сравнению с Россией с плоской шкалой 13%. В этой статье мы обзорно рассмотрим налоговые системы десяти стран Европы (в целях простоты рассматриваются только страны Западной Европы и из рассмотрения исключаются карликовые государства, а также Швейцария, потому что там всё слишком сложно): Франция, Германия, Италия, Испания, Ирландия, Нидерланды, Бельгия, Португалия, Австрия, Великобритания.

Рассматривать будем НДФЛ. На мой взгляд, это самый субъективный налог, так как пенсионные, страховые и прочие отчисления конвертируются непосредственно в некую твёрдую сумму (например, пенсии, которую будет человек получать в старости). А вот именно НДФЛ идёт в некий "общий котёл", на который потом финансируются правительство, органы правопорядка, система образования и т. д. Читателям статьи следует держать в уме, что в Европе принято указывать сумму зарплаты не только до вычета НДФЛ, но и до вычета других отчислений, поэтому данную статью нельзя использовать для оценки итоговой суммы к выплате на руки, только для сравнения подоходного налога.

Читать далее
Total votes 14: ↑4 and ↓10-2
Comments25

std fs в Rust медленнее, чем Python? Нет, это аппаратный баг

Level of difficultyMedium
Reading time19 min
Views9.9K

В этой статье я поделюсь с вами долгой историей, которая начинается с op.read() opendal, а заканчивается неожиданным поворотом. Это путешествие оказалось для меня достаточно поучительным, надеюсь, и для вас оно будет таким же. Я постараюсь максимально точно воссоздать свой опыт и дополню его выводами, которые сделал в процессе.

Читать далее
Total votes 75: ↑75 and ↓0+75
Comments9

Точечная маршрутизация на Mikrotik: BGP и Address lists + Mangle. Реализация через домены

Level of difficultyMedium
Reading time17 min
Views40K

Как загрузить список из 500 доменов на mikrotik, чтоб он их преобразовал в IP-адреса?

Как заставить Mikrotik резолвить домены по wildcard?

Как поднять Shadowsocks\VLESS на ROS?

Никак

Я задался этими вопросами, достал hAP ac lite из шкафа и посмотрел, на что способна ROS 7 в конце 2023 года. Потестил всем известные способы, а также попробовал запихать много доменов в address-lists.

Читать далее
Total votes 22: ↑22 and ↓0+22
Comments34

Ещё раз про алгоритм сжатия Хаффмана

Level of difficultyHard
Reading time21 min
Views15K

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

Читать далее
Total votes 33: ↑32 and ↓1+37
Comments13

Как Rust меняет мышление разработчика

Level of difficultyEasy
Reading time9 min
Views48K
Я страшно ненавижу C++. Обычно я люблю программирование, но каждый проект, с которым я имел дело на C++, ощущался как монотонная рутина. В январе 2023 года я пошёл по пути изучения Rust, поэтому теперь могу сказать, что знаю язык системного программирования, который действительно люблю использовать.

Первый стабильный релиз Rust появился в 2015 году, и каждый год, начиная с 2016, он признаётся в Stack Overflow’s Annual Developer Survey самым любимым языком (в 2023 году эта категория называется «обожаемый»). Почему же разработчики, ощутившие вкус Rust, не могут отказаться от его использования? Похоже, в мире прогремевших наследников C/C++ репутация растёт только у Rust. Как же этот язык, появившийся на сцене меньше десятка лет назад, стал настолько популярным?

Ржавый красный краб Феррис по версии Midjourney

Кривая обучения оказалась крутой. Я нашёл многое, что мне нравится в Rust, но постоянно попадал в его ловушки. Однако в конечном счёте именно препятствия и проблемы, с которыми столкнулся, я научился любить больше всего.

Я начну историю с разговора о том, что легко полюбить — со среды Rust, управления пакетами и документации. Затем я расскажу о системе типов и типажах (trait). Далее я поведаю о тех возможностях тестирования и test driven development, которые становятся возможными благодаря Rust. Наконец, мы обсудим самую запутанную и сбивающую с толку часть — одержимость Rust тем, кто какой переменной владеет.
Читать дальше →
Total votes 87: ↑75 and ↓12+89
Comments147

Готовим драйвера МК для проброса периферии

Level of difficultyHard
Reading time12 min
Views3K

В предыдущей статье рассматривался принцип, как можно прокинуть периферию микроконтроллера (UART, I2C, CAN bus etc) в обычную ПК программу, так как если бы она входила в состав нашего компьютера и висела на обшей шине с памятью. В той публикации рассматривается теория и инструменты, которые позволяют это сделать. В этой части мы рассмотрим, как на практике осуществляется подготовка кода драйверов к инструментизации ADIN LLVM pass и последующей сборке в отдельную динамическую библиотеку, которую вы можете использовать в своих проектах

Готовим код драйверов
Total votes 13: ↑12 and ↓1+14
Comments0

Хардварный проброс

Level of difficultyHard
Reading time9 min
Views7K

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

Два пути как это сделать
Total votes 24: ↑24 and ↓0+24
Comments20

Стек протоколов BLE 5 -физический уровень

Level of difficultyEasy
Reading time9 min
Views4.6K

Физический уровень - это нижний уровень стека протоколов BLE, который определяет основные радиочастотные параметры связи BLE, включая частоту сигнала, схему модуляции и т.д.

Рабочая частота BLE составляет 2,4 ГГц. Он использует частотную модуляцию GFSK и использует механизм скачкообразной смены частоты для решения проблемы перегрузки канала.

Существует три схемы реализации для физического уровня BLE 5, а именно некодированный физический уровень со скоростью 1 Мb/s, некодированный физический уровень со скоростью 2 Мb/с и кодированный физический уровень со скоростью 1 Мb/s. Среди них некодированный физический уровень со скоростью 1 Mb/s совместим с физическим уровнем протокола серии BLE v4, в то время как два других физических уровня увеличивают скорость связи и расстояние связи соответственно.

Читать далее
Total votes 15: ↑13 and ↓2+16
Comments12

Тест производительности Web-фреймворков для Rust

Level of difficultyMedium
Reading time9 min
Views9.1K

В этой статье мы сравним производительность 3 наиболее популярных бекэнд-фреймворков для Rust: AxumActix и Rocket.

Сравним основные особенности, качество документации и самое главное - проведём тест производительности. Для этого напишем с помощью каждого фреймворка простой REST-сервис с тремя эндпоинтами - один будет просто возвращать отформатированную строку, второй засыпать на 20 миллисекунд имитируя небольшую работу с БД или запрос к внешнему сервису, а третий будет выполнять тяжёлую работу вычисляя хеш bcrypt, имитируя какую-нибудь сложную бизнес-логику.

Читать далее
Total votes 15: ↑13 and ↓2+14
Comments12

Примитивы синхронизации в Python Asyncio: Исчерпывающее руководство

Level of difficultyHard
Reading time14 min
Views8.1K

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

Что было дальше?
Total votes 15: ↑14 and ↓1+15
Comments4

Ржавое наследование 2. Славянский проброс Get/Set

Level of difficultyMedium
Reading time7 min
Views4.3K

Вторая статья по теме, развивающая мои теоретические выкладки про наследование реализаций из первой части. В этой части пойдет речь о доступе к данным через цепочку вложенных структур. Все также никакой лишней нагрузки в виде: Rc, RefCell, и тд, только no_std и немного nightly в конце. Но чтобы понимать происходящее требуется изучить первую статью: ссыль, хотя и будет предоставлена совсем минимальная вводная.

Продать душу дьяволу
Total votes 14: ↑14 and ↓0+14
Comments4

10 лучших практик логирования в Python

Level of difficultyEasy
Reading time19 min
Views31K

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

В этой статье мы рассмотрим лучшие практики логирования в Python. Следуя им, вы сможете обеспечить информативность, практичность и масштабируемость генерируемых логов. Давайте начнём!

Читать далее
Total votes 50: ↑49 and ↓1+70
Comments19

Настройка производительности диска и памяти в Linux

Level of difficultyMedium
Reading time15 min
Views13K

В отличие от таких операционных систем как HPUX (dbc_min_pct, dbc_max_pct) или AIX (minperm%, maxperm%), в Linux нет возможности настраивать размер кэша страниц, читаемых с диска (страничный кэш, page cache). Под страничный кэш Linux использует всю доступную память. Размер страничного кэша можно увидеть в /proc/meminfo в параметре "Cached". В /proc/meminfo есть также значение "Buffers", которое часто путают с размером страничного кэша. "Buffers" — это память, содержащая сырые дисковые данные (raw disk data) и выступающая в роли промежуточного буфера между процессами, ядром и диском.

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

Читать далее
Total votes 23: ↑22 and ↓1+26
Comments4

Проблема «error: future cannot be sent between threads safely» при использовании Rust-библиотек Tokio и Actix

Level of difficultyMedium
Reading time3 min
Views2.7K

Приложения на Rust часто используют асинхронные библиотеки, такие как Tokio и Actix. Эти библиотеки предоставляют инструменты для асинхронного ввода-вывода и параллельных вычислений и т.д. Однако иногда возникают проблемы при совместном использовании разных асинхронных библиотек.

Сегодня я хочу поделиться с вами опытом решения одной из распространенных проблем при работе с библиотеками Tokio и Actix. Конкретно, мы рассмотрим ошибку "error: future cannot be sent between threads safely", которая может возникнуть, когда вы пытаетесь использовать клиент Actix внутри асинхронной функции, запущенной с помощью Tokio. Я расскажу вам, как преодолеть эту проблему.

Читать далее
Total votes 6: ↑3 and ↓30
Comments21

Год ожиданий — и мы получили Python 3.12. Изменения, новшества и дополнения

Reading time4 min
Views55K
image

Новую версию Python многие разработчики ожидали с нетерпением. Кто-то и не ждал, поскольку вполне достаточно было возможностей прежней версии. Но Python 3.12 таки выпустили, сейчас стало известно, что эту ветку будут поддерживать полтора года, а потом для нее станут формировать исправления для устранения уязвимостей — в течение еще трех с половиной лет.

Кроме того, запущен процесс альфа-тестирования Python 3.13, где заявлен режим сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock). Тестировать ветку будут в течение семи месяцев, исправляя ошибки и добавляя новые возможности. Затем еще три месяца — тестирование бета-версий и еще через два месяца появится пред-финальная версия. Но будет потом, а сейчас поговорим о том, что уже есть в руках — о Python 3.12.
Читать дальше →
Total votes 78: ↑77 and ↓1+102
Comments77

Протоколы семейства TCP/IP. Теория и практика

Level of difficultyMedium
Reading time23 min
Views109K
image

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

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

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

Приложение — простое и понятное и, надеюсь, упростит изучение материалов статьи. Ведь именно радость первой победы даёт мотивацию, достаточную для того, чтобы потратить гораздо больше времени на изучение темы.

В статье изложены наиболее важные с моей точки зрения понятия, которые должен знать любой программист, хоть как-то сталкивающийся с компьютерными сетями. Так что без теоретических сведений не обошлось.
Читать дальше →
Total votes 82: ↑82 and ↓0+82
Comments5

Критика статьи «Unit Test Fetish»

Level of difficultyEasy
Reading time5 min
Views2.2K

Не так давно (13 Сентября 2023) на Хабре опубликовали статью "Подборка выдающихся статей по тестированию". В приведенном списке есть и статья "Фетиш юнит-тестов" Мартина Сустрика.

Я считаю эту статью вредной, и постараюсь показать – чем именно. Кто-то из читателей согласен с утверждениями Мартина. Возможно, кто-то из них не смотрел с позиции QA на эти утверждения. Именно для них я изложил свою точку зрения.

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments16

Форматирование текста на C++ старым и новым способом

Level of difficultyMedium
Reading time8 min
Views14K

Форматирование текста на C++ можно реализовать несколькими способами:

  • потоками ввода-вывода. В частности, через std::stringstream с помощью потоковых операций (таких как operator <<);
  • функциями printf, в частности sprintf;
  • с помощью библиотеки форматирования C++20, в частности std::format / std::format_to;
  • с помощью сторонней библиотеки, в частности {fmt} (основа новой стандартной библиотеки форматирования).

Первые два варианта представляют старые способы. Библиотека форматирования, очевидно, является новым. Но какой из них лучше в плане производительности? Это я и решил выяснить.
Читать дальше →
Total votes 42: ↑39 and ↓3+52
Comments17

Особенности проксирования через CDN/Websocket/gRPC для обхода блокировок

Level of difficultyMedium
Reading time15 min
Views63K

Эта статья — заключительная (наконец‑то!) из моего огромного цикла про недетектируемые инструменты для обхода блокировок. В предыдущих публикациях я упоминал, что клиенты и серверы XRay (форк V2Ray) и Sing‑box при использовании протоколов VLESS/VMess/Trojan могут работать через веб‑сокеты и gRPC, что позволяет подключаться к даже заблокированным Роскомнадзором прокси‑серверам через CDN (content delivery или content distribution network) и дает дополнительные преимущества. Сегодня мы поговорим об этом поподробнее.

Читать далее
Total votes 62: ↑60 and ↓2+76
Comments148

VimPorn

Reading time6 min
Views57K

На reddit большое комьюнити, которое посвящено vim: neovim, vim, vimplugins, vimporn. И чтобы не пропускать какие-то интересные вещи, которые случаются в мире vim, я накидал bash-скрипт. Скрипт выводит топ-5 лучших постов за год по каждому сабредиту. В статье будет сам скрипт, а также я своими словами расскажу о каждом посте, который попал в топ.

Читать далее, под катом много картинок ...
Total votes 37: ↑35 and ↓2+42
Comments71

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity