morthon is a user on mastodon.social. You can follow them or interact with them if you have an account anywhere in the fediverse.
9b741c456c4714a3

morthon @MartinSchwein

+ si vous avez des ressources sur le fonctionnement des composants internes des ordinateurs (y compris des tous premiers) ça m'intéresse VRAIMENT ! :)

si jamais quelqu'un a une bonne ressource (même universitaire ;) ) pour apprendre l'assembleur et si possible la programmation en langage machine sur des vieux systèmes pré-90, ça m'intéresse grandement.

Je me rappelle avoir déjà fait un plus-ou-moins en ASM sous DOS quand j'étais en Première mais c'était il y a trop longtemps (et assez basique pour être honnête)

@devnull tu vois ce message ? Je suis sur mastodon.social mais je vois le tien.

@Doshirae ouais donc en gros t'utilises foldl en priorité pour les fonctions associatives, et pour les autres tu vois en fonction de tes besoins

@Doshirae (par "faire tout le reste" j'entends que foldr va mettre en attente l'opé, puis faire sa récursion qui met elle aussi en attente une opération, etc, etc, d'où éventuel stack overflow, alors que foldl ne met virtuellement rien en attente

@Doshirae mmmh en fait je me suis gouré, c'est foldl qui est tail recursive (et qui évite de bousiller le stack)

Ça s'explique assez simplement : foldl calcule z + x puis passe à foldl (+) z xs : elle fait directement l'opération d'abord puis fait le reste (récursivement)

foldr, lui, va "mettre en attente" l'opération +, puis faire tout le reste, et enfin finaliser l'opération.

Y a ce vieux cours du MIT (1986 mdr) qui l'explique bien mieux que moi : youtu.be/dlbMuv-jix8t=1161

@Doshirae

en gros

foldl (+) 0 [1,2,3] = (((0+1)+2)+3)

et

foldr (+) 0 [1,2,3] = (1+(2+(3+0)))

C'est bien une récursion terminale ouais mais je vois pas ce que t'entends par "bousiller le stack"

@Doshirae
Dans ce cas là, de quel côté met-on la pile, à gauche où à droite ?
Foldl la met à gauche :
foldl (/) 1 [2,3] = (1/2)/3
foldl (/) 1 [2,3] = foldl (/) (1/2) [3]
foldl (/) 0.5 [3] = foldl (/) (0.5/3) []
foldl (/) (0.5/3) [] = 0.5/3

foldr la met à droite en la calculant récursivement:
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)

foldr (/) 1 [2,3] = 2/(foldr (/) 1 [3])
-> foldr (/) 1 [3] = 3/1 = 3
foldr (/) 1 [2,3] = 2/3

(2/3)

@Doshirae la fonction fold sert à faire ça : fold (+) [1,2,3] = 1+2+3 = 6

Ça peut marcher en gros en faisant "ok j'ai x, la pile z et le reste de la liste xs, je vais ajouter x à z et continuer mon fold avec le reste de la liste en remplaçant z par (x+z)"
Une implémentation possible:
fold f z [] = z
fold f z (x:xs) = fold f (f z x) xs
(c'est l'implémentation de foldl)

Cependant (+) est une fonction associative : 1 + 2 = 2 + 1
Mais pour des fonctions comme (/) on a 1/2 != 2/1.

(1/2)

oh mon dieu regardez il est sous linux tel un véritable hackeur mastodon.social/media/kF3rGRGH

j'ai l'impression qu'on voit pas mes pouets dans le fil public global 🤔

Le truc avec le gamin de la CM du ministère de la culture qui a piraté le compte cette nuit ça donne des sacrées perles quand même
genre il a explicitement donné son compte perso twitter avec photos de lui, dit qu'il était le fils de la CM etc, mais non, s'il a un VPN, impossible de savoir qui c'est ma bonne dame !

(des fois ce serait bien que les gens qui s'y connaissent pas se taisent un peu)

mastodon.social/media/iZ5ulzfF

exploit-exercises.com/ seemed like a good thing for beginners at first but hu. Nope. I gotta get better at Linux and C first.

@Gargron these are drawings "made" by a turing machine.
Mostly random, can have interesting /good-looking results sometimes.

morthon boosted

faut que je m'intéresse un peu à la cybersécurité tiens