magick convert -density 300 ./old.pdf -brightness-contrast 20X10 -contrast-stretch 1% -compress JPEG -quality 80 ./new.pdf
// For darkening / coloring light images - use -gamma .7
magick convert -density 300 ./old.pdf -brightness-contrast 20X10 -contrast-stretch 1% -compress JPEG -quality 80 ./new.pdf
// For darkening / coloring light images - use -gamma .7
This is bluetooth (BLE) Gatt protocol for Lenovo HS11 Smart weight scale. It uses Chipsea CST34M97 chip, similar to some Huawei scales.
Main service = 0000fff0-0000-1000-8000-00805f9b34fb
Send command Characteristic = 0000fff1-0000-1000-8000-00805f9b34fb
Receive data Characteristic = 0000fff4-0000-1000-8000-00805f9b34fb
GFit by FutureGo is an android/ios app to read and control supported BLE treadmills - usually made in China but white-labelled and sold under different names. This is an effort to document the Bluetooth protocol for it, only for personal use.
Sold under brands - Fitkit, Cultsport, Voit.
Not in scope - Elliptical treadmill, Rowers (also supported by Gfit app, but not documented here)
// Reference - https://github.com/ludwich66/Bluetooth-DMM/wiki/Protocol-all-Variants | |
// From my multimeter - Baba AD-900 (Generic name - ZOYI ZT-300AB) | |
// rawString = '1B-84-70-A1-49-DA-B8-7B-66-DA-3A' // few mv //mv enabled both mV and V flag | |
rawString = '1B-84-70-D1-3D-2B-75-7F-66-FA-3A'; // 3.764 V // enabled V flag | |
function zeroPad(num, places) { | |
return String(num).padStart(places, '0'); | |
} |
obj = { | |
a: 123, | |
get ab() {return 456}, | |
get abc() {return this.a}, | |
} | |
obj.a | |
obj["a"+"b"] | |
[ | |
"sec-numeric-types-bigint-unsighedRightShift", | |
"sec-allocatedtypedarray", | |
"sec-typedarray-species-create", | |
"sec-running-execution-context", | |
"sec-evaluate-expression-key-property-access", | |
"sec-evaluate-identifier-key-property-access" | |
] |
// IsPropertyReference? | |
// 1. Different notations for accessing a property name | |
foo.bar() // ✅ | |
foo["any string here"]() // ✅ | |
// 2 Property name can also be a symbol - inbuilt or custom | |
someArray[Symbol.iterator].toString() // ✅ |
{ | |
repositoryOwner(login: "bendtherules") { | |
repositories(first: 100, isFork: true) { | |
nodes { | |
id | |
nameWithOwner | |
refs(refPrefix: "refs/heads/", last: 100) { | |
edges { | |
node { | |
branchName: name |
*{background:#5d3a3a;margin:0;}p{width:200px;height:200px;background:#b5e0ba;} |
// change to slow down get order status | |
module.exports = { | |
summary: 'slow down placing order (https)', | |
*beforeDealHttpsRequest(requestDetail) { | |
return true; | |
}, | |
*beforeSendRequest(requestDetail) { | |
const newRequestOptions = requestDetail.requestOptions; | |
// set rejectUnauthorized as false | |
newRequestOptions.rejectUnauthorized = false; |