psql example_db psql (12.3) Type "help" for help. example_db=# example_db=# COPY example_db-# (select * from users) example_db-# TO '/Users/tracehelms/code/examples/users.csv' example_db-# WITH (format csv, header true); COPY 4 example_db=# \q ~/code/examples/ ❯ ls users.csv
Особенность старых сборок на Android (minifyEnabled)
Ошибка была следующая:
Caused by: java.lang.ClassNotFoundException: Didn’t find class «ru.mobnius.cic.data.manager.MobniusApplication» on path: DexPathList[[zip file «/data/app/lK_FQAwaeUC-enKKCgnxbA==/ru.mobnius.cic-v5Ibak19JiuKNfzV9BT3AA==/base.apk»],nativeLibraryDirectories=[/data/app/lK_FQAwaeUC-enKKCgnxbA==/ru.mobnius.cic-v5Ibak19JiuKNfzV9BT3AA==/lib/x86_64, /system/lib64, /system_ext/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:76)
at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:51)
at android.app.Instrumentation.newApplication(Instrumentation.java:1177)
at android.app.LoadedApk.makeApplication(LoadedApk.java:1356)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6686)
at android.app.ActivityThread.access$1500(ActivityThread.java:247)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2053)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lru/mobnius/core/data/app/Application;
at java.lang.VMClassLoader.findLoadedClass(Native Method)
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)
at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
… 15 more
Caused by: java.lang.ClassNotFoundException: ru.mobnius.core.data.app.Application
… 18 more
pgcodekeeper cli
pgcodekeeper cli — эта утилита по поиску разницы между одной БД PostgreSQL и другой БД PostgreSQL. Позволяет выполнять операции сравнения через terminal.
Для начала необходимо установить Java SDK версии 17+ для вашей платформы.
Переходим на сайт GitHub и скачиваем последний релиз. На момент написания это 10.8.0
После скачивания файла pgCodeKeeper-cli-10.8.0.zip распаковываем результат в /opt/pgcodekeeper-cli (предварительно создаём её через mkdir -p pgcodekeeper-cli).

Ошибки VERR_VMX_IN_VMX_ROOT_MODE в VirtualBox
В моём случаи эта была ошибка из параллельной работы VirtualBox и Docker Desktop
Если проблема в VirtualBox, то
sudo rmmod kvm_intel sudo rmmod kvm
Если не запускается Docker Desktop, то
sudo modprobe kvm-intel
PostgreSQL: Performance of function call degrades after calling 5 calls in a row
Суть проблемы в том, что после того как функция будет создана, первые пять раз запрос выполняется быстро, но потом производительность резко падает.
Ниже описано решение.
I have this plpgsql function (running PG 14.5 on UBUNTU 18.04 with 8GB Ram) which returns 200 rows just fine:
db=# explain (analyze,buffers) Select * from f_client_getlistasshown('{"limit":"200","startdate":"2014-01-01","enddate":"2100-01-01","showRequiresActionFromTaxadvisor":false}'); -------------------------------------------------------------------------------------------------------------------------------- Function Scan on f_client_getlistasshown (cost=0.25..10.25 rows=1000 width=400) (actual time=69.515..69.529 rows=200 loops=1) Buffers: shared hit=8939 dirtied=1 Planning Time: 0.066 ms Execution Time: 70.282 ms (4 rows)Читать далее «PostgreSQL: Performance of function call degrades after calling 5 calls in a row»
PostgreSQL: автоматический план
# postgresql.conf session_preload_libraries = 'auto_explain' auto_explain.log_min_duration = '3s'
Или
postgres=# LOAD 'auto_explain'; postgres=# SET auto_explain.log_min_duration = 0; postgres=# SET auto_explain.log_analyze = true; postgres=# SELECT count(*) FROM pg_class, pg_index WHERE oid = indrelid AND indisunique;
В итоге в /var/log/postgresql будет план запроса
Обслуживание БД postgres через terminal
Реиндекс:
psql -U postgres -d "database_name" REINDEX DATABASE database_name;
Особенность работы Datalens в PostgreSQL. часть 2
Иногда при попытке запуска Datalens могут возникать странные проблемы отсутствия тех или иных объектов в БД (хотя они там есть).
Ошибка может быть связана в особенности PostgreSQL, когда по умолчанию схема public настроена, как «схема по умолчанию для вызова объектов».
Читать далее «Особенность работы Datalens в PostgreSQL. часть 2»Beacon
- https://github.com/vhiribarren/beacon-simulator-android?tab=readme-ov-file — Симулятор маяка
- https://habr.com/ru/articles/278689/ — iBeacon. Мифы и реальность
- https://vc.ru/services/1098953-ispolzovanie-tehnologii-ble-pri-rabote-s-beacon-mayachkom-v-react-native — Использование технологии BLE при работе с beacon-маячком в React Native
- https://stackoverflow.com/questions/58004370/different-interval-time-between-ble-device-advertising-and-the-callback-from-sta — Разный интервал времени между рекламой устройства BLE и обратным вызовом из startScan телефона Android
- https://habr.com/ru/companies/navigine/articles/269735/ — Как работают маяки: Физика технологии iBeacon
- https://habr.com/ru/articles/245325/ — Навигация в помещениях с iBeacon и ИНС
- https://www.dusuniot.com/ru/blog/angle-of-arrival-bluetooth-gateways/ — Как технология Bluetooth с определением угла прихода (AoA) модернизирует мир
- https://moitvivt.ru/ru/journal/pdf?id=821 — Позиционирование в трехмерном пространстве внутри помещений по данным Bluetooth-маяков
Термины:
- Magor и Minor — это идентификаторы пространства, например здание и помещение.
- RSSI — мощность сигнала (например на расстоянии 1 метр)
- PPS — количество пакетов в секунду (сканирование не менее 30 секунд)
Для расчета расстояние между BLE устройством и маячком на основе значения RSSI используем данную формулу:где:

