We developed very fast scientific graphics using matplotlib and python >>source at my x.com/twitter
Confusion with Reddit
I've had a Reddit account since 2016. I only read and posted in the Python forum (1 million subscribers!). Yesterday, I unexpectedly received a shadow ban. This means that my comments and posts are invisible to others. Essentially, it's read-only.
I created several new accounts from different IPs and devices. It turned out that email verification is no longer required. This process takes 15 seconds. On some accounts, I verified the email, but it didn't help. Here's an example of a newly created account without email verification, and it's still active because nothing has been done on it: https://www.reddit.com/user/No-Half8140/
If you have the ability to receive a verification code via email like [email protected], you'll automatically get a free PRO version of the account, which includes advanced statistics and other perks. However, the account remains in a "pre-ban" state.
Upon testing, I found that all new accounts are in this "pre-ban" state. This means you can change your avatar, read, vote, and the accounts are visible when logged out or from a private browser window.
However, attempting to post on your own wall (which automatically appears upon registration), write any comment in any discussion thread (even in /askReddit and /NewToReddit), create a post in any group, invite someone as a moderator to your wall, or follow someone without karma results in an instant shadow ban. The account becomes invisible from a private window and logged-out devices, the avatar turns red, and it cannot be changed.
The symptoms are the same for all IPs and languages (English, Polish, Russian). ChatGPT says that this is how it is now, and a ban is very likely. However, I see some activity in groups about Moscow and St. Petersburg, which means people somehow manage to pass this test... But how?
AI Reddit is going wild!

Obsidian vault
Собрал своё платное хранилище для Obsidian и записал к нему объёмную видеоинструкцию (≈12 часов).
Хранилище объединяет в себе:
Базу знаний
Проектную систему
Систему управления делами
Систему контактов
Периодические заметки
Видеоинструкция направлена то, чтобы наглядно объяснить работу основных механик хранилища, а также чтобы раскрыть разные аспекты рабочего процесса.
Работа с системой будет рассмотрена в следующих контекстах (возможно позже я рассмотрю другие контексты):
Абитуриент/первокурсник биоинформатик (чтение и заметки)
Начинающий программист, готовящийся к стажировке и программист в корпорации (проектная система)
Инди-программист (структура хранилища)
Сравнительная таблица моих материалов на Habr и видеоинструкции:

Можно сказать, что видео будет расширять и конкретизировать материал, который был написан мною на Habr. Также хочу отметить, что в видеоинструкции сделан оооочень большой упор на процесс чтения и добычу заметок.
Более подробное описание хранилища. Можете также посмотреть открытое обсуждение данного хранилища и инструкции.
EMACS 30.1 вышел 24 февраля и вчера добрался до Андроид. Двумя способами - как пакет Termux и как загрузка с F-Droid. Не с play Store наверно из-за JIT.
Это же великий EMACS, так что это точно инфоповод к посту.
Но есть вопрос к знатокам - зачем EMACS на Андроид права на ВСЁ? Есть предположение: если EMACS есть операционная система по случаю редактирующая текст, то тогда ему нужны права на всё, что только может вознамериться делать любое его расширение, то есть просто на всё, но от этого менее страшно не становится.
Права с F-Droid:
android.permission.ACCEPT_HANDOVER
Allows the app to continue a call which was started in another app.
android.permission.ACCESS_ADSERVICES_AD_ID
android.permission.ACCESS_ADSERVICES_ATTRIBUTION
android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE
android.permission.ACCESS_ADSERVICES_TOPICS
access location in the background
This app can access location at any time, even while the app is not in use.
access approximate location only in the foreground
This app can get your approximate location from location services while the app is in use. Location services for your device must be turned on for the app to get location.
access precise location only in the foreground
This app can get your precise location from location services while the app is in use. Location services for your device must be turned on for the app to get location. This may increase battery usage.
access extra location provider commands
Allows the app to access extra location provider commands. This may allow the app to interfere with the operation of the GPS or other location sources.
read locations from your media collection
Allows the app to read locations from your media collection.
view network connections
Allows the app to view information about network connections such as which networks exist and are connected.
android.permission.ACCESS_NOTIFICATIONS
access Do Not Disturb
Allows the app to read and write Do Not Disturb configuration.
view Wi-Fi connections
Allows the app to view information about Wi-Fi networking, such as whether Wi-Fi is enabled and name of connected Wi-Fi devices.
recognize physical activity
This app can recognize your physical activity.
answer phone calls
Allows the app to answer an incoming phone call.
android.permission.AUTHENTICATE_ACCOUNTS
pair with Bluetooth devices
Allows the app to view the configuration of the Bluetooth on the phone, and to make and accept connections with paired devices.
access Bluetooth settings
Allows the app to configure the local Bluetooth phone, and to discover and pair with remote devices.
advertise to nearby Bluetooth devices
Allows the app to advertise to nearby Bluetooth devices
connect to paired Bluetooth devices
Allows the app to connect to paired Bluetooth devices
discover and pair nearby Bluetooth devices
Allows the app to discover and pair nearby Bluetooth devices
access body sensors (like heart rate monitors)
Allows the app to access data from sensors that monitor your physical condition, such as your heart rate.
Access body sensor data, like heart rate, while in the background
Allows the app to access body sensor data, such as heart rate, temperature, and blood oxygen percentage, while the app is in the background.
send sticky broadcast
Allows the app to send sticky broadcasts, which remain after the broadcast ends. Excessive use may make the phone slow or unstable by causing it to use too much memory.
directly call phone numbers
Allows the app to call phone numbers without your intervention. This may result in unexpected charges or calls. Note that this doesn't allow the app to call emergency numbers. Malicious apps may cost you money by making calls without your confirmation.
take pictures and videos
This app can take pictures and record videos using the camera while the app is in use.
android.permission.CAPTURE_CONSENTLESS_BUGREPORT_ON_USERDEBUG_BUILD
change network connectivity
Allows the app to change the state of network connectivity.
И ещё много-много всего что не лезет в формат поста.
Fantastic ! Look at >> source code (or take it from my telegram) of the Ping-Pong game prototype on MatPlotLib (scientific graphics on python) with high FPS=40.
Previously, in my >>article on Habr, the application of PyGame for graph plotting was reviewed, and now, conversely, we're creating a game on a system designed for scientific graph plotting. In the previous version, attempting to output text with high FPS resulted in significant "lag"; in the current version, this issue is resolved.
In the code for rendering all game elements, only MatPlotLib objects are used: tennis rackets are represented as bar charts, the ball as a scatter plot, the game field itself as a figure object from MatPlotLib, and text is also output using built-in MatPlotLib functions. For animation, the built-in MatPlotLib Animation object + update() is used. FPS=40 (forty!).
P.S. The yellow bar chart represents the distribution of Y-axis coordinates where the racket hits the ball. It updates with every hit of the racket on the ball.
Python: Using PyGame for real-time visualization of audio signals with a 44100 Hz sampling rate
PyGame is a popular library for developing 2D games in Python. The initial version of PyGame was presented by Pete Shinners in October 2000, and since then, the library has gradually gained popularity due to its ease of use, good documentation, and active community. Initially designed to work with early versions of Python (including Python 2), PyGame was based on the SDL 1 library. SDL is a cross-platform library in C that provides low-level access to audio devices, keyboard, mouse, and graphical functions via OpenGL, DirectX, etc.
The current versions 2.x fully support Python 3 (from 3.7 and above) and include a range of updates, such as improved OpenGL support, hardware acceleration, and the ability to work with vertical synchronization on monitors (VSync).
This article discusses an unconventional application of PyGame - the rapid display of graphs, for example, data streams with a 44100 Hz sampling rate from a sound card, which may be necessary for visualizing audio signals.
For such a task, the following functions and capabilities of PyGame are well-suited:
pygame.display.flip() - quickly updates the screen content after changes
#have been made.
#
Using pygame.time.Clock() - allows you to control FPS,
which enables the system to request updates
at up to 60 frames per second or more, which is
important for displaying signals in real-time.
#
The new vsync flag (for example, passed to set_mode with
the pygame.RESIZABLE or pygame.OPENGL parameter)
can be used to synchronize screen updates with
the display's vertical refresh rate.
The main loop (typical in PyGame):
running = True
while running:
# Обработка событий
# Генерация шума и обновление данных графика
# Очистка экрана
# Отрисовка сетки и графика
# Подсчет и отображение FPS
# Обновление экрана
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
Based on the heated discussions and criticism regarding the slow code and poor FPS in the test for displaying the sin()+noise graph using Python Matplotlib, improvements were made, and AI was employed to refine the code. The original article and code have undergone the following enhancements:
Abandoning the slow text output.
Utilizing FuncAnimation instead of a simple loop.
Implementing the magic command to connect the PyQT backend
As a result, the FPS increased from 12 to 100. For more details,
please refer to the original article. https://habr.com/ru/articles/878002/
Заголовок: Я переписал react-query | Легковесный хук для асинхронного получения данных и кэширования в React
Привет всем!
Я разработал легковесный React-хук, аналогичный React Query, с основными функциями: получение данных, кэширование, повторные попытки и др. Он компактнее и проще в настройке. Полный код доступен на GitHub и в npm как api-refetch
.
Зачем создавать собственный хук?
Легковесность: React Query и SWR мощные, но крупные. Мой хук идеален, когда важен размер пакета, особенно для зависимостей вроде Intlayer.
Настройка и оптимизация: Возможность хранения данных в локальном хранилище и управления параллельными запросами. Копируя или клонируя код, можно удалить ненужные функции, уменьшив размер бандла и повысив производительность.
Без провайдера: Избегаю использования Context Provider для глобального доступа, предлагая версию на базе Zustand.
Учебное упражнение: Понимание внутренностей кэширования и управления состоянием.
Создание собственного хука позволило сосредоточиться на нужных функциях, сохраняя библиотеку маленькой и понятной.
Функции
Получение данных и управление состоянием: Загрузка, ошибки, успешные данные.
Кэширование и хранение: Через React или Zustand, поддержка локального хранилища.
Повторные попытки и валидация: Настраиваемые лимиты и интервалы.
Активация и инвалидизация: Управление запросами в зависимости от других данных.
Параллельные запросы: Предотвращение дублирования запросов при монтировании нескольких компонентов.
Пример использования
Установка
Клонируйте репозиторий или установите через npm:
npm install api-refetch
Быстрый пример
import { AsyncStateProvider, useAsync } from "api-refetch";
function App() {
return (
<AsyncStateProvider>
<UserDetails />
</AsyncStateProvider>
);
}
const fetchUserData = async () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ name: "John Doe" });
}, 1000);
});
};
const UserDetails = () => {
const { isLoading, data, error, revalidate } = useAsync(
"userDetails",
fetchUserData,
{
enable: true,
cache: true,
store: true,
retryLimit: 3,
retryTime: 10000,
autoFetch: true,
revalidation: true,
revalidateTime: 300000,
onSuccess: (data) => console.log("Данные получены:", data),
onError: (error) => console.error("Ошибка:", error),
}
);
if (isLoading) return <div>Загрузка...</div>;
if (error) return <div>Ошибка: {error}</div>;
return (
<div>
<h1>{data?.name}</h1>
<button onClick={revalidate}>Обновить</button>
</div>
);
};
Попробуйте api-refetch, сообщите об ошибках или внесите вклад. Обратная связь приветствуется!
GitHub: api-refetch
Счастливого кодинга!
Как разводят венчурных капиталистов на бабки по поводу процессоров
Когда в СМИ публикуют статью про новый революционный процессор, но в статье нет бенчмарок, тут все понятно: статью можно игнорировать, это просто мусорный набор символов на экране. А если бенчмарки есть? Тут тоже не все так просто. Лет 10 назад был стартап, который показывал венчурным капиталистам слайды, что их революционно гибкий процессор (который динамически выделял потоки) по тактам в 3 раза быстрее чем старшее ядро ARM. Измерение было с помощью симуляции на уровне регистровых передач и в качестве бенчмарки была то ли Dhrystone, то ли CoreMark/MHz. Но они "забыли" указать на слайдах, что если синтезировать их процессорное ядро c библиотекой ASIC на том же техпроцессе, на котором и ядро ARM, против которого они конкурируют - то статический анализ тайминга покажет, что максимальная тактовая частота, которую они могут использовать - втрое меньше, чем у ARM. То есть втрое лучше по тактам умножаем на втрое хуже по частоте = никакого улучшения. Об этом факте я случайно услышал на парти - человек сказал цифру и я сложил два плюс два, то бишь умножил 3 на 1/3.
Также замечу что развод на бабки VC ничуть не менее аморален, чем развод на бабки пенсионеров по телефону, так как в фонды VC вкладывают в том числе и частные пенсионные фонды.
Я сохраняю историческое наследние на Wikimedia Commons, например газеты 19 века, но их очень много - буду рад если вы присоединитесь, научу как там делать.
Вот например страница одной старой газеты https://commons.wikimedia.org/wiki/Category:Minskie_eparhialnye_vedomosti
Исторические данные важно сохранять - многое мы уже потеряли. Где-то библиотеки выкладывают на своих сайтиках отсканированное, где-то генеалоги за свои деньги заказывают сканы и потом публикуют в Google Drive, что-то берется с archive.org. Может у вас дома есть газеты 19 века?
Например, одна из текущих задач - Могилевские Губернские Ведомости. В идеале их нужно не только загрузить, с правильным проставлением категорий по годам, но и вынуть тексты для другого сервиса ru.wikisource.org
Авторское право для газет 19 века уже истекло, так что это все легально.

