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
| import React, { useCallback, useEffect, useMemo, useState } from "react"; | |
| export const secondsToMMSS = (seconds) => { | |
| // Ensure the input is a non-negative number | |
| if (isNaN(seconds) || seconds < 0) { | |
| return "00:00"; | |
| } | |
| // Calculate minutes and remaining seconds | |
| const minutes = Math.floor(seconds / 60); | |
| const remainingSeconds = Math.floor(seconds % 60); |
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;} |