d — расстояние до устройства (маячка),
TX Power — мощность сигнала, измеренная на стандартном расстоянии (обычно 1 метр) от маячка
RSSI — мощность сигнала,
n — коэффициент затухания сигнала (environmental factor), отражающий потери сигнала в среде; типичные значения находятся в диапазоне от 2 до 4.
Эта формула позволяет оценить расстояние между двумя устройствами, используя логарифмическую зависимость изменения мощности сигнала от расстояния.
Значение коэффициента затухания сигнала n зависит от конкретных условий окружающей среды, в которой происходит передача сигнала.
Открытое пространство без препятствий: Значениеnоколо 2. Это условие предполагает минимальное затухание сигнала, когда между устройствами нет значительных препятствий, и сигнал может распространяться прямолинейно.
Внутри помещений с препятствиями: Значениеnможет варьироваться от 2.5 до 3.5 или даже выше. В помещениях сигнал может отражаться от стен, потолков и других объектов, что увеличивает затухание. Более высокие значенияnиспользуются для учета этого дополнительного затухания.
Сложные условия с множеством препятствий: В помещении с высокой плотностью препятствий, таких как склады, производственные помещения или городские условия с множеством отражающих поверхностей, значение n может быть установлено в диапазоне от 4 до 5. Эти условия требуют более высокого коэффициента затухания для компенсации значительных потерь сигнала.
Важно понимать, что определение наиболее подходящего значения n часто требует эмпирического подхода. Это означает проведение тестов в целевой среде для измерения реального распределения сигнала и адаптации коэффициента затухания для достижения наилучшей точности в оценке расстояния.
Интеграция Android Wear OS c мобильным устройством на Android
Задача: создать прототип приложения, которое позволяло бы получать частоту сердцебиения с часов на Wear OS и передавать эти данные на смартфон под управлением Android.
Подготовительные работы:
- Создать эмулятор с предустановленными Google Play сервисами
- Установить на эмулятор приложение из Google Play Wear OS (и с не официальных источников https://apkpure.com/wear-os-by-google-smartwatch/com.google.android.wearable.app/download)
- Создать эмулятор для Wear OS (у меня в примере использовался API 30)
- Выполнить сопряжение, используя следующую статью https://developer.android.com/training/wearables/get-started/connect-phone
Результат: будут созданы два приложения, один для часов, другой для смартфона и при этом из package name должен быть одинаковым. А судя из статьи https://stackoverflow.com/questions/48921165/syncing-data-items-between-mobile-device-and-wear ещё и подписи.
Читать далее «Интеграция Android Wear OS c мобильным устройством на Android»