Пишите кто тоже хочет загружать на Коммонс и спасать историю, делать её доступнее для анализа людьми и машинами.
Only 13 percent of all classic games released between 1960 and 2009 are currently commercially available, according to the "Survey of the Video Game Reissue Market in the United States," published last summer by Phil Salvadorb for the Video Game History Foundation and the Software Preservation Network
From https://blog.archive.org/wp-content/uploads/2024/10/Vanishing-Culture-2024.pdf
How to add a card to Apple Wallet and Google Wallet 📱 in React Native?
We’ve created a library that provides integration with both Apple Wallet on iOS and Google Wallet on Android. It allows you to add, remove, and check for existing passes on iOS, and add passes to Google Wallet on Android.
To download the library, go here
ls аудио с битрейдом и сортировкой, на баше, используя ffprobe
while read i; do echo "$(ffprobe -i "$i" 2>&1 | egrep -o 'bitrate: [0-9]{1,3} .{4}' | cut -d' ' -f2-3)" "$i"; done < <(find . -type f -printf '%P\n' \( -iname \*.ogg -o -iname \*.mp3 \)) | sort -n -k1,1
Пример того что получаем:
128 kb/s aaa.mp3
128 kb/s bbb.mp3
128 kb/s ccc.mp3
256 kb/s xxx.mp3
256 kb/s yyy.mp3
256 kb/s zzz.mp3
Расширил и опубликовал https://gitlab.com/vitaly-zdanevich/ffprobe-wrapper-lister-for-mp3

