what if we stopped using multi-dimensionnal arrays to store views on linear arrays ?

What of my first lesson of C was about matrices in C. Why ? I was studying physics and we were taught what we needed.
Since I left school, this first lesson still seems weired nowadays. Take for instance a bitmap, either the one from a picture or the raw video RAM you use, the matrice is a view.

You want the point at column 10 row 21 on a 1980 x 1200 screen ? Just get the value at the offset of 21 x 1980 + 10 and you have your pixel in 2D notation.

So that's exactly what I coded : a matrix that is a view on a linear table hence kicking a lot of possible optimization :
  • first think : by allocating a linear array you are less likely to spread your allocation on faraway memory pages (less page fault)
  • for rank by rank operation (logical, addition, substraction, research of occurences) you can probably use SIMD optimization (requires a better backend than a « list » (ex : array))
In my actual life I never saw any usage of any matrices of more than 2 dimensions, so as a lazy person I did not generalized for nth dimension. During the coding, I decided to have both
matrix[x][y]
and
matrix[(x,y)]
notation being equivalent. However in the process, I discovered that for addressing it may change nothing, but for slice it is another story :
matrix[(x,y):(dx,dy):(sx, sy)]
return a sub matrix of dimension dx, dy starting from coordinate x, y by step of sx, sy. It does not look phenomenal, but, how do you express a subset of n nth dimensional array with the current [::] slice notation ?
Because, of course, reading the code I see a door for extrapolating a sane consistent behaviour with 2 arbitrary dimensions to arbitrary sized array.

After all, « natural » Nth dimension array makes sense like a ... video frambuffer wich is a matrix view in terms of pixel, but remember a pixel is an array of values (R,G,B, alpha).

With this notation getting the Blue followed by the alpha from a frambuffer would look like :
screen = matrix(map(int,open("/dev/fb0", "rb").read()), dim = (1980,1020, 4))

# get blue (rgba[3]) and alpha (4) at position 243, 743 would be written : 
blue, alpha = screen[(243,743, 3):(243, 743, 4) ]

You could also imagine with a 3D variant do « CPU intensive and slow » blitting (which does beat the purpose of a blitter (video instruction used to manipulate fast memory zone, including sprite handling).
Juste imagine we could implement an elliptic safe behaviour such as we could write :
screen[(dx, dy):(dx+width, dy+height)] = sprite([ [1, 2, ... ]) # sprite being width x height size
All the code being a view, we could actually memory map (mmap) my inner property __val__ to an actual raw framebuffer. which could be usefull for my hello world done by manipulating the raw framebuffer to actually print each letters :D

By writing about something I coded on a wit, without finality, I discover it may actually be usefull in stopping to waste gazillions of Joule dereferencing references of data scattered among memo provoking huge « page fault » storms. The actual solution is not perfect, because it eliminate only one level of dereferentiation, however by using the venerable array (to try), I expect significant gains without even thinking of importing numpy.

For now I have the following test passing regarding ACTUAL usage of the lib regarding addressing memory consistently and extracting patches of memory.
ex :
matrix([[1,2], [3,4]])[(0,0):(0,1)] == [[1,2]] # return first row
matrix([[1,2], [3,4]])[(0,0):(1,0)] == [[1],[3]] # return first column

m= matrix([[1,2],[3,4], [5,6], [7,8],[9,10]])

assert m[1][0] == m[(1,0)]
assert m[3][1] == m[(3,1)]
assert m[0] == [1,2]
assert m[(0,0)]==1
assert m[(0,1)]==2
assert m[(1,0)]==3
assert m[(1,1)]==4
assert m[(0,0):(0,1)]==[m[0],]
# cannot be expressed with regular slice 
assert m[(0,0):(1,0)] ==  [[1], [3]]
assert m[(0,0):(1,1)]==[[1,2], [3,4]]

assert m[(0,0):(2,1):(2,1)] == [[1, 2], [], [5, 6]]
assert m[(0,0):(3,0)] ==  [[1], [3], [5], [7]]
assert m[(0,1):(3,1)] == [[2], [4], [6], [8]]
assert m[(0,0):(3,0):(2,1)] == [[1], [], [5]]
assert m[(0,0):(3,0):(3,1)] == [[1], [], [], [7]]

This kind of notation for writing matrices makes writing matrix multiplication a little more readable :
def mul(m,n):
    mx,my=m.dim
    nx,ny=n.dim
    v = mdim([0,] * (mx * ny),  dim = (mx, ny))
    stride=my-1
    for x in range(mx):
        for y in range(ny):
            zz  = sum(map(lambda e: e[0]*e[1],zip(
                m[(x,0):(x,0+stride)][0],  # xth line from m
                mdim(n[(0,y):(0+stride,y)]).__val__, # yth row from n
            )))
            v[(x,y)]=zz
    return v
It is useless, but I'm pretty proud because, it really is useful, was coded in a day and passed most tests I could think of.

Annex

The code :
class DimensionError(Exception):
  pass

class matrix(object):
    def __eq__(self, tocomp):
        other=tocomp
        if type(tocomp) != type(self):
            other=matrix(tocomp)
        return (self.__val__, self.dim) == (other.__val__, other.dim)

    def __init__(self,a,**kw):
        if kw.get("dim"):
            self.__val__ = a
            self.dim = kw["dim"]
        else:
            self.__val__,self.dim = list(self.flattener(a))

    def flattener(self, v):
        dimy=len(v[0])
        dimx=len(v)
        ret = [ j for i in v for j in i ]
        assert len(ret) == dimx*dimy
        return  ret,(dimx, dimy)

    def unflattener(self):
        return self[(0,0): (self.dim[0]-1, self.dim[1]-1)]

    def __setitem__(self, k, v):
        if type(k)==int:
            # set nth line with slice
            raise NotImplementedError()
        for e, p in  enumerate(zip(k,self.dim)):
            i,j=p
            try:
                assert  i < = j, f"ooupla dim:{e+1} {i}>{j} "
            except:
                raise IndexError
        x,y=k
        dy=self.dim[1]
        offby=x*(dy)+y
        self.__val__[offby]=v

    def __repr__(self):
        return repr(self.unflattener())

    def __getitem__(self, k):
        x,y = 0,0
        dx, dy=self.dim
        step=(1,1)
        if type(k)==int:
			return self[(k,0):(k,dy-1)][0]

        if not isinstance(k,slice):
            x, y=k
            for e, p in  enumerate(zip(k,self.dim)):
                i,j=p
                try:
                    assert  i <= j, f"ooupla dim:{e+1} {i}<={j} k={k}"
                except:
                    raise IndexError
            off=x*dy+y
            return self.__val__[off]

        start, stop, step=k.start,k.stop,k.step
        step = step or (1,1)
        x0, xn, xd=start[1], stop[1]+1, step[1]
        if x0 > xn or xn < 0:
            raise NotImplementedError()
        y0, yn, yd=start[0], stop[0]+1, step[0]
        if y0 > yn or yn < 0:
            raise NotImplementedError()

        ret = []
        
        for y in range(y0,yn, yd):
            ret+=[[],]
            for x in range(x0, xn, xd):
                # row padding
                # I HATE PYTHON for [[],] * n => shallow copies !
                # if not for this bug, padding would be as simple as 
                # if y-y0>=len(ret):
                #    ret+=[[],] * (y-y0-len(ret)+1)
                for k in range(len(ret)-1, y-y0):
                    ret+=[[],]
                ret[y-y0]+=[self[(y,x)]]
        return ret

def transpose(md):
    res = []
    for x in range(md.dim[1]):
        res+=[[0] * md.dim[0],]
        for y in range(md.dim[0]):
            res[x][y]=md[(y,x)]
    return matrix(res)

def mul(m,n):
    mx,my=m.dim
    nx,ny=n.dim
    v = matrix([0,] * (mx * ny),  dim = (mx, ny))
    stride=my-1
    for x in range(mx):
        for y in range(ny):
            #z=sum([ x*y for x,y in zip(matrix(n[(0,y):(0+stride,y)]).__val__,matrix(m[(x,0):(x,0+stride)]).__val__)])
            zz  = sum(map(lambda e: e[0]*e[1],zip(
                m[(x,0):(x,0+stride)][0],  # xth line from m
                matrix(n[(0,y):(0+stride,y)]).__val__, # yth row from n
            )))
            v[(x,y)]=zz
    return v

m= matrix([[1,2],[3,4], [5,6], [7,8],[9,10]])

assert m[1][0] == m[(1,0)]
assert m[2][0] == m[(2,0)]
assert m[1][1] == m[(1,1)]
assert m[3][1] == m[(3,1)]
assert m[(-1,-1)]==8
assert m[0] == [1,2]
assert m[1] == [3,4]
assert m[2] == [5,6]
assert m[3] == [7,8]
assert m[(0,0)]==1
assert m[(0,1)]==2
assert m[(1,0)]==3
assert m[(1,1)]==4
assert m[(2,0)]==5
assert m[(2,1)]==6
assert m[(0,0):(0,1)]==[m[0],]
assert m[(0,0):(1,0)] ==  [[1], [3]]
assert m[(0,0):(1,1)]==[[1,2], [3,4]]

assert m[(0,0):(2,1):(2,1)] == [[1, 2], [], [5, 6]]
assert m[(0,0):(3,0)] ==  [[1], [3], [5], [7]]
assert m[(0,1):(3,1)] == [[2], [4], [6], [8]]
assert m[(0,0):(3,0):(2,1)] == [[1], [], [5]]
assert m[(0,0):(3,0):(3,1)] == [[1], [], [], [7]]
assert m[(0,0)] == 1
assert m[(1,0)]==3

try:
    print(m[(6,1)])
except IndexError:
    pass

from time import time
m= matrix([[1,2],[3,4], [5,6], [7,8],[9,10]])
n= matrix([[11,12],[13,14], [15,16], [17,18],[19,20]])
start=time()
for i in range(100_000):
    c=matrix(list(map(lambda x:x[0]+x[1], zip(m.__val__, n.__val__))), dim=m.dim)
print("addition with zip")
print(time() - start)
start=time()
for i in range(100_000):
    dx,dy=m.dim
    c=[]
    for x in range(dx):
        c+=[[0] * (dy), ]
        for y in range(dy):
            c[x][y]=m[x][y]+n[x][y]
print("addition with full loops")
print(time() - start)

m = matrix([[1,2,0],[4,3,-1]])
n = matrix([[5,1],[2,3],[3,4]])
assert mul(m,n)==[[9, 7], [23, 9]]

n,m = m,n
assert mul(m,n) == [[9, 13, -1], [14, 13, -3], [19, 18, -4]]
m=matrix([[1],[-1],[1], [1]])
n=matrix([[-10,2,3, 4],])
assert mul(m,n)==[[-10, 2, 3, 4], [10, -2, -3, -4], [-10, 2, 3, 4], [-10, 2, 3, 4]]
assert mul(n,m)== [[-5]]
m=matrix([[1],[-1],[1]])
n=matrix([[-7,2,3],[1,-2,3],])
assert mul(m,n)==[[-7, 2, 3], [7, -2, -3], [-7, 2, 3]]
assert mul(n,m) == [[-6], [6]]
m= matrix([[1,2],[3,4], [5,6], [7,8],[9,10]])
assert m[1] == [3,4]
assert mul(transpose(m),m)==[[165, 190], [190, 220]]
assert transpose(m) == [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
assert m[1] == [3,4]

Python oddity #12

In [31]: [[],[]] == [[],] * 2
Out[31]: True

In [32]: a,b=[[],[]], [[],] * 2

In [35]: a[0]+=[1]

In [36]: a
Out[36]: [[1], []]

In [37]: b[0]+=[1]

In [38]: b
Out[38]: [[1], [1]]
Basically python tells that x + x = 2 * x but since [[],] * 2, does not do a deepcopy but a shallow one, modifying b[0] also modifies b[1]. I get caught by this infuriating inconsistency once every 4 years and I always swear it won't catch me again... until next time. The why and how at cpython level is detailed here

Student (Gosset W) about biodiversity : the good, the bad and the better

I love Student, I hate Student.

I love William Gosset aka Student

I love his most brilliant paper : The probable error of a mean. This paper revolutionized experimental science : it tells randomness from correlation with so few samples required it is a piece of cake to do science.

Basically, the paper states that there are random variations on controlled axis, like when you brew a beer (Student was QA for guiness) regarding the quality of grain, the quality of the yeast, the temperature of the water, the room .... and that if a mean tries to sabotage your QA in Guiness through a simple test we are gonna detect you.

Ok, the first time I read the paper, it was my feeling that basically it is an applied mathematics HOWTO detect non randomness.

Easy to read, nice examples, and at the end a table which modus operandi is given on how to estimate your condidence given your numbers of parameters and how much samples you have. The kind of math physicists expect from mathematicians : given with a notice that is simple to follow : THANK YOU Gosset !

This paper let you read for each input parameters, each measures a matrix of « is random/maybe correlated ». If your measure looks like a galton board it's random, if you have more than one peak, ALERT !

Multimodal is the way we call these camels' backs that appears with non randomness.

The beauty of Student is that thanks to his mathematical studies we can now cross X input times Y parameters in N samples and have X times Y tests made.

It's a massive parallelisation of screening for results.

Student's Test are probably massively used by all the controlers of casinos and « opérateurs de jeux de hasard » around the world to check if by any chance randomness is biased.

This paper is one of the many breakage that followed Darwin paper, when science WAS political. Queen's and King's saw randomness as a perfectly suitable mechanism for selection as an attack on their genome.

Kings et Queens love species deterministicsly sorted, hierarchized, that shows the human at the top of the tree, and the nobility at the top of the human through cross breeding.

It's probably Darwin that inspired physicist to have more interest in telling randomness from non randomness, because they probably came out with the first exploitable data.


You see after Mendel, and before, the catholic church had a habit of noting details about their wine and cultures (what, when they flower, how much they produce). The catholic church was bureaucratic before bureaucracy was invented.

These are the same records that states that grapes are flowering sooner, producing more sugar and mass thus being correlated to the parameter « HOTTER ».

With Student methodology, it is really hard to be climatoscepticists. It is also good for detecting bullshits, that's the derived work by Fischer called the p-values used as the kind of CRC-32 of what to expect in randomness if we try to measure by ourselves. So much information encoded in such a small data is what real intelligence is compared to artifical ones.

I hate Student aka William Gosset



Having a stand on the usefulness of randomness in selection of the species was risky, especially in England. The bitch Victoria was colonizing the world in the name of the superiority of her race, and had a hobby of applied racism with dogs, cats and betting on her horses « pur sang » the week end. The free mason, thought of themselves as (pseudo) scientifics too, applying a certain physics to a certain society. The church too had a word in science since they were basically the best places in the world providing the teaching of it.

Randomness in science came as a mawashigeri in the face of some biggots having the pretention to know everything by determining the root causes of everything.

Let's say that when for making explosives you need good quality insurance and thus taboo or not taboo, you teach the math of probabilty and statistic.

Having a stand on randomness in 1900 was not apolotical, it was tainted by the pseudo-science of justifying the racism (cf this motherfucker of Cuvier). Basically Darwin was seen as an anti-slavery/anti-colonialist/anti-aristocrat with or without his consent or willingness.

So let's say that Victoria loved her point of view of race superiority so she found a scientific paper scientific paper on the topic : « eugenics review » that was applied science for selecting better species.

Don't let be fooled by the absence of already tabooed experimentation on humans, because 1) Victora was an assumed racist, 2) eugenism was coming with another « science » called bio-socialisme, a society where the proven most optimal laws of Nature are applied for the « better good ».

If Darwin is right, the royalist inspired bio-socialisme dies in tremendous agony.

In this context of a certain fear on the mad men beginning to play with the genome of corns (maïze), wheat in a contexte of famine, Student was asked :

« hey, what about bio-diversity, if Darwin is right about natural selection, are we not taking risks reducting the variations pool given by genetic variability ? »

To wich he answered :
To sum up: Winter has in this experiment succeeded, by continuous mass selection, in producing two races of maize, one of which has more than twice, and the other less than one-third, the normal oil content.

...

And so we reach the conception of species patiently accumulating a store of genes, of no value under existing conditions and for the most part neutralized by other genes of opposite sign. When, conditions change
the species finds in this store genes which give rise to just the variation which will enable it to adapt itself to the change.

...

It follows that the change appears to have produced the variation which it has merely selected from among those potentially present. ‘Thus we can reconcile the view held, amongst other people, by the late Walter Heape, that the environ- ment produces the required variation, with the older Darwinian selection of random variations, to which it appears at first sight to be diametrically opposed.
No worries, eugnism is risk less because the loss of biodiversity is compensated by mother Nature (How do you measure ?) Hence agricultural eugenism (that still prevails as we speak) is good because without a risk.

And I love william again



Remember, the part I have hidden ?

When, however, conditions change, unless too suddenly or drastically, the species finds in this store genes which give rise to just the variation which will enable it to adapt itself to the change.
There is a stark reminder by the eugenist William Gosset that lack of biodiversity is threatening us right now.

When this guy is the corner stone of the justification for human selection of species of agricultural interest it may be a good idea to listen ot him.

Human selections of agricultural species DO NOT WORK when the changes are too drastic according to him. And the actual climate changes can be considered as drastic for plants.

If we trust him, we should check with experimental solid evidences that our selective model beats random selections in case of drastic changes.

L'entreprise est toujours à visage familiale.

Je me souviens d'un épisode de « twilight » (la 4é dimension en Français) où des extra terrestres descendaient sur terre pleins de bonnes et de belles promesses, disant qu'ils étaient comme une famille venue « pour servir les humains ». Et la chûte amenée par les cryptanalistes et linguistes est que leur devise est un adage de cuisine humaine.

Et bien, si vos dirigeants viennent de famille dysfonctionnelles, il est normal que le visage « familiale » de l'entrerprise soit dysfonctionnel.

Pensant à mon exemple familiale dont notre devise intergénérationnelle partagée est On choisit ses amis, pas sa famille, ça fait du sens.

Tenez, le père de mon père, il était le petit costaud d'une famille creusoise. Lui il aimait les études et il était doué. Juste, sa famille pour récupérer quelque terre et un peu de reconnaissance familiale d'un riche cousin il voulait l'envoyer devenir ouvrier agricole sous payé chez le cousin.
Alors papy, quand on lui a fait le coup de l'âne qu'avance plus le jour du brevet du collège, il a fugué pour faire sa vie.

Vagabond, il a été un peu fourni de petit job par les marines stationnés en France, puis, de fil en aiguille il est devenu maçon, puis tailleur de pierre, puis ingénieur d'étude BTP en cours du soir loin des siens qu'il n'a jamais revu.

Mamie Simone, elle aussi son daron était gratiné : un gros con de collabo action française, violent, drogué cocaïnomane et consommateur de parties fines à Genêve. Un Haute Société Protestante violent gratiné au Gotha qui menaçait sa propre fille avec un 9mm quand il avait trop bu.

Je vous épargne la gallerie familiale, mais disons que même si ça fait longtemps que ne parle plus à mes parents pour raisons familiales, je dois admettre qu'il y a un mieux perceptible dans les valeurs familiales qu'ils ont eu comparé à certains aînés. J'ai des reproches à leur faire certes, mais rien d'aussi extrême, et je vous en ai épargné des pires.
Étant moi même parent, je suis redevable à la tradition de pouvoir comme mes parents être potentiellement plus affreux que la moyenne mais pouvoir dire : comme mes parents je ne suis pas parfaits, mais comme eux, j'ai l'intention de faire mieux que la génération précédente, et que devenu vieux mon enfant me parle.

Bref, certaines traditions familiales présentent un avantage concurrentiel quand il s'agit de s'auto congratuler car on fait mieux que les générations d'avant.
Vous voyez, l'entreprise ne ment pas quand elle parle de famille, elle oublie qu'elle est plus dans la tradition de la haute société protestante, de la bourgeoisie dont la tradition conservatrice est loin de toute valeurs de recherche de la réalisation de soi même, mais plus proche de celle de la compétition entre membres de la famille.

Une bonne famille chauvine, fière d'elle même dont chaque enfant qui se plaît à se dire unique et émancipé ouvre toujours la conversation en disant « dans la famille on a que des ingénieurs et des médecins, et les ingénieurs c'est ceux qui ont échoué ». Quelle preuve de détermination à être émancipé quand on s'assied comme digne résultat de la reproduction sociale.

J'ai plus de respect pour daddy le vagabond devenu ingénieur que tous ces branleurs qui ne se sont comme seule mérite que celui de naître, j'ai plus de respect pour ma grand mère qui a choisi le déclassement social plutôt que la reproduction familiale mortifère que pour ces glandus.

Dire que l'entreprise est à caractère familiale est pour moi qui suis idiot une annonce claire de la couleur de ce qui m'arrive dans les dents : un endroit qu'il faut tenter de quitter au plus tôt car il est basé sur de la compétition entre-frères et sœurs pour être le chouchou du patron.

Écoutez, amies entreprises, si il y a bien une chose que je demande à l'entreprise c'est de ne pas ressembler à une famille, ça me stresse avant même de rentrer dans vos locaux.

Moi ma tradition familiale, c'est celle de papy René qui m'a appris que pour réaliser ses rêves et ne pas se retrouvé exploité dans un champs pour le profit de ses proches, il faut savoir se barrer de sa famille radicalement.

Visulazing your ldap tree structure.

I made « bla » as a tool for sysadmins. One of the interest of using python as a DSL is being terse.

As previously said, my toy LDAP domain is dc=home.
In |0]: list(map(print,walk(
	"dc=home",
	lambda e:"--".join(
    	map(
        	lambda e:"\"%s\""%e,e.entry_dn.split(",")[::-1])
))))

"dc=home"--"ou=group"
"dc=home"--"ou=group"--"cn=staff"
"dc=home"--"ou=people"
"dc=home"--"ou=people"--"uid=boss"
"dc=home"--"ou=people"--"uid=louis"
"dc=home"--"ou=people"--"uid=manager"
which copy pasted in this graphviz template :
graph toto {
    concentrate=true;
    node [shape=rectangle]
# paste your stuff here
}
gives you a tree representation like this :
And if you load your credentials for the cn=config you will have :
It really is a cheap trick, but cheap tricks are helpful when oversold as a consultant and needing to understand the structure fast.

la philosophie et le sophisme c'est la même merde : du hooliganisme intellectuel.

Le sage se dit sophos en grec, et c'est un adjectif s'accordant au masculin, LE SAGE n'existe pas, il y a sophia, LA sagesse qui est le substantif de l'adjectif sage accordée au féminin.
On sait toujours pas pourquoi c'est féminin, mais ça importe peu.

En -500 à Athènes quand la tribune publique secouait la démocratie, deux groupes d'orateurs que l'on pourrait catégoriser de partis politiques pour coller à nos pratiques modernes se tapaient desuus.

Plutôt à droite les philosophes et plutôt à gauche les sophistes qui pour faire valoir leurs arguments abusaient de l'argument de personne les uns contre les autres.

Si vous voulez connaître l'ensemble des techniques oratoires usées pour pourrir un débat, qui ont inspirées les catalogues d'arguments fallacieux établis, il suffit d'ouvrir les dialogues de Socrates.

Il en abuse en temps que personnage fictif ou réel tout en accusant les sophistes de les employer.

Disons que les philosophes : Socrates (si il a existé tel que décrit), Platon et leurs potes étaient à la pensée ce que le GUD est au mantien de l'ordre. Des hooliganes dont le titre même du club explicite ce qu'ils sont : ils ne SONT PAS SAGES, ils AIMENT le SAGE. Leur vision du monde établie lors de banquet avec les puissants de ce monde bourgeois, artistocrates hiérarques, possesseurs de bordels et mercenaires est simple : ce n'est pas au faible de diriger la cité, mais à celui qui a le plus de mérite, souvent de la naissance et qu'il faut donc faire tomber la démocratie pour instituer une République bien plus « égalitaire » au vu du mérite absolu (>- celui d'être amoureux de la sagesse objectivement), ce n'est pas une lutte de classe, mais une lutte d'idéale pur, parfait et absolu.

Je sais pas pour vous, mais moi j'appelle ça l'ancêtre de la langue de bois et du foutage de gueule affiché en 4 mètres par 3 mètres.

Et donc en face il y avait une opposition centre gauche que l'on dira « sociale démocrate » qui étaient les sophistes. Le isme de sophisme a la même signification inchangée par rapport à l'époque, c'est celui qui fait de la sagesse une doctrine, un courant de penser régulé.

De quel droit des Humains se donneraient ils le droit de juger ce qui est sage alors que pour eux la sagesse est de Nature Divine ?

Protagoras (le sophiste) répond ; parce que l'Homme est la mesure de toute chose.

Protagoras se fait avocat du droit du Peuple à juger ses dirigeants car au final, plus que la Vertu ou non des dirigeants, ce qui importe c'est la souffrance du peuple.

Et là Socrates, sort le RPG7 de la pensée intellectuelle, cible Protagoras, et pré-citant Marx qui n'avait pas encore eu cette brillante idée, envoie l'argument de personne ultime contre protagaras:

« Mon coco, je te vois défendre le plouc, mais toi, toi-même fils d'aristo, peux tu échapper à la classe sociale dont tu es issu ? »

« Dans ce beau système de tribunaux le plouc n'a t'il pas besoin de la maîtrise de la rhétorhique que nos éducations nous ont donné ?»

« Ami sophiste, pile tu gagnes, face tu gagnes et tu viens d'inventer le métier d'avocat qui se fait du pognon en trahissant sélectivement sa classe : tu es juste un gros socio-traître intéressé.

Et les cours de philosophie de lycée en France se conclut par « les sophistes c'était juste des mercenaires de la pensée donc la pensée philosophiques c'est la meilleure ».

Ce qui je pense est un raccourci que je ne partage pas concernant la victoire de la philosophie sur le sophisme. Je dirais qu'utiliser la pensée sophistes ou philosophique c'est embarquer un compas qui suit une direction qui est bien pratique dans la vie, mais décider de se taper dessus a priori sans lever le nez du compas, pour savoir si tu vas au Nord ou au Sud.

Littérallement, c'est comme Laurel et Hardy, une injonction à avoir des avis « a priori ».

Tenez, c'est ça la politique : « politique migratoire : c'est important ou pas ? ». Normalement si vous êtes politisés vous avez une réponse.

Pour info, pour Platon, la cité utopique a une obsession priotaire qui est l'immigration et choisir entre le bon barbare et le mauvais barbares.

Vous allez me dire, vu que je semble détester Platon, je suis pas d'accord avec lui, et comme un sophiste je vais dire « ce n'est pas important ».
Je vais vous dire que j'en sais rien et que je n'ai pas d'avis a priori, je n'ai pas à choisir entre sophisme et philosophie, j'ai le droit de m'en foutre quand j'ai strictement aucun pouvoir ou données sur le sujet.

Voilà, fuck les philosophes, fuck les sophistes, on est pas obligé de recycler les mêmes pauvres débats foireux qui avaient lieux il y a 2500 ans car nos élites ont lus Socrates et Marx et n'ayant pas d'imagination nous ressortent les mêmes descendants hooligans des sophistes et philosophes singeant la démocratie pour le profit des classes possédantes d'un coté par héritage immobilier (philosophes), de l'autre culturel (sophistes) un faux choix. À la fin le seul choix qu'on a c'est de penser la société sous domination clanique héréditaire.

Je suis patarchiste : je revendique le droit à la pensée patatoïdale qui réfute l'hérédité implicite comme mérite tant des sophistes que des philosophes.

Et j'enfonce le clou, tant philosophes que sophistes règnent sur les débats (droites et centre gauche/socio démocrates) nous ne pourront jamais penser une démocratie.

À mort les philosophes, à mort les sophistes, vive les patates.

Faisons de l'informatique un outil aussi révolutionnaire que la presse de Gutenberg

Souvent, l'idiot regarde la presse de Gutenberg comme étant l'innovation, alors qu'en réalité ce qui a permis la diffusion du savoir a été la simplification des graphies des langues.

D'un seul coup en simplifiant la lecture, la presse a augmenté le nombre de lecteurs.

De même, après l'invention du stylo bille bic, les courbes de létrisme ont explosé grâce à l'arrivée sur le marché de la première imprimante une buse peu dispendieuse : LE STYLO \o/.

Ces révolutions qui ont menacé des pouvoirs basés sur l'appropriation des savoirs (le clergé pour Gutenberg, la bourgeoisie intellectuelle pour le BIC) ne se sont pas vu menacées par le contenu des livres, mais par le fait que plus de gens arrivaient à exprimer leurs idées, à y accéder PERSONNELLEMENT.
L'accès aux écrits est non seulement une manière de comprendre comment pense l'autre (je gerbe toujours en lisant Platon dont j'entends les échos dans les discours modernes conservateurs), mais aussi de diffuser des savoirs qui ont une pertinence pour celui qui les écrits.

La trame de sélection pour l'édition moderne à ISBN que ce soit en france ou ailleurs sélectionne des CSP+ par exigence, ensuite, le marketing CSP+ sélectionne par choix les sujets qu'ils pensent intéresser la masse.

Nul part l'édition « classique » ne permet à moults auteurs de propager leurs savoirs par sélection à l'entrée.

Qu'est-ce que les maisons d'éditions savent si je ne suis pas intéressé à réparer un John Deer, un fascicule sur savoir faire son pain, un pamphlet sur la disparition scandaleuse de la moutarde jaune dans les moutardes dites de Dijon ?

Qui dit aux maisons d'édition que je serais pas intéressé à lire les histoires en orthographes cassées de gens qu'on entends pas? Des sdfs, gitans, des populos ... ?
Moi, j'aime l'argot trucullent et gouleyant de la rue, pas le français prononcé avec les lèvres pincées comme une duchesse.

Je PAIRAIS même pour lire des nouvelles écrites dans MON dialecte du français : celui de la rue.

On est en 2024, on a internet, et je dois me fader des niouzes de personnes fameuses qui découvrent que la gloire ne protège pas de la mort et de la maladie.

Puté, je suis pas sûr que l'évidence du caractère mortel de notre existence soit une vraie nouvelle neuve et je comprends même pas ça prend plus de place que les morts évitables.

Tu sais, comme les accidents du travail.

Bref, ce qui importe dans les révolutions liées au savoir, c'est de simplifier l'accès à l'édition par les pékos.

Le pire, c'est qu'en 2024, on a genre la plus grande proportion de lettrés dans TOUT les pays du monde historiquement.

Il faut être simple : tant que le marché fournit l'offre en écrit, en livre, on a un filtre anti-populo qui est là.

La nouvelle révolution doit être comme une ronéo du web : un outil qui permet de servir en masse du contenu, mais aussi de l'indexer pour le retrouver.

À l'unif, la bibhalle avait un panneau « tout livre mal rangé est un livre perdu ».

Alors vous allez me dire pourquoi suis-je attaché au livre à l'époque du web ?

Et bien parce que les études US sur la réussite des étudiants en informatique en fonction des cursus tant à établir que les étudiants formés à l'ancienne (analogique) réussissent mieux les tests d'informatiques que ceux formés à l'informatique.

Le livre restant l'un des meilleurs moyens d'acquisition de savoir contemporain, l'évidence est de penser au livre.

Et, justement, après 70 ans de code jetés à la face du monde dans une course à la complexité délirante : les ordis sont enfin en mesure d'apporter la qualité d'impression maximale que l'on peut attendre d'algorithme depuis un format d'entrée que tous peuvent écrire.

Cette révolution c'est pandoc + markdown.

Le « markdown » est une manière de structures son texte qui rende ce qui est rendu et ce qui est signifié proche et minimaliste.

Un chapitre
===========

Les paragraphes sont séparés par des retours chariots.

On peut faire de la mise en forme ainsi *italique*, **gras**, and `monospace`.

On fait des listes à points ainsi

  * un
  * deux
  * trois

> Les blocs sont ainsi
> 
> sur plusieurs lignes ...
```
et on peut mettre des blocs monospace : 
                            ___________________________
                   /|  /|  |                          |
                   ||__||  |       Please don't       |
                  /   O O\__           feed           |
                 /          \       the trolls        |
                /      \     \                        |
               /   _    \     \ ---------------------- 
              /    |\____\     \     ||                
             /     | | | |\____/     ||                
            /       \|_|_|/   |    __||                
           /  /  \            |____| ||                
          /   |   | /|        |      --|               
          |   |   |//         |____  --|               
   * _    |  |_|_|_|          |     \-/                
*-- _--\ _ \     //           |                        
  /  _     \\ _ //   |        /                        
*  /   \_ /- | -     |       |                         
  *      ___ c_c_c_C/ \C_c_c_c____________         
```      
qui donne :

L'informatique, permet enfin de combiner là où honnêtement de djikstra en passant par torvalds, gates, RMS, knuth ... tout le savoir faire du clavier à l'imprimante pour tourner nos ordinateurs en ronéo.
markdown + pandoc, c'est le stylo bille BIC pour pondre du livre bien présenté, permettant enfin aux masses populaires d'éditer et imprimer leurs livres.

aussi va-t'il falloir, pour accompagner une luxuriance prévisible de référence inventé une classification décentralisées des œuvres. Un index gigantesque conçu pour tourner vite sans trop avoir peur des DDOS.

Évidemment, que ce sujet qu'il me semble un peu tôt à élaborer contient déjà dans ma tête une solution sous la forme d'entrées LDAP dédiées à cette nouvelle bibliographie. Une nouvelle bibliographie qui permettrait aux gens d'être facilement trouvables sur internet avec des références uniques de bibliographies et horodatage leur permettant de prétendre au prior act. Car, il faut aussi protéger les auteurs.


Et vu que ce sont les barrières à accéder aux œuvres dont les arguties de droits d'auteurs qui empêchent l'accès aux œuvres, moi je propose de les mettre de facto en licences libres.

Et si enfin, on permettait au peuple d'écrire, sans peur d'être rejeté par une maison d'édition qui décide de qui représente un succès potentiel selon des critères claqués du cul au sol se résument au pédigré et à l'effet « vu à la télé », peut-être qu'on aurait un vent de fraîcheur dans nos cultures. Peut être même que je trouveras enfin une méthode pour apprendre l'alsacien ou l'occitan correct, peut être qu'enfin je trouveras un facicule me permettant d'identifier les plantes et les animaux qui m'entourent ? Peut être même que je trouveras un humoriste drôle à lire, ou des reportages qui parlent de nous ?

Ah ben vi, un journal, c'est-y pas un livre qu'on publie souvent ? On pourrait imaginer s'investir collectivement dans se faire une belle typographie multicolonnée en latex qui serait intégrable à pandoc les doigts dans le nez.

Imaginez des journaux qu'on vendrait à la criée au petit matin tout frais sortis de l'imprimante, les vendeurs/imprimeurs se faisant leurs marges sur la vente, les rédacteurs capables de vivre chichement en s'y consacrant quand ils peuvent.

Mon prochain défi qui aurait du sens, c'est un site pour générer de tels livres et les estampillés sans avoir de connaissances poussées en informatique.