1345 lines
No EOL
46 KiB
Markdown
1345 lines
No EOL
46 KiB
Markdown
# Extras
|
||
|
||
- debug in mobile browser
|
||
|
||
https://github.com/liriliri/eruda
|
||
|
||
Add this as bookmark and give name ‘Eruda Devtool’
|
||
|
||
```html
|
||
javascript:(function () { var script = document.createElement('script'); script.src="//cdn.jsdelivr.net/npm/eruda"; document.body.appendChild(script); script.onload = function () { eruda.init() } })();
|
||
```
|
||
|
||
|
||
[API](../../Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web%20development%2083dd4e6675f04ba782a6865a434a0598/Extras%2052e0285b6a994018ba3a68c7c33ca3de/API%200f105a3694eb438f81f8f5406a27ad13.md)
|
||
|
||
- character to ascii values and vice versa in py
|
||
|
||
```python
|
||
>>> chr(65)
|
||
'A'
|
||
>>> chr(120)
|
||
'x'
|
||
>>> chr(ord('S') + 1)
|
||
'T'
|
||
```
|
||
|
||
- ASCII table
|
||
|
||
```
|
||
Dec Char Dec Char Dec Char Dec Char
|
||
--------- --------- --------- ----------
|
||
0 NUL (null) 32 SPACE 64 @ 96 `
|
||
1 SOH (start of heading) 33 ! 65 A 97 a
|
||
2 STX (start of text) 34 " 66 B 98 b
|
||
3 ETX (end of text) 35 # 67 C 99 c
|
||
4 EOT (end of transmission) 36 $ 68 D 100 d
|
||
5 ENQ (enquiry) 37 % 69 E 101 e
|
||
6 ACK (acknowledge) 38 & 70 F 102 f
|
||
7 BEL (bell) 39 ' 71 G 103 g
|
||
8 BS (backspace) 40 ( 72 H 104 h
|
||
9 TAB (horizontal tab) 41 ) 73 I 105 i
|
||
10 LF (NL line feed, new line) 42 * 74 J 106 j
|
||
11 VT (vertical tab) 43 + 75 K 107 k
|
||
12 FF (NP form feed, new page) 44 , 76 L 108 l
|
||
13 CR (carriage return) 45 - 77 M 109 m
|
||
14 SO (shift out) 46 . 78 N 110 n
|
||
15 SI (shift in) 47 / 79 O 111 o
|
||
16 DLE (data link escape) 48 0 80 P 112 p
|
||
17 DC1 (device control 1) 49 1 81 Q 113 q
|
||
18 DC2 (device control 2) 50 2 82 R 114 r
|
||
19 DC3 (device control 3) 51 3 83 S 115 s
|
||
20 DC4 (device control 4) 52 4 84 T 116 t
|
||
21 NAK (negative acknowledge) 53 5 85 U 117 u
|
||
22 SYN (synchronous idle) 54 6 86 V 118 v
|
||
23 ETB (end of trans. block) 55 7 87 W 119 w
|
||
24 CAN (cancel) 56 8 88 X 120 x
|
||
25 EM (end of medium) 57 9 89 Y 121 y
|
||
26 SUB (substitute) 58 : 90 Z 122 z
|
||
27 ESC (escape) 59 ; 91 [ 123 {
|
||
28 FS (file separator) 60 < 92 \ 124 |
|
||
29 GS (group separator) 61 = 93 ] 125 }
|
||
30 RS (record separator) 62 > 94 ^ 126 ~
|
||
31 US (unit separator) 63 ? 95 _ 127 DEL
|
||
|
||
```
|
||
|
||
- Transfer files from pc to emulator
|
||
|
||
[adb push C:\\MyFiles\\fileName.txt /sdcard/fileName.txt](https://i.stack.imgur.com/NBFto.png)
|
||
|
||
- Spotify playlist
|
||
|
||
https://developer.spotify.com/documentation/web-api/reference/#/operations/get-playlist
|
||
|
||
video: [https://www.youtube.com/watch?v=0dmS0He\_czs](https://www.youtube.com/watch?v=0dmS0He_czs)
|
||
|
||
|
||
https://www.sohamkamani.com/nodejs/rsa-encryption/
|
||
|
||
- Non microsoft vscode ie VsCodium
|
||
|
||
C:\\Users\\h.vscode\\extensions : contains extensions for vs code
|
||
|
||
C:\\Users\\h.vscode-oss\\extensions: contains extension for vscodium
|
||
|
||
here h is username
|
||
|
||
Not all extensions are available so just transfer extensions from vs code to vscodium manually.
|
||
|
||
use package manager to install vscodium.
|
||
|
||
for windows use:
|
||
|
||
`winget install vscodium`
|
||
|
||
- comments
|
||
|
||
[@Existentialist](https://www.youtube.com/channel/UC_TYtMoJqI6gNOXIaVFfjtg)
|
||
There is a trick for that. I have both vscode and vscodium installed. If desired extension is not avaiable in vscodium extension store then i download it from vscode store and copy its folder from .vscode/extensions to .vscode-oss/extensions.
|
||
|
||
- Multiple vs code
|
||
|
||
https://stackoverflow.com/questions/68047117/how-to-install-two-vs-code
|
||
|
||
changing extension directory:
|
||
|
||
https://stackoverflow.com/questions/40080793/is-there-a-way-to-change-the-extensions-folder-location-for-visual-studio-code
|
||
|
||
What I did - after installing Visual Studio Code for the first time, I checked the documentation and added at the end of 'Target' field of editor's shortcut the following (there's a space before the two dashes):
|
||
|
||
```bash
|
||
--extensions-dir="DRIVELETTER:\VSCODE\extensions"
|
||
--user-data-dir="DRIVELETTER:\VSCODE\settings"
|
||
|
||
```
|
||
|
||
where DRIVERLETTER and VSCODE are the corresponding drive and directory where Visual Studio Code is installed. So mine looks like this:
|
||
|
||
```bash
|
||
"D:\Microsoft VS Code\Code.exe" --extensions-dir="D:\Microsoft VS Code\extensions"
|
||
|
||
```
|
||
|
||
Here is for the user data directory:
|
||
|
||
```bash
|
||
"D:\Microsoft VS Code\Code.exe" --user-data-dir="D:\Microsoft VS Code\settings"
|
||
|
||
```
|
||
|
||
Accessing the 'Target' field is done by right-clicking the shortcut and choosing 'Properties'
|
||
|
||
Anyway, there's a simpler solution to that problem - just use the portable version of Visual Studio Code. It works under Windows, Linux, and macOS:
|
||
|
||
for windows:
|
||
|
||
```powershell
|
||
@START codium --extensions-dir="C:\Users\hp\Videos\imp\web\extensions" --user-data-dir="C:\Users\hp\Videos\imp\web\User"
|
||
```
|
||
|
||
- Chromium archive builds
|
||
|
||
https://src.chromium.org/viewvc/chrome/releases/1.0.154.53/src/
|
||
|
||
older executable: https://vikyd.github.io/download-chromium-history-version/#/
|
||
|
||
- Cloud Storage APIs
|
||
|
||
[https://www.reddit.com/r/Python/comments/gm3irp/did\_anyone\_upload\_files\_to\_degoo\_cloud\_via/](https://www.reddit.com/r/Python/comments/gm3irp/did_anyone_upload_files_to_degoo_cloud_via/)
|
||
|
||
LBRY: video streaming based on blockchain
|
||
|
||
- Enable usb debugging on android
|
||
|
||
\*\*\*\*Go to the Setting tab
|
||
|
||
**Step 2:** Go to About Phone
|
||
|
||
**Step 3:** Click several times on Build number
|
||
|
||
**Step 4:** You will then get a pop-up message that reads "You are under developer mode"
|
||
|
||
**Step 5:** Go back to Settings
|
||
|
||
**Step 6:** Click on Developer options
|
||
|
||
**Step 7:** Then check "USB debugging"
|
||
|
||
- Permanent deletion of files in android
|
||
|
||
With the increasing cases of identity theft and data breaches, it is certainly important to know the right way to dispose our data. Well, if you want to permanently delete your photos and videos from your phone, then I would recommend the following solutions.
|
||
|
||
**Delete media files manually**
|
||
|
||
Well, the easiest solution would be deleting your photos and videos manually from your device. Just go to the Gallery app and select what you wish to get rid of. Afterward, make sure that you visit the “Recently Deleted” album where your photos are saved temporarily. Now, delete your photos from here as well to remove them permanently.
|
||
|
||
**Factory Reset your Device**
|
||
|
||
If you want to permanently delete everything from your phone, then consider performing a factory reset. If you have an iPhone, then just go to its Settings > General > Reset for this while Android users can find it in Settings > Reset as well. This will erase not just photos, but all the saved content and stored settings from your phone.
|
||
|
||
**Use a Professional Data Eraser**
|
||
|
||
If you just factory reset or manually delete your photos, then anyone can extract them using a data recovery tool. Therefore, if you are concerned about your privacy, then consider using dr.fone – Data Eraser. There are dedicated applications for both iOS and Android that you can try. Using them, you can connect your device, and follow a simple click-through process to completely wipe your data. This will erase all your photos and videos beyond the scope of recovery.
|
||
|
||
- Block installation
|
||
|
||
0
|
||
|
||
MacroDroid [here](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid) can save u: Let's be simple;
|
||
|
||
1. Download and install MacroDroid
|
||
2. Press Add Macro
|
||
3. Select Trigger to be Application Launched
|
||
4. Check non-launchable apps
|
||
5. Locate Package installer and select it
|
||
6. Go to Actions tab
|
||
7. Select Launch Home Screen
|
||
8. Go to constraints and chose any other thing you want it to consider before executing that action you configured above or just leave it blank
|
||
9. Give your Macro a name and save it
|
||
10. You're ready to go
|
||
|
||
Note: *give macrodroid all permissions possible as requested. The macro will look as below*
|
||
|
||

|
||
|
||
- Google search hacks
|
||
|
||
https://news.ycombinator.com/item?id=25371017
|
||
|
||
- better third party upload api
|
||
|
||
https://app.uploadcare.com/
|
||
|
||
- ytdl core nodejs
|
||
|
||
https://medium.com/@Moorad/how-i-made-my-own-youtube-downloader-using-javascript-and-node-js-160b172f6e10
|
||
|
||
- Merge audio nd video in browser
|
||
|
||
https://www.youtube.com/watch?v=UXxv8-xtwNc
|
||
|
||
- Create custom video downloader
|
||
|
||
https://javascript.plainenglish.io/make-your-own-youtube-downloader-626133572429
|
||
|
||
- Stream downloads
|
||
|
||
https://philna.sh/blog/2020/08/06/how-to-stream-file-downloads-in-Node-js-with-got/
|
||
|
||
- remote url download like google drive
|
||
|
||
pcloud
|
||
|
||
https://gofile.io/ have api option too
|
||
|
||
fileLu : closed file system upload
|
||
|
||
[fileLu](../../Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web%20development%2083dd4e6675f04ba782a6865a434a0598/Extras%2052e0285b6a994018ba3a68c7c33ca3de/fileLu%206e31d221398d43638829e010f1ae9272.md)
|
||
|
||
filebin.net: open file system upload
|
||
|
||
- Moralis IPFS
|
||
|
||
https://docs.moralis.io/web3-data-api/evm/reference/upload-folder
|
||
|
||
https://moralis.io/pricing/#0
|
||
|
||
|
||
Internet archive
|
||
|
||
https://www.sitelike.org/similar/gofile.io/
|
||
|
||
https://workupload.com/
|
||
|
||
|
||
[macros](../../Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web%20development%2083dd4e6675f04ba782a6865a434a0598/Extras%2052e0285b6a994018ba3a68c7c33ca3de/macros%20bca37d848db740deab4c5801bd1eef18.md)
|
||
|
||
[youtube stream itags](../../Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web%20development%2083dd4e6675f04ba782a6865a434a0598/Extras%2052e0285b6a994018ba3a68c7c33ca3de/youtube%20stream%20itags%20be99980f6ca34db5abde5ac77495b.md)
|
||
|
||
- redis caching nodejs
|
||
|
||
https://www.digitalocean.com/community/tutorials/how-to-implement-caching-in-node-js-using-redis
|
||
|
||
https://www.sitepoint.com/using-redis-node-js/
|
||
|
||
|
||
|
||
|
||
- CORS proxy
|
||
|
||
proxy.cors.sh
|
||
|
||
whateverorigin.org
|
||
|
||
```jsx
|
||
fetch("https://proxy.cors.sh/https://acme.com", {
|
||
headers: {
|
||
"x-cors-api-key": "temp_6ed182fc89f2d7dc756368139fed3299",
|
||
},
|
||
});
|
||
|
||
const proxy = "https://proxy.cors.sh";
|
||
const key = "temp_6ed182fc89f2d7dc756368139fed3299";
|
||
|
||
const res = await fetch(
|
||
`http://www.whateverorigin.org/get?url=http://www.google.com`
|
||
);
|
||
```
|
||
|
||
- github api
|
||
|
||
https://api.github.com/users/kroeckx: for getting user info from username
|
||
|
||
https://api.github.com/search/users?q=kurt@roeckx.be : getting username from email address if public
|
||
|
||
- Script to copy project excluding node\_modules
|
||
|
||
```jsx
|
||
const fs=require('fs')
|
||
const path=require('path')
|
||
|
||
const copyFiles=(folder,folderPath)=>
|
||
{
|
||
const fileregex=/.+\..+/
|
||
const files=fs.readdirSync(folderPath)
|
||
console.log('files: ',files)
|
||
for(let file of files)
|
||
{
|
||
const filePath=`${folderPath}/${file}`
|
||
const destinationFilePath=filePath.replace(__dirname,`${__dirname}_copy`)
|
||
const destinationFolderPath=folderPath.replace(__dirname,`${__dirname}_copy`)
|
||
|
||
if(file==='node_modules'||file==='audios'||file==='songs')
|
||
{
|
||
continue;
|
||
}
|
||
|
||
if(fs.lstatSync(filePath).isDirectory() )
|
||
{
|
||
copyFiles(file,filePath)
|
||
}
|
||
|
||
|
||
console.log(filePath,destinationFilePath)
|
||
fs.mkdirSync(destinationFolderPath,{recursive: true})
|
||
|
||
if(!fs.lstatSync(filePath).isDirectory() )
|
||
{
|
||
const dataFile=fs.readFileSync(filePath)
|
||
fs.writeFileSync(destinationFilePath,dataFile)
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
copyFiles(__dirname,`${__dirname}`)
|
||
```
|
||
|
||
- Cheerio features
|
||
|
||
loop over elements:
|
||
|
||
```jsx
|
||
import fetch from 'node-fetch';
|
||
import { load } from 'cheerio';
|
||
|
||
const url = 'http://webcode.me/countries.html'
|
||
|
||
const response = await fetch(url);
|
||
const body = await response.text();
|
||
|
||
let $ = load(body);
|
||
|
||
$('tr').each((_, e) => {
|
||
|
||
let row = $(e).text().replace(/(\s+)/g, ' ');
|
||
console.log(`${row}`);
|
||
});
|
||
```
|
||
|
||
- Extracting youtube id
|
||
|
||
`let regex=/watch\?v=([a-zA-Z0-9_-]+)[&]?/`
|
||
|
||
- deta features
|
||
|
||

|
||
|
||
- yt download Links
|
||
|
||
https://x2download.app/en48
|
||
|
||
https://wave.video/convert/youtube-to-mp4
|
||
|
||
https://ssyoutube.youtubemini.com/#url=https://www.youtube.com/watch?v=X3jw1JVNdPE
|
||
|
||
- New way to download audio from youtube after throttling
|
||
|
||
```jsx
|
||
const getAudioLink = async (url) => {
|
||
const info = await ytdl.getInfo(url);
|
||
|
||
|
||
const { formats } = info;
|
||
const title = info.videoDetails.title;
|
||
|
||
const getDownloadLinkByItag = (formats, itag) => {
|
||
const formatObj = formats.find((format) => format.itag === Number(itag));
|
||
if (formatObj.itag === 140) {
|
||
return { url: formatObj.url, cL: formatObj.contentLength };
|
||
}
|
||
return formatObj.url;
|
||
};
|
||
|
||
const itag = "140";
|
||
let dobj = getDownloadLinkByItag(formats, itag);
|
||
let dURL = dobj.url;
|
||
const end = dobj.cL;
|
||
dURL = dURL + `&title=${encodeURIComponent(title)}&range=0-${end}`;
|
||
|
||
console.log("audio durl: ", dURL);
|
||
|
||
const urlDown = await tiny.shorten(dURL);
|
||
// const urlDown = dURL;
|
||
|
||
return { urlDown, title };
|
||
|
||
// const format2 = ytdl.chooseFormat(info.formats, { quality: `140` });
|
||
// console.log("🚀 ~ file: app.js ~ line 54 ~ app.post ~ format2", format2);
|
||
|
||
// try {
|
||
// // ytdl.downloadFromInfo(format).pipe(fs.createWriteStream("video.mp4"));
|
||
// const audio = ytdl(url, {
|
||
// filter: (format) => {
|
||
// // format1.container === "mp4" && format1.hasAudio === true,
|
||
// // console.log("🚀 ~ file: app.js ~ line 33 ~ app.post ~ format1", format1);
|
||
|
||
// return isEqual(format, format2);
|
||
// },
|
||
// });
|
||
|
||
// return audio;
|
||
// } catch (err) {
|
||
// console.log(err);
|
||
// throw new Error(err.toString());
|
||
// }
|
||
};
|
||
```
|
||
|
||
- Logger for js
|
||
|
||
https://stackoverflow.com/questions/41232578/node-js-console-log-in-txt-file
|
||
|
||
https://www.npmjs.com/package/log4js
|
||
|
||
```jsx
|
||
var log4js = require("log4js");
|
||
var logger = log4js.getLogger();
|
||
logger.level = "debug";
|
||
logger.debug("Some debug messages");
|
||
```
|
||
|
||
- upload file to ipfs nodejs
|
||
|
||
https://portal.thirdweb.com/api-keys?ref=blog.thirdweb.com
|
||
|
||
```jsx
|
||
const { ThirdwebStorage } = require("@thirdweb-dev/storage");
|
||
|
||
const fs = require("fs");
|
||
|
||
const storage = new ThirdwebStorage({
|
||
secretKey: "YOUR_SECRET_KEY", // You can get one from dashboard settings
|
||
});
|
||
|
||
const ipFsUpload = async (titles) => {
|
||
// const upload = await storage.upload({
|
||
// metadata: { name: "ghu.mp3" },
|
||
// alwaysUpload: true,
|
||
// });
|
||
|
||
const buffers = titles.map((title) => fs.readFileSync(`music/${title}.mp3`));
|
||
// const uploads = await storage.uploadBatch([
|
||
// fs.readFileSync("Holiday_Boulevard_of_Broken_Dreams.mp3"),
|
||
// fs.readFileSync("test.txt"),
|
||
// ]);
|
||
|
||
const uploads = await storage.uploadBatch(buffers);
|
||
// const upload = await storage.upload({
|
||
// name: "gh.mp3",
|
||
// file: fs.readFileSync("test.txt"),
|
||
// });
|
||
|
||
// const gatewayURLS = uploads.map((upload) => storage.resolveScheme(upload));
|
||
const gatewayURLS = [];
|
||
|
||
for (let i = 0; i < uploads.length; i++) {
|
||
const upload = uploads[i];
|
||
const title = titles[i];
|
||
|
||
const gatewayURL = storage.resolveScheme(upload);
|
||
|
||
const obj = { url: gatewayURL, title };
|
||
gatewayURLS.push(obj);
|
||
}
|
||
|
||
console.log("gateway urls: ", gatewayURLS);
|
||
|
||
return gatewayURLS;
|
||
|
||
// console.log(`Gateway URL - ${storage.resolveScheme(upload[0])}`);
|
||
};
|
||
|
||
module.exports = { ipFsUpload };
|
||
```
|
||
|
||
- Clarifai api march 2023
|
||
|
||
```jsx
|
||
const raw = JSON.stringify({
|
||
"user_app_id": {
|
||
"user_id": "clarifai",
|
||
"app_id": "main"
|
||
},
|
||
"inputs": [
|
||
{
|
||
"data": {
|
||
"image": {
|
||
"url": "IMAGE_URL",
|
||
"base64": "base64_string"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
});
|
||
|
||
const requestOptions = {
|
||
method: 'POST',
|
||
headers: {
|
||
'Accept': 'application/json',
|
||
'Authorization': 'Key ' + 'your key'
|
||
},
|
||
body: raw
|
||
};
|
||
|
||
// NOTE: MODEL_VERSION_ID is optional, you can also call prediction with the MODEL_ID only
|
||
// https://api.clarifai.com/v2/models/{YOUR_MODEL_ID}/outputs
|
||
// this will default to the latest version_id
|
||
|
||
fetch(`https://api.clarifai.com/v2/models/face-detection/versions/6dc7e46bc9124c5c8824be4822abe105/outputs`, requestOptions)
|
||
.then(response => response.text())
|
||
.then(result => console.log(result))
|
||
.catch(error => console.log('error', error));
|
||
```
|
||
|
||
|
||
https://www.markdowntutorial.com/
|
||
|
||
- youtube search without api
|
||
|
||
https://www.npmjs.com/package/scrape-youtube
|
||
|
||
- Remove constant popup of winrar for free
|
||
|
||
[WinRAR crack.rar](../../_resources/WinRAR_crack.rar)
|
||
|
||
just add a rarreg.key file in winrar folder
|
||
|
||
- insert html at caret in contenteditable element
|
||
|
||
```jsx
|
||
function pasteHtmlAtCaret(html) {
|
||
var sel, range;
|
||
if (window.getSelection) {
|
||
// IE9 and non-IE
|
||
sel = window.getSelection();
|
||
if (sel.getRangeAt && sel.rangeCount) {
|
||
// get selected area details
|
||
range = sel.getRangeAt(0);
|
||
|
||
//deleting the selected region
|
||
range.deleteContents();
|
||
|
||
// Range.createContextualFragment() would be useful here but is
|
||
// non-standard and not supported in all browsers (IE9, for one)
|
||
var el = document.createElement("div");
|
||
el.innerHTML = html;
|
||
|
||
// offscreen dom tree creation as inserted between instead of last
|
||
var frag = document.createDocumentFragment(),
|
||
node,
|
||
lastNode;
|
||
|
||
// extract elements from div container and appending it to document fragment
|
||
while ((node = el.firstChild)) {
|
||
lastNode = frag.appendChild(node);
|
||
}
|
||
|
||
range.insertNode(frag);
|
||
|
||
// Preserve the selection
|
||
if (lastNode) {
|
||
// range = range.cloneRange();
|
||
|
||
// to unselect and push caret to last
|
||
range.setStartAfter(lastNode);
|
||
range.collapse(true);
|
||
|
||
// if not removed then cursor wont be at last
|
||
sel.removeAllRanges();
|
||
sel.addRange(range);
|
||
}
|
||
}
|
||
} else if (document.selection && document.selection.type != "Control") {
|
||
// IE < 9
|
||
document.selection.createRange().pasteHTML(html);
|
||
}
|
||
}
|
||
```
|
||
|
||
- Fix com surrogate high memory usage
|
||
|
||
https://www.youtube.com/watch?v=YXhB3eNk9I8
|
||
https://small.fileditchstuff.me/s5/qIZWhbEWyHBvWUgpdrLO.mp4
|
||
|
||
- onchange event attribute in html
|
||
|
||
```jsx
|
||
function create_comboA(your_Object) {
|
||
|
||
var my_value = your_Object.my_value;
|
||
|
||
console.log(my_value);
|
||
|
||
}
|
||
|
||
<select id="create_comboA" onchange="create_comboA(this)">
|
||
|
||
<option value="">Choose the combo</option>
|
||
|
||
<option value="First Option">Apple</option>
|
||
|
||
<option value="Second Option">Orange</option>
|
||
|
||
<option value="Third Option">Banana</option>
|
||
|
||
</select>
|
||
```
|
||
|
||
here this is equivalent to e.target
|
||
|
||
event is equivalent to e
|
||
|
||
- Simple connection
|
||
|
||
```html
|
||
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<style>
|
||
input {
|
||
width: 200px;
|
||
height: 2rem;
|
||
}
|
||
</style>
|
||
<meta charset="UTF-8" />
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>Document</title>
|
||
</head>
|
||
<body>
|
||
<input type="text" oninput="handleChange(this)" autofocus />
|
||
<script src="script.js"></script>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
```jsx
|
||
const handleChange = (e) => {
|
||
let str = e.value;
|
||
console.log("str: ", str);
|
||
fetch("/send", {
|
||
method: "post",
|
||
body: JSON.stringify({ text: str }),
|
||
headers: {
|
||
"content-type": "application/json",
|
||
// accept: "Application/octet-stream",
|
||
},
|
||
});
|
||
};
|
||
```
|
||
|
||
```jsx
|
||
const express = require("express");
|
||
|
||
const app = express();
|
||
|
||
app.use(express.static(__dirname + "/public"));
|
||
app.use(express.json());
|
||
|
||
app.post("/send", (req, res) => {
|
||
const { text } = req.body;
|
||
console.log(text);
|
||
});
|
||
|
||
app.listen(3000, () => {
|
||
console.log("listening");
|
||
});
|
||
```
|
||
|
||
- Sublime Text Palenight theme missing fix
|
||
|
||
The Palenight theme is not included in the Midnight theme package. You need to install the Palenight theme separately. You can do this by following these steps:
|
||
|
||
1. Open Sublime Text and go to **Preferences > Browse Packages**.
|
||
2. In the Packages directory, create a new folder called `Palenight`.
|
||
3. Clone the Palenight theme repository: https://github.com/jbrooksuk/palenight-sublime-text into the `Palenight` folder.
|
||
4. Restart Sublime Text.
|
||
|
||
The Palenight theme should now be available in the **Color Scheme** menu.
|
||
|
||
Here are some additional troubleshooting steps you can try if the Palenight theme is still not available:
|
||
|
||
- Make sure that you have installed the latest version of the Palenight theme.
|
||
- Verify that the `Palenight` folder is located in the `Packages` directory.
|
||
- Restart Sublime Text multiple times.
|
||
- Clear your Sublime Text settings.
|
||
- Docker
|
||
|
||
https://medium.com/swlh/containerize-your-personal-projects-with-docker-fe62ca391db8
|
||
|
||

|
||
|
||
Dockerfile saved with name ‘Dockerfile’ no extension
|
||
|
||
```docker
|
||
FROM node:12
|
||
|
||
WORKDIR /app
|
||
|
||
COPY package*.json ./
|
||
|
||
RUN npm install
|
||
|
||
COPY . .
|
||
|
||
ENV PORT=8080
|
||
|
||
EXPOSE 8080
|
||
|
||
CMD [ "npm","start" ]
|
||
```
|
||
|
||
just like .gitignore there is a file name .dockerignore to exclude mentioned files or folder
|
||
|
||
```docker
|
||
node_modules
|
||
```
|
||
|
||
building image:
|
||
|
||
`docker build -t username/first_app:1.0`
|
||
|
||
it will produce an output and will produce image starting with sha……
|
||
|
||
To run the image use:
|
||
`docker run <image_name/code>`
|
||
|
||
Now if we try to run it with port(here in eg port is 8080) then it wont run because by default its not accessible outside container so to expose it we can use port forwarding.
|
||
|
||
`docker run -p 5000:8080 <image_name/code>`
|
||
|
||
port 8080 of container is forwarded to port 5000 of outside container. 5000:8080 is mapping
|
||
|
||
- For publishing
|
||
|
||
Now login through the CLI by executing:
|
||
|
||
```
|
||
docker login
|
||
```
|
||
|
||
Push your Docker Image to the Docker Hub repository with the following command:
|
||
|
||
```
|
||
docker image push <repository>/<image>:<tag>
|
||
```
|
||
|
||
Example:
|
||
|
||
```
|
||
docker image push dhanushkamath/dockerize-node:1.0.0
|
||
```
|
||
|
||
You’ve successfully published your first image to the world!
|
||
|
||
Running this container on a different computer that has Docker only requires a single command:
|
||
|
||
```
|
||
docker run dhanushkamath/dockerize-node:1.0.0
|
||
```
|
||
|
||
- RSA
|
||
|
||
https://www.geeksforgeeks.org/rsa-algorithm-cryptography/
|
||
|
||
Note: If your public key's n (modulo) is 4096 bits, then your message can't exceed 4096 bits (realistically even less because of padding)
|
||
|
||
```
|
||
Select two prime no's. Suppose
|
||
P = 53 and Q = 59.
|
||
Now First part of the Public key : n = P*Q = 3127.
|
||
|
||
```
|
||
|
||
```
|
||
But e Must be An integer.Not be a factor of Φ(n). 1 < e <Φ(n)
|
||
Φ(n) = (P-1)(Q-1)
|
||
so, Φ(n) = 3016
|
||
Eg: For e=3, Φ(n)%e !=0 so e is not factor of Φ(n).
|
||
```
|
||
|
||
```
|
||
Now calculate Private Key,d
|
||
d = (k*Φ(n) + 1) / e for some integer k
|
||
|
||
or
|
||
|
||
D*e mod φ (n) = 1
|
||
at k=2,
|
||
(2*3016+1)/3 =( 6032+1)/3=6033/3= 2011
|
||
d=2011
|
||
```
|
||
|
||
Public Key= <e,n> = <3,3127>
|
||
|
||
Private Key=<d,n> <2011,3127>
|
||
|
||
Encryption:
|
||
|
||
(m^e)mod(n) here a mod b = a%b ⇒ mod is modulus operator
|
||
|
||
m=3
|
||
|
||
(3^3)%3127=27%3127=27
|
||
|
||
c=27
|
||
|
||
Decryption:
|
||
|
||
**(c^d)mod n**
|
||
|
||
27^2011 % 3127
|
||
|
||
- Complex calculation
|
||
|
||
https://www.youtube.com/watch?v=EiZGCSsKtfM
|
||
|
||
https://stackoverflow.com/questions/45381402/rsa-exponent-size
|
||
|
||
- Stack overflow
|
||
|
||
Let's say `M` is the modulus. So YES, you could first perform `intermediate = 65^e`, and finally compute `intermediate mod M`. And of course, `intermediate` would be a very very very very big integer (if `e` equals 65537, the decimal representation of `intermediate` contains 118813 digits!).
|
||
|
||
BUT, **thanks to a very basic modular arithmetic theorem**,
|
||
|
||
```
|
||
(65^e) mod M = ((((65 mod M) * 65) mod M) * 65) mod M [...] (e times)
|
||
|
||
```
|
||
|
||
(*the theorem states that in a quotient ring, the n-th power of the class of an element is the class of the n-th power of the element*)
|
||
|
||
As you can see, this does not need any very big integer library, since after each arithmetic product, you use `mod M` that returns an integer between `0` and `M-1`. So, you only have to compute arithmetic products of integers less than M.
|
||
|
||
As an example, here is a simple shell script (bash) that computes 65^65537 mod 991\*997. **As you can see, no need to get a big number library:**
|
||
|
||
```
|
||
#!/bin/bash
|
||
|
||
# set RSA parameters
|
||
m=65 # message to encode
|
||
M=$((991*997)) # modulus (both 991 and 997 are prime numbers)
|
||
e=65537 # public exponent (coprime with 990*996, thus compliant with RSA algorithm)
|
||
|
||
# compute (m^e) mod M
|
||
ret=1
|
||
for i in {1..$e}
|
||
do
|
||
ret=$(((ret*m)%M))
|
||
done
|
||
|
||
# display the result
|
||
echo $ret
|
||
|
||
```
|
||
|
||
It immediately returns `784933`, thus `65^65537 mod 991*997 = 784933`
|
||
|
||
The biggest integer computed with your method of calculus has 118813 digits, but the biggest integer handled with this shell script only has 12 or less digits (`(M-1)^2` is made of 12 digits).
|
||
|
||
**According to these explanations, we can now answer your question:**
|
||
|
||
> My question is then, for the working RSA algorithm, what size (number of digits) number does that algorithm pick?
|
||
|
||
With the above explanations, you can see that the maximum number of digits in the decimal representation of integers you have to manipulate is `1+log10((M-1)^2)`, because you will, at most, compute a product of two integers between `0` and `M-1`.
|
||
|
||
Note that `1+log10((M-1)^2) = 1+2.log10(M-1) < 2+2.log10(M) = 2.(1+log10(M))`. Also note that `1+log10(M)` is the number of digits of M.
|
||
|
||
Therefore, as a conclusion, this proves that **the number of digits your library has to handle correctly is twice the number of digits of the modulus** (if you are computing the exponentiation using integer multiplications the way explained here).
|
||
|
||
|
||
**Calculate Large Exponents**
|
||
|
||
Calculating large exponents and modular arithmetic can be complex. For such calculations, you can use a calculator or programming language with built-in support for handling large numbers and modular arithmetic. In this case, you're looking to calculate 56^{2346} \\mod 564562346mod564.
|
||
If you want to do this using a programming language like Python, you can use the **`pow()`** function along with the modulus operator **`%`**:
|
||
|
||
`pythonCopy coderesult = pow(56, 2346, 564) print(result)`
|
||
|
||
If you don't have access to programming tools, you might need to use a calculator that supports large number calculations and modular arithmetic. Many scientific calculators and online calculator tools have this capability. Just make sure to enter the values and operations correctly.
|
||
Keep in mind that the result will be a large number, so ensure you're using tools that can handle such calculations accurately.I mean arent there any mathematical properties to handle thisChatGPT
|
||
Yes, there are mathematical properties that can help simplify and handle calculations involving large exponents and modular arithmetic. One property that's particularly useful is the **modular exponentiation** property. This property states that for any positive integers a*a*, b*b*, and m*m*, you can compute a^b \\mod m*ab*mod*m* efficiently without actually calculating the huge exponentiation.
|
||
|
||
Here's the general idea:
|
||
|
||
1. Start with a result variable initialized to 1.
|
||
2. Iterate through the binary representation of b*b*, from the least significant bit to the most significant bit.
|
||
3. For each bit, if it's 1, multiply the result by a*a* and take the result modulo m*m*.
|
||
4. Square a*a* and take the result modulo m*m* in each iteration.
|
||
5. The final result will be a^b \\mod m*ab*mod*m*.
|
||
This method significantly reduces the number of multiplications and calculations required compared to naively calculating a^b*ab* and then taking the modulus.
|
||
For example, to calculate 56^{2346} \\mod 564562346mod564, you would apply the above steps using a = 56*a*\=56, b = 2346*b*\=2346, and m = 564*m*\=564.
|
||
However, this approach still involves some complex calculations. If you're not comfortable performing these calculations manually, it's best to use a programming language or calculator with built-in support for modular exponentiation.Ok so use these steps to solve this ChatGPT
|
||
|
||
* * *
|
||
|
||
Main:
|
||
|
||
Certainly! Let's use the modular exponentiation property to calculate 56^{2346} \\mod 564562346mod564:
|
||
|
||
1. Start with the result variable res = 1*res*\=1.
|
||
2. Convert the exponent 2346 to binary: 2346\_{10} = 100100101010\_{2}234610=1001001010102.
|
||
3. Iterate through the binary representation of the exponent:
|
||
◦ First bit: 00. Square 56 and take the result modulo 564.
|
||
◦ Second bit: 11. Multiply 56 by 56, take the result modulo 564, and then square the result.
|
||
◦ Third bit: 00. Square the result again.
|
||
◦ ...
|
||
4. After iterating through all bits, the final result will be res = 56^{2346} mod 564
|
||
Using the steps above, you can perform the calculations iteratively:
|
||
5. res = 1
|
||
6. res = 56^2 mod 564 = 3136 mod 564 = 220
|
||
7. res = 220 \* 56^2 mod 564 = 220 \* 3136 mod 564 = 4476 mod 564 = 348
|
||
8. ... (continue squaring and multiplying as per the binary representation of the exponent)
|
||
After completing all the steps, the final result res will be the value of 56^{2346} mod 564
|
||
|
||
* * *
|
||
|
||
Taking another example:
|
||
|
||
2^9 mod 100
|
||
|
||
9=1001 in binary form
|
||
|
||
res=1
|
||
|
||
If bit is:
|
||
|
||
1: multiply by base which is 2 here ⇒ res\*2
|
||
|
||
0: square it ⇒ res^2
|
||
|
||
from right to left:
|
||
|
||
First significant bit(rightmost) ie 1: res=res\*2 mod 100=2 mod 100 = 2
|
||
|
||
2nd bit ie 0: res=res^2=4 mod 100 = 4
|
||
|
||
3rd bit ie 0. res=res^2= 4\*4=16 mod 100 = 16
|
||
|
||
- YouTube alternative
|
||
|
||
Invidious
|
||
|
||
libreddit
|
||
|
||
- To learn
|
||
|
||
Non free js/ librejs
|
||
|
||
Floorp Firefox engine browser like vivaldi
|
||
|
||
Midori
|
||
|
||
- Cons of matlab
|
||
|
||
1: index starts at 1.
|
||
|
||
2: % is not recognized as modulus. rem function has to be used.
|
||
|
||
3; Ambiguous syntax
|
||
|
||
https://www.rath.org/matlab-is-a-terrible-programming-language.html
|
||
|
||
- Browsers
|
||
|
||
Librewolf
|
||
|
||
Mullwad : tor without tor network
|
||
|
||
waterfox
|
||
|
||
Falkon
|
||
|
||
midori
|
||
|
||
- Email
|
||
https://eylenburg.github.io/cloud_comparison.htm
|
||
skiff (2021-2024)
|
||
|
||
disroot : https://disroot.org/en/services/email
|
||
|
||
tutanota(now called tuta) (since 2016) (6 months of inactivity)
|
||
https://www.reddit.com/r/PrivacyGuides/comments/v2v6rw/email_provider_recommendations_free_imappop/
|
||
abv bg : bulgariian email service
|
||
https://www.fsf.org/resources/webmail-systems : free emails
|
||
https://veilmail.io/ : generate alias for email
|
||
https://app.simplelogin.io/ : to create alias for proton mail (upto 10 alias)
|
||
https://app.addy.io/register : upto 10
|
||
firefox relay (alias service) : cant generate custom alias though
|
||
https://www.techradar.com/pro/free-email-accounts-listed-and-compared
|
||
like vielmail there are Blur and 33mail
|
||
zoho : (since 2008) (needs phone number)
|
||
proton (since 2014)
|
||
gmail (since 2004)
|
||
riseup(since 1999)
|
||
mail.com(need usa or europe IP, also need valid phone number)
|
||
ctemplar(2019-2022)
|
||
aol(needs local phone number), similarly Daum Mail , naver mail and yandex mail
|
||
mailfence(7 months of inactivity)
|
||
onmail : (since 2020 -2025)
|
||
rmail (since 2022)
|
||
mailo
|
||
aster mail (since apr 2026)
|
||
atomic mail (subce 2024)
|
||
autistici/inventi (2001-2026)
|
||
adminforge
|
||
infomaniak (need phone number verification by reverse calling)
|
||
https://keepitfree.ai/it/announcements/a/i-chiude-restare-umani/
|
||
[A_I Closes Stay Human · Keep the Internet free (15_9_2026 12:00:45 pm).html](../../_resources/A_I%20Closes%20Stay%20Human%20·%20Keep%20the%20Internet%20free%20%2815.html)
|
||
|
||
|
||
email client:
|
||
thunderbird
|
||
fairemail: for android
|
||
|
||
smtp providers
|
||
https://mailtrap.io/blog/free-smtp-servers/
|
||
mailgun (to 5 users only, 5k/month)
|
||
sendgrid (1k/month)
|
||
brevo(need phone number and cant be verified with temp ones,also address)
|
||
smtp2go(1k/month, need private domain)
|
||
sendpulse(12k/month)
|
||
blogmail : requires domain
|
||
mailtrap : requires domain(3k/month)
|
||
mailsend(1k/month) (provides u with your temporary domain)
|
||
elastic email (100/day)
|
||
|
||
https://elasticemail.com/developers/api-documentation/rest-api#section/Authentication
|
||
|
||
|
||
|
||
- Search engine
|
||
|
||
duckduckgo
|
||
|
||
startpage : [https://www.startpage.com](https://www.startpage.com/)
|
||
qwant.com (not availble in india though)
|
||
brave search
|
||
ecosia (google and bing result) : does tracked by google though
|
||
https://altpower.app
|
||
searxing : https://priv.au (instance), https://www.gruble.de/
|
||
https://degoog.org/
|
||
|
||
|
||
- Mirrors
|
||
|
||
https://github.com/mendel5/alternative-front-ends
|
||
|
||
https://mike.sg/2022/07/10/how-to-use-libredirect-on-android/
|
||
|
||
libreddit https://libreddit.northboot.xyz/ : read-only
|
||
|
||
Teddit
|
||
|
||
whoogle: https://whoogle-search--replitcomreside.repl.co/, google
|
||
|
||
searx, weird one : for unbiased search result : https://searx.work/
|
||
|
||
https://github.com/benbusby/whoogle-search#public-instances
|
||
|
||
Nitter: read only for twitter
|
||
|
||
https://github.com/libreddit/libreddit-instances/blob/master/instances.md
|
||
|
||
invidous: yewtu.be
|
||
|
||
simple translate, lingwa translate
|
||
|
||
libremd: imdb mirror
|
||
|
||
quetre : quora mirror
|
||
|
||
rimgo: imgur mirror https://rimgo.kling.gg/
|
||
|
||
- VPN
|
||
|
||
hide me
|
||
|
||
windscribe
|
||
|
||
https://www.vpngate.net/en
|
||
|
||
riseup : need invite codes for email but for vpn it needs snapd
|
||
|
||
atlas
|
||
|
||
cloudfare dns
|
||
|
||
- Download page
|
||
|
||
singlefile extension
|
||
|
||
- chrome
|
||
|
||
[SingleFile.zip](../../_resources/SingleFile.zip)
|
||
|
||
[SingleFile.crx](../../_resources/SingleFile.crx)
|
||
|
||
- firefox
|
||
|
||
[green day - Invidious (8\_26\_2023 7\_11\_16 AM).html](../../Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web%20development%2083dd4e6675f04ba782a6865a434a0598/Extras%2052e0285b6a994018ba3a68c7c33ca3de/green_day_-_Invidious_%288_26_2023_7_11_16_AM%29.html)
|
||
|
||
[single\_file-1.21.62.rar](../../_resources/single_file-1.21.62.rar)
|
||
|
||
- Coral
|
||
|
||
https://coral-sim.zybooks.com/
|
||
|
||
it shows execution for code in animation and draws flowchart itself
|
||
|
||
- spotify recorder
|
||
|
||
spy-spotify : spytify software
|
||
|
||
- Virtual box resolution fixing
|
||
|
||

|
||
|
||
```bash
|
||
xrandr --newmode "1920x1080" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
|
||
|
||
xrandr --addmode Virtual1 1920x1080
|
||
xrandr --output Virtual1 --mode 1920x1080
|
||
```
|
||
|
||
- Mobile browser with extension support
|
||
|
||
Lemur browser : chromium based closed source
|
||
|
||
kiwi : chromium based closed source
|
||
|
||
firefox : open source
|
||
|
||
yandex : russian chromiium based
|
||
|
||
- Video/image upload
|
||
|
||
| name | allows variety | anon uploads | direct links | galleries | gifs | mp4s | popups | upload limit |
|
||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||
| catbox.moe | yes | yes | yes | yes | yes | yes | yes | 200 mb, (Gif 20 mb) |
|
||
| freeimage.host | yes | yes | yes | yes | yes | no | no | 64 mb |
|
||
| imgbox.com | yes | yes | yes | yes | yes | no | yes | 10 mb |
|
||
| imgchest.com | yes | yes | yes | yes | yes | no | no | 20 mb |
|
||
| lensdump.com | yes | no | yes | yes | yes | no | no | 100 mb |
|
||
| pixhost.to | yes | yes | yes | yes | yes | no | no | 10 mb |
|
||
| postimages.org | yes | yes | yes | yes | yes | no | no | 24 mb |
|
||
| redgifs.com | yes | no | no | yes | yes | yes | yes | 1 gb |
|
||
| steamysnap.com | yes | no | yes | yes | yes | no | no | 20MB |
|
||
| sdrive.app | yes | yes | yes | coming | yes | yes | yes | 50MB |
|
||
|
||

|
||
|
||
https://sendvid.com/
|
||
|
||
https://rapidshare.io/
|
||
|
||
https://easyupload.io/
|
||
|
||
filebin : deletes after 6 days
|
||
|
||
https://fastupload.io/en
|
||
|
||
goFile : file deletes if no one download it
|
||
|
||
goFile unofficial download: https://gist.github.com/shawnli87/d416b7c9030293cabfcf4c225cdc5a15
|
||
|
||
skiff drive : https://app.skiff.com/drive/folder : no longer exist
|
||
|
||
pcloud
|
||
|
||
filen.io : if not login in 3 months, file may get deleted
|
||
fileLU : file may get deleted later
|
||
|
||
idrive : with file sync cross platform : no longer free
|
||
|
||
dropbox : with file sync cross platform
|
||
|
||
sync : with file sync cross platform except linux
|
||
|
||
https://buzzheavier.com/ (unlimited, forever, no ddl link by default)
|
||
|
||
jottacloud : 5GB
|
||
https://drime.cloud/ : 20 gb free eu hosting
|
||
filegarden : https://filegarden.com/ : 100mb file limit, 2gb total limit, ddl link
|
||
https://mobidrive.com : 20gb free storage
|
||
filespayout : 10gb free but with 10s wait for download
|
||
blackbaze : 10gb s3 like cloud storage https://www.backblaze.com : no public link without credit card
|
||
cloudfare r2 : s3 like, requires credit card
|
||
https://filebase.com/pricing/ : 5gb storage with 5gb bandwidth
|
||
koofr : 10gb (share link expire after 14 days)
|
||
opendrive (5 GB | 100 MB Max File Size | 1 GB/Day Bandwidth 1 User | 200 KB/s Speed) (Supports DDL)
|
||
|
||
box : with file sync cross platform except linux
|
||
|
||
https://workupload.com/
|
||
|
||
https://www.cbackup.com (10gb, 1gb/day)
|
||
|
||
for file sharing: https://0x0.st/, code: https://git.0x0.st/mia/0x0
|
||
https://www.lifewire.com/free-cloud-storage-1356638 : free cloud storages
|
||
https://bytesbin.com/file-hosting-direct-download-link/ : free cloud storages with direct downloadable link
|
||
https://ddownload.eu : 5tb with 30 days validity
|
||
https://www.zotero.org/support/kb/webdav_services
|
||
4shared : (15 gb, 3GB daily limit, 30GB monthly limit, need to sign i to download files)
|
||
scramble.cloud : 100 gb storage encrypted(some IP block it)
|
||
|
||
https://vgy.me/ : for image
|
||
https://fileditch.com/ : 15gb/file perma storage
|
||
filen : 10gb vloud storage end to end encyption : will get 10 gb for inviting friends (3 months of inactivity)
|
||
dropbox : 500mb per referral
|
||
deegoo : 20gb
|
||
1filchier : 1tb temp storage
|
||
yandex disk : 5gb
|
||
mega 20gb (since 2013)
|
||
mediafire : 10gb(1 gb for every friend invite)(since 2006)
|
||
bestfile(unlimited space, 5gb/file)(for unregistered, 1gb/file, 6months file validity)
|
||
uploadnow(100 gb, cant signin)(file deletes if no one download it)
|
||
blomp(20 gb to 200gb)
|
||
uloz.to : (1gb, no way to make files public/sharable) : reduced from 50gb to 25gb to 1gb
|
||
|
||
- Google DRM Dangers
|
||
|
||
1. What will happen basically that google will decide that which browser, which OS, which extension u can use also forcing to use Cam and microphone
|
||
2. So u can no longer block ads, extension to save our system from virus thus stealing your information and selling it.
|
||
Internet will no longer be open anymore.
|
||
3. Get commerce sites, banks, and digital content providers to widely adopt WEI for security benefits.
|
||
4. Require use of TPM signed OS to access said sites "securely".
|
||
5. Only sign systems with locked down execution environment to ensure integrity of system.
|
||
6. Censorship, spying, marketing and who knows what else.
|
||
7. malicious websites can then filter out traffic they don't want, and instead focus entirely on their specified victims.
|
||
8. search engine scrapers being unable to gather data. so no new search engine will ever develop.
|
||
9. this may affect dissidents and journalists that use secure software (TAILS, tor, etc) to communicate sensitive information. said secure software would probably not succeed a WEI test, and could thus make their work even more difficult than it is
|
||
|
||
Asking the user if they’d like to receive notifications the instant they visit a site is so dumb. As soon as the user hits no, that’s it, they’ve now been indefinitely banned from requesting that permission moving forward. Regardless of if the user might actually want it some day later on.
|
||
|
||
Safetynet will detect rooted device and block its access for banking apps
|
||
|
||
1, don't worry this is just an idea
|
||
2, don't worry this is just some personal project
|
||
3, don't worry this is just an internal discussion
|
||
4, don't worry this is just a closed test
|
||
5, yaaaaaa you have to update or you'll die, byyyyy
|
||
|
||
- chat
|
||
|
||
It's a DRM to be launched by google giving websites access to our device information.
|
||
|
||
https://m.youtube.com/watch?v=5joNRJ3C5ho&pp=ygUZU29tZW9yZGluYXJ5Z2FtaW5nIGdvb2dsZQ%3D%3D
|
||
|
||
https://github.com/RupertBenWiser/Web-Environment-Integrity/blob/main/explainer.md
|
||
|
||
ability for websites to detect your environment so that u can be trusted
|
||
|
||
- Open source note taking
|
||
|
||
https://www.youtube.com/watch?v=P8accXNcwjs
|
||
|
||
qownnotes
|
||
|
||
appflowy for notion
|
||
|
||
anytype for notion
|
||
|
||
joplin
|
||
|
||
zimnotes : have option of exporting html but only for pc
|
||
|
||
markor : for android
|
||
|
||
nextcloud for office 365
|
||
|
||
mattermost for teams
|
||
|
||
litexl for sublime text
|
||
|
||
https://www.youtube.com/@VideosByDefault/about
|
||
|
||
- Open source project
|
||
|
||
Lime text : foss alternative of sublime text
|
||
|
||
https://www.youtube.com/watch?v=oLrwk07zZ0Y
|
||
|
||
vaultwarden : password manager
|
||
|
||
padloc : password manager (stores data in `~/.local/share/app.padloc`)
|
||
|
||
https://github.com/k0gen/agora-wrapper : fileHosting
|
||
|
||
podman : docker alternative
|
||
|
||
libretube : youtube mirror
|
||
|
||
peer tube : youtube alternative . its french
|
||
|
||
syncting : airdroid alternative
|
||
|
||
https://blog.space-cloud.io/posts/top-5-opensource-heroku-alternatives/
|
||
|
||
- toggle list in markdown
|
||
|
||
```html
|
||
<details><summary>Click me</summary>
|
||
|
||
### Heading
|
||
|
||
1. Foo
|
||
2. Bar
|
||
- Baz
|
||
3. [Window Tiling in XFCE.mp4](:/b1511aa80cad4d8398847045a03c96be)
|
||
|
||
### Some Javascript
|
||
|
||
```js
|
||
function logSomething(something) {
|
||
console.log('Something', something);
|
||
}
|
||
```
|
||
|
||
</details>
|
||
```
|
||
|
||
- Joplin
|
||
|
||
https://github.com/laurent22/joplin/blob/dev/BUILD.md |