How to interface with a Stream Deck device.
The device uses the HID protocol to communicate with its software.
# This is an example of how to use xtables / xt_geoip to block requests | |
# based on their source/destination country. | |
# | |
# It can be computationally expensive to have tons of iptables rules. | |
# According to the bottom of the following page, this xt_geoip is probably | |
# about as efficient as can be for doing this kind of thing: | |
# http://xtables-addons.sourceforge.net/geoip.php | |
# Install packages | |
apt-get install xtables-addons-common libtext-csv-xs-perl unzip |
How to interface with a Ajazz Stream Deck device.
The device uses the HID protocol to communicate with its software.
The number of keys can be determined from the HID device descriptors. There is currently no known provision to determine their layout or size. The buttons on the current version of the device (AKP153)
# Source: https://www.droidwin.com/remove-bloatware-debloat-oneplus-10-pro-no-root/ | |
# | |
pm uninstall -k --user 0 com.android.apps.tag # Stock android fluff | |
pm uninstall -k --user 0 com.android.bips # Stock android fluff | |
pm uninstall -k --user 0 com.android.bluetoothmidiservice # Stock android fluff | |
pm uninstall -k --user 0 com.android.bookmarkprovider # Stock android fluff | |
pm uninstall -k --user 0 com.android.calllogbackup # Stock android fluff | |
pm uninstall -k --user 0 com.android.cellbroadcastreceiver.overlay.common # Stock android fluff | |
pm uninstall -k --user 0 com.android.cts.priv.ctsshim # Stock android fluff | |
pm uninstall -k --user 0 com.android.dreams.basic # Stock android AOD provider. This is needed for AOD to work fully |
const isUseEffect = (node) => node.callee.name === 'useEffect'; | |
const argumentIsArrowFunction = (node) => node.arguments[0].type === 'ArrowFunctionExpression'; | |
const effectBodyIsSingleFunction = (node) => { | |
const { body } = node.arguments[0]; | |
// It's a single unwrapped function call: | |
// `useEffect(() => theNameOfAFunction(), []);` | |
if (body.type === 'CallExpression') { |