Вышел Python 3.13. Что в этом для не знакомых с Python?
Куй железо не отходя от кассы
Иными словами, Вы тут же захотите его попробовать - самое время, это стало (много) приятнее чем когда-либо.
Что делать и кто виноват
Виноват, очевидно, Гугол - запоздал с увольнениями в команде Python. А делать придётся компиляцию из сорцов - даже в AUR сейчас RC1. Как - на примере Arch в форме EndeavourOS.
Python часть системы, но он 12, поэтому 13 нужно держать отдельно. Скачав с python.org и распаковав
./configure --enable-optimizations --with-lto --enable-experimental-jit=yes --prefix=/home/andy/.python
make
Конечно, чего-то да не хватит, но об этом будет чётко сказано, поэтому и например
yay clang
yay llvm
make
Будет чётко сказано чего не получилось, за 12 такого не помню, у меня - без tkinter. Ну и ладненько. Поскольку make test придумали трусы,
make install
~/.python/bin/python3 -m venv Python13Env
cd Python13Env
python
И наслаждаемся новыми фишками - редактируем процедуры и выходим легко, как по мне - самое очевидное. И да, на первом же (дурацком) тесте - на 10% быстрее.
Service to create a proper and minimalistic favicon set for your website
Based on Andrey Sitnik's article

