When making this website, i wanted a simple, reasonable way to make it look good on most displays. Not counting any minimization techniques, the following 58 bytes worked well for me:
main {
max-width: 38rem;
padding: 2rem;
margin: auto;
}| // This injects a box into the page that moves with the mouse; | |
| // Useful for debugging | |
| async function installMouseHelper(page) { | |
| await page.evaluateOnNewDocument(() => { | |
| // Install mouse helper only for top-level frame. | |
| if (window !== window.parent) | |
| return; | |
| window.addEventListener('DOMContentLoaded', () => { | |
| const box = document.createElement('puppeteer-mouse-pointer'); | |
| const styleElement = document.createElement('style'); |
TLDR: JWTs should not be used for keeping your user logged in. They are not designed for this purpose, they are not secure, and there is a much better tool which is designed for it: regular cookie sessions.
If you've got a bit of time to watch a presentation on it, I highly recommend this talk: https://www.youtube.com/watch?v=pYeekwv3vC4 (Note that other topics are largely skimmed over, such as CSRF protection. You should learn about other topics from other sources. Also note that "valid" usecases for JWTs at the end of the video can also be easily handled by other, better, and more secure tools. Specifically, PASETO.)
A related topic: Don't use localStorage (or sessionStorage) for authentication credentials, including JWT tokens: https://www.rdegges.com/2018/please-stop-using-local-storage/
The reason to avoid JWTs comes down to a couple different points:
| #include <time.h> // Robert Nystrom | |
| #include <stdio.h> // @munificentbob | |
| #include <stdlib.h> // for Ginny | |
| #define r return // 2008-2019 | |
| #define l(a, b, c, d) for (i y=a;y\ | |
| <b; y++) for (int x = c; x < d; x++) | |
| typedef int i;const i H=40;const i W | |
| =80;i m[40][80];i g(i x){r rand()%x; | |
| }void cave(i s){i w=g(10)+5;i h=g(6) | |
| +3;i t=g(W-w-2)+1;i u=g(H-h-2)+1;l(u |
| #! /usr/bin/env stack | |
| -- stack --resolver lts-18.8 script | |
| {-# LANGUAGE OverloadedStrings #-} | |
| {- | |
| This is a handy illustration of converting between five of the commonly-used | |
| string types in Haskell (String, ByteString, lazy ByteString, Text and lazy | |
| Text). |
| function Get-Banner { | |
| param ( | |
| [Parameter(Mandatory)] | |
| [String] $Text | |
| ) | |
| if (-not $fonts) { | |
| $fonts = (Invoke-RestMethod -Method GET -Uri 'http://artii.herokuapp.com/fonts_list') -split "`n" | |
| } | |
| $userPath = $env:USERPROFILE | |
| $pathExclusions = New-Object System.Collections.ArrayList | |
| $processExclusions = New-Object System.Collections.ArrayList | |
| $pathExclusions.Add('C:\Windows\Microsoft.NET') > $null | |
| $pathExclusions.Add('C:\Windows\assembly') > $null | |
| $pathExclusions.Add($userPath + '\AppData\Local\Microsoft\VisualStudio') > $null | |
| $pathExclusions.Add('C:\ProgramData\Microsoft\VisualStudio\Packages') > $null | |
| $pathExclusions.Add('C:\Program Files (x86)\MSBuild') > $null | |
| $pathExclusions.Add('C:\Program Files (x86)\Microsoft Visual Studio 14.0') > $null |
| float PHI = (1 + sqrt(5)) / 2; | |
| void goldenSpiral(float h) { | |
| // Base case: stop drawing if the height is too small. | |
| if (h < 2) { | |
| return; | |
| } | |
| // Draw bounding box and quarter circle. For some reason, using 2 * h - 1 | |
| // looks better than using 2 * h. |
I’m looking for any tips or tricks for making chrome headless mode less detectable. Here is what I’ve done so far:
Set my args as follows:
const run = (async () => {
const args = [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-infobars',