journalctl -u micro – Telegram
journalctl -u micro
93 subscribers
2.17K photos
210 videos
287 files
1.44K links
Esperienze e consigli di uno sviluppatore tech−unenthusiast

creation — 2021-04-29
owner — @Microeinstein

networks
@sigma_hub Σ
@ageiroumena
Download Telegram
Devo dire che è difficile passare da Python a NSIS, il quale altro non è che una via di mezzo tra noscripting e simil-assembly 😫

Esistono variabili, scope, funzioni, ma esistono anche registri, push-pop...
Per di più se ho capito bene tutto è rappresentabile come stringa, ma per trasferirle devi per forza usare StrCpy 😕
journalctl -u micro
Devo dire che è difficile passare da Python a NSIS, il quale altro non è che una via di mezzo tra noscripting e simil-assembly 😫 Esistono variabili, scope, funzioni, ma esistono anche registri, push-pop... Per di più se ho capito bene tutto è rappresentabile…
Tipo in questo snippet, l'unico motivo per cui - di $0 - viene fatto push prima e pop dopo è che questo registro viene utilizzato all'interno: come in assembly, per evitare di alterarne il valore attribuitogli da scope precedenti, lo si salva e poi lo si ripristina.

Function .onInit
Push $0

StrCpy $R9 ${sec1} ; Gotta remember which section we are at now...
SectionGetFlags ${sec1} $0
IntOp $0 $0 | ${SF_SELECTED}
SectionSetFlags ${sec1} $0

SectionGetFlags ${sec2} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${sec2} $0

Pop $0
FunctionEnd
È stato un parto ma l'ho trovato
https://raw.githubusercontent.com/KDE/syntax-highlighting/master/data/syntax/nsis.xml

Ora spero di riuscire a modificarlo per supportare diversi tipi di quotes e commenti, per poi installarlo in ~/.local/share/org.kde.syntax-highlighting/syntax
Ah btw, se qualcuno vuole cimentarsi nell'aggiungere un supporto decente alla selezione a blocco e al multi cursore, il componente da toccare è KTextEditor (e forse anche KatePart)
journalctl -u micro
Scoperto il motivo: da ~/.config/chromium-flags.conf avevo attivato --enable-gpu-rasterization. Problema è che se la GPU non regge c'è poco da fare... bisogna ricadere nel software rendering
E io che pensavo avessero trovato un modo per rilevare che ho una GPU di merda pur mantenendo dei flag attivi,
e invece avevano solo nascosto ulteriormente l'opzione per il 3D... 🙏🏻😤
journalctl -u micro
Ecco quello che stavo cercando! https://mpv.io/manual/master/#encoding Con MPV è possibile convertire i file, di default mantiene tutti i metadati $ mpv \ --audio-pitch-correction=no \ --speed=0.8 \ --o=out.mp3 \ Caramelldansen.flac
Per tagliare con precisione pezzi di film da condividere per meme:

$ args=(
# taglio di precisione
--start=hh:mm:ss.ms
--end=hh:mm:ss.ms

# no sottotitoli
--sid=no

# amplificazione volume
--volume=150

--o=out.mp4
input.mkv
)
$ mpv "${args[@]}"
Articolo un po' vecchio trovato curiosando:
Non usate strings su files non fidati
https://lcamtuf.blogspot.com/2014/10/psa-dont-run-strings-on-untrusted-files.html

E da cui poi ho scoperto un fuzzer (tipi di software che scoprono bugs facendo brute force casuale - o con algoritmi genetici - sull'input di altri software)
https://en.wikipedia.org/wiki/American_fuzzy_lop_(fuzzer)
🗂 TI(re)L che su Dolphin si può cambiare cartella dalla barra di navigazione breadcrumb, tramite scroll su un certo livello di profondità
Java moment

https://stackoverflow.com/a/7847117
https://stackoverflow.com/a/38855689

Sostanzialmente i prodotti in java di IDEA salvano sulla clipboard di sistema degli oggetti serializzati. Altri programmi come MatLab e Netbeans recuperano questi oggetti e tentano di analizzarli, ma non trovano le classi, quindi stampano errori a caso
Solarized Light Micro.icls
90.2 KB
Ho fatto una variazione dello schema colori cambiato il gamma di tutto (ovviamente in automatico)
Python è così dinamico che è possibile accedere a tutti i nomi (variabili, funzioni, ecc) attraverso stringhe (esempio obj.__dict__['attr']).

Peccato però che non ha una funzione built-in nameof() come C#...
(esempio nameof(my_var)'my_var').

Le implicazioni?
1. In un refactoring c'è il grosso rischio di non includere anche quelle stringhe inserite a mano
2. Non c'è alcun obbligo di esistenza di quel nome: se a un certo punto la variabile puntata cambia nome, quella stringa rimarrà così com'è e niente (ne interprete, ne IDE) segnerà errore.
3. Non poter usare tutte le funzionalità dell'IDE quali ad esempio Find Usages
Cursed python

>>> __builtins__['dict'] = list
>>> a = dict()
>>> a += [4]
>>> a
[4]

Potrebbe tornare utile per fare monkey-patching di cose built-in dato che non è possibile modificarne direttamente i nomi tipo dict.__getattr__ = ...
>>> class js_dict(dict):
# Useful to use attribute names instead of strings

def __getattr__(self, key):
if not key in self:
return
return self.__getitem__(key)

def __setattr__(self, key, value):
self.__setitem__(key, value)

def __delattr__(self, key):
self.__delitem__(key)

>>> __builtins__['dict'] = js_dict # noqa
>>> a = dict(name='my', value=3)
>>> a.name
'my'

Molto bene 😎
Edit: https://docs.python.org/3/reference/executionmodel.html#builtins-and-restricted-execution
Ho appena scoperto che da Python 3.8 esiste typing.Protocol: una classe da estendere molto base non istanziabile, per creare stub utilizzabili negli static-type checkers.

In questo modo è possibile ottenere dei warning nel caso in cui si stiano facendo stronzate, pur mantenendo la dinamicità di python ❤️

Esiste pure il decorator @typing.runtime_checkable che permette ai Protocol di essere usati in controlli runtime isinstance() e issubclass() come se fossero vere classi

https://docs.python.org/3/library/typing.html#typing.Protocol