Аудиокнижки
Нашел на Youtube кучу аудиокниг - зачем кто-то выкладывает аудио книги на ютуб, да еще без монетизации я не знаю, но факт они там есть.
А значит будем слушать, фоном очень хорошо идет.
Уведомление о наличии ВНЖ
Известно, что если вы решили уехать на постоянное место жительство в другую страну, в России необходимо об этом уведомить ФМС по месту жительства. Встал вопрос где найти нужную форму для заполнения. Поиск в сети оказался нетривиальным. В основном попадаются формы в формате Microsoft Word, а у меня на компьютере стоит Linux а ставить Microsoft Word ради одной формочки как то слишком.
Вроде бы нужная форма есть в Гаранте но как ее заполнить? Похоже в ее верстали еще в во времена Лексикона - сейчас такого софта уже не достать.
В результате потратил почти целый день на поиск формы в подходящем формате.
Если вдруг кому надо - выкладываю форму сюда.
Многие ругают немецкую бюрократию, но по сравнению с российской немецкая бюрократия гораздо проще и понятнее. По крайней мере в Берлине все формы есть на сайтах соответсвуюших министерств в формате pdf их легко найти и заполнить.
Подсветка светодиодной лентой WS2812b - продолжение
Решил спаять новое устройство на смену временной макетной плате, которая стоит на шкафу и пылиться.
Новая плата чуть менее временная, но все равно макетка:
Сказано сделано - спаял новое устройство. Однако, работать оно поначалу не захотело.
Сначала при включении светодиоды начинали хаотически мигать. Опытным путем было установлено, что эффект проявлялся только если напряжение питания модуля 3.33 вольта и ниже. Если повысить напряжение до 3.5 вольт все начало работать нормально. Видимо, пятивольтовая логика ленты WS2812b не совместима с 3.33 вольтовой логикой ESP32. По идее нужен преобразователь уровня.
В определенный момент всплыл другой глюк. Опять стали подмигивать отдельные светодиоды. Стал искать причину. Выяснилось следующее: из-за того, что новая плата у меня ESP 32 Wroom а не ESP 32 Cam при заливке прошивки я выбрал другой тип платы - ESP32 Dev Board с частотой 120MГц. Раньше прошивал с настройками для ESP32 Wroover на 80МГц и на 40МГц. Интересно, что система прошилась нормально, а вот лента стала странно подмигивать. При этом эффект уже не зависел от напряжения питания. Вернул предыдущие настройки - все стало опять хорошо.
И вот устройство стоит, лампочки мигают, казалось бы все хорошо. Однако через некоторое время устройство перестает отзываться по Wifi. При этом оне не зависает, нет - выбранный световой эффект продолжает работать - просто устройство отказывается открываться по сети. Лекарство пока не нашел, хотя есть несколько предположений, почему это происходит. В новой прошивке есть возможность отключать энергосбережение WiFi - предполагается это может решить проблему. Так ли это - посмотрим.
Upd: с вайфаем получилось интересно. Перепробовал разное - и понижать напряжение питания, и включать специальный флаг, чтобы чип не переходил в режим энергосбережения - такое есть в последней прошивке - все равно через некоторое время устройство переставало отвечать на запросы, хотя и продолжало работать - по таймеру эффекты продолжали стабильно запускаться. И вот, вчера, попробовал на роутере переключить канал с четвертого на восьмой - домашние жаловались, что у них плохо работает интернет. И вот уже второй день устройство нормально отзывается по сети. Что это такое я пока не понял, но корреляция определенно тут есть.
Upd2: переключил на роутере WiFi на другой канал, так как домашние жаловались не нестабильную связь - зависания устройства сразу прекратились.
Upd3: Написал более подробную статью про освещение светодиодной лентой, статья пока в разработке, но уже из нее можно многое почерпнуть про изготовление устройства.
Вычислить n знаков числа Пи
В Твиттере Раймонда Хеттингера был интересный твит - вычисление n знаков числа Пи - на Питоне.
Стало интересно как записать это на JavaScript. Сказано - сделано:
function pi(places) {
const extra = 8;
const pow = function(number, power) {
result = number;
for(let i = 0; i < power; i++) {
result *= number;
}
return result;
}
const one = pow(BigInt(10), places + extra)
let t = BigInt(3) * one;
let c = BigInt(3) * one;
let n = BigInt(1);
let na = BigInt(0);
let d = BigInt(0);
let da = BigInt(24);
while (t > 1) {
n = n + na;
na = na + BigInt(8);
d = d + da;
da = da + BigInt(32);
t = (t * n / d);
c += t;
}
return (c / pow(BigInt(10), extra))
}
console.log(pi(100)) //3141592653589793238462643383279502884197169399375105820974944592307816406
//2862089986280348253421170679
Занятно было посмотреть как работают вычисления в BigInt - если результатом деления двух Int в JavaScript будет Float то результатом деления двух BigInt будет тоже BigInt. При этом нельзя использовать Math.pow для возведения в степень - результатом Math.pow оказывается Number и точность вычислений заметно теряется. Поэтому пришлось делать свою функцию pow c n умножений. Как сделать лучше пока не придумал.
Как мы видим работать с int64 на Питоне значительно проще - Javascript тут значительно проигрывает.