Skip to content

Instantly share code, notes, and snippets.

View 1d10t's full-sized avatar
❄️
winter in russian midland is longer than 1/2 of year

Serg 1d10t

❄️
winter in russian midland is longer than 1/2 of year
View GitHub Profile
@1d10t
1d10t / tampermonkey-selected-text-tts.js
Last active October 11, 2025 08:38
Text-to-Speech для выделенного текста (с чанками)
// ==UserScript==
// @name Text-to-Speech для выделенного текста (с чанками)
// @namespace http://tampermonkey.net/
// @version 1.1
// @description Озвучивает выделенный текст на русском языке, разбивая его на чанки не более 1500 символов
// @author You
// @match *://*/*
// @grant none
// ==/UserScript==
@1d10t
1d10t / calculations.txt
Last active August 21, 2025 11:21
bicycle spoke length calculator
Front wheel
Lacing pattern 3 cross
Spokes 32
ERD 606
Axle Width 100
Left/Right Flange Diameter 58
Lock Nut to left flange 27.5
Left Flange to center 22.5
Right Flange to center 35.5
Lock nut to right flange 14.5
@1d10t
1d10t / 90-proxy-autoset
Last active June 24, 2025 10:39
ubuntu network manager dispatcher proxy auto setup
#!/bin/bash
# /etc/NetworkManager/dispatcher.d/90-proxy-autoset
IFACE="$1"
STATUS="$2"
USER_NAME="serg"
USER_ID=$(id -u "$USER_NAME")
run_as_user() {
sudo -u "$USER_NAME" \
# download google keyboards https://4pda.to/forum/index.php?showtopic=1065502&view=findpost&p=126275158
adb connect 192.168.43.96:5555
adb shell pm disable-user com.android.packageinstaller
adb install Google+Gboard.2.0.10.apk
adb shell ime list -a -s
adb shell ime enable com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
adb shell ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
adb shell ime disable com.iqqi.watch_imeservice/com.iqqi.watch_inputmethod.IMEService
adb install Google+Gboard.2.5.07.apk
adb shell pm enable com.android.packageinstaller
# accelerometer_rotation: auto-rotation, 0 disable, 1 enable
# user_rotation: actual rotation, clockwise, 0 0°, 1 90°, 2 180°, 3 270°
adb connect 192.168.43.96:5555
adb shell settings put system accelerometer_rotation 0
adb shell settings put system user_rotation 0
@1d10t
1d10t / LetsEncrypt+certbot+UFW+postfix+dovecot.md
Created January 11, 2023 17:59 — forked from mrothNET/LetsEncrypt+certbot+UFW+postfix+dovecot.md
Let's Encrypt / Dovecot / Postfix / UFW firewall / Certbot

Let's Encrypt / Dovecot / Postfix / UFW firewall / Certbot

This tutorial describes how to install TLS to a mail server consisting of Postfix and/or Dovecot by using Let's Encrypt certificates with automatic renewing and firewall management.

The system used for this tutorial was:

$ lsb_release -idrc
Distributor ID: Ubuntu
String.prototype.htmldecode = function(){
if(!window.htmldecode_textarea) window.htmldecode_textarea = document.createElement('textarea');
window.htmldecode_textarea.innerHTML = this;
return window.htmldecode_textarea.value;
}
function ubtoa(str){
return window.btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
// Every monday
// https://www.linkedin.com/search/results/content/?authorIndustry=%5B%22104%22%2C%22137%22%5D&facetSortBy=date_posted&keywords=php%20remote&origin=SORT_RESULTS&recency=past-week
[].map.call(document.querySelectorAll('button[data-control-name="commentary_expand"]'), e => e.click())
var textNode, textNodes = document.evaluate( '//div[contains(@class,"feed-shared-text-view")]', document, null, XPathResult.ANY_TYPE, null );
while (textNode = textNodes.iterateNext()) {
let text = textNode.textContent, m = text.match(/\b[a-z\d][a-z\d._-]*@[a-z\d._-]+[a-z\d]\b/i);
if(!m) continue;
var
(_ => {
const scrollable = document.querySelector('c-wiz[data-ogpc]');
setInterval(_ => {
let scrollby = 0;
[].map.call(document.querySelectorAll('div[role="presentation"]'), e => {
scrollby += e.offsetHeight;
const dd = {};
@1d10t
1d10t / insta-follow.js
Last active August 22, 2019 12:15
follow instagam list
const tout = 10*1000;
let skip = 0, lbsc = 0;
setInterval(_ => {
if(skip){ skip--; lbsc = 0; return; }
const bs = [].filter.call(document.querySelectorAll('div[role="dialog"] button'), e => e.innerText=='Follow'), bsc = bs.length;
if(bsc){
if(bsc == lbsc){ skip = Math.round(5*60*1000/tout); return; }
bs[Math.floor(bsc*Math.random())].click();
lbsc = bsc;
}