British Airways столкнулась с хаосом в выдаче багажа из-за конфликта с платформой Vodafone. Путаница в багажной системе произошла сутки назад. Она была настолько серьёзной, что пассажиров отправляли на рейсы без зарегистрированного багажа, а многие до сих пор не могут получить его. При этом рейсы также отменялись, и пассажирам приходилось оставаться в аэропорту, так как им не предоставляли отель.
Авиакомпания была вынуждена перейти на ручную проверку багажа, а многие чемоданы не долетели до пунктов назначения.
Проблема возникла в терминале 5 аэропорта Хитроу. Теперь там советуют пассажирам проконсультироваться с British Airways перед поездкой в аэропорт.
ИТ-отделы British Airways и Vodafone совместно работали над решением проблемы конфликта их платформ, которая оказалась «системной».
В 2022 году рейсы авиакомпании приостанавливали из-за сбоя в приложении для планирования полётов.
Ранее в этом году British Airways объявила о плане трансформации на сумму $8,8 млрд. Так, будут обновлены веб-сайт и мобильное приложение. British Airways также пообещала, что «передовые технологические системы стоимостью в несколько миллионов фунтов, искусственный интеллект и машинное обучение помогут рейсам отправляться вовремя, что создаст 350 новых рабочих мест в Хитроу».
Bluesky предложит пользователям персонализированные «стартерпаки» друзей и лент. В соцсети появилась вкладка «Starter Packs», где можно создавать такие пакеты в неограниченном количестве.
Это можно делать вручную либо с использованием алгоритма. Он предложит предварительно заполненный стартовый пакет, который затем можно отредактировать. Всего можно порекомендовать до 50 человек и до 3 пользовательских каналов. Те, кого добавили в пакет, не могут удалиться оттуда. Об этом придётся просить создателя в личных сообщениях.

Задав имя и описание стартерпака, им можно будет делиться по ссылке и QR-коду как внутри Bluesky, так и в других приложениях.
Опция доступна бесплатно всем пользователям соцсети.
Artery AT32F407 и scanf()
Речь пойдет об отладке AT-START-F407 V1.3. В составе платы находится программатор/отладчик AT-Link-EZ V1.2, который подключается по USB к ПК, где он виден как COM порт.
Его же можно использовать для целей отладки, а именно выводить информацию на ПК с помощью printf(). На эту тему а Artery есть AN0015_Printf_Debug_Demo, описанные там переопределения уже содержатся в файле at32f403a_407_board.c:
FILE __stdout;
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
PUTCHAR_PROTOTYPE
{
while(usart_flag_get(PRINT_UART, USART_TDBE_FLAG) == RESET);
usart_data_transmit(PRINT_UART, (uint16_t)ch);
while(usart_flag_get(PRINT_UART, USART_TDC_FLAG) == RESET);
return ch;
}
Все что нужно сделать, это добавить в код функцию инициализации uart_print_init(115200), где 115200 скорость COM порта.
Аналогичным образом можно с консоли передавать данные в МК с помощью функции scanf(). (На эту тему я не нашел AN). Добавим в файл at32f403a_407_board.c:
FILE __stdin;
#define GETCHAR_PROTOTYPE int fgetc(FILE * f)
GETCHAR_PROTOTYPE
{
uint8_t cha = 0;
usart_flag_clear(PRINT_UART, USART_ROERR_FLAG); // Clear Overrun flag
while(usart_flag_get(PRINT_UART, USART_RDBF_FLAG) == RESET);
cha = usart_data_receive(PRINT_UART);
usart_data_transmit(PRINT_UART, (uint16_t)cha); // Echo
return cha;
}
Все работает? Нет. Надо еще вызвать функцию
usart_receiver_enable(PRINT_UART, TRUE);
scanf("%d", &k);
k = 2*k;
printf(" \n\r You entered = %d", k);
И, теперь все работает.