magick convert ./old.pdf -brightness-contrast 20X10 -contrast-stretch 1% -compress JPEG -quality 80 ./new.pdf
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)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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'); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
obj = { | |
a: 123, | |
get ab() {return 456}, | |
get abc() {return this.a}, | |
} | |
obj.a | |
obj["a"+"b"] | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ | |
"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" | |
] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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() // ✅ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
repositoryOwner(login: "bendtherules") { | |
repositories(first: 100, isFork: true) { | |
nodes { | |
id | |
nameWithOwner | |
refs(refPrefix: "refs/heads/", last: 100) { | |
edges { | |
node { | |
branchName: name |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*{background:#5d3a3a;margin:0;}p{width:200px;height:200px;background:#b5e0ba;} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; |
NewerOlder