Centers of Gravity (Frontlines, #8)
|
|
Acá está el video, después lo transcribo y charlamos.
Parte de mi participación en la audiencia sobre lenguaje inclusivo. No se escucha, pero agregue lo de Irán porque no tienen pronombres que indiquen género, pero parece que eso no garantiza igualdad de derechos. pic.twitter.com/7xemJEAkgz
— Sandra Pitta (@spitta1969) August 8, 2022
... para poder comunicarnos, para poder entendernos entre nosotros.
Ese, esa, ese consenso, esa convención es fundamental cuando uno enseña porque para transmitir conocimiento con claridad ehhh que esa convención tiene que ser respetada, no?
El lenguaje como herramienta de comunicación la usan ambas partes. Si una de las partes se rehúsa a adaptar su manera de hablar porque "es la correcta" le está dando prioridad a su autoridad antes que a la comunicación. Los alumnos ceden en su lenguaje TODO EL TIEMPO, justamente porque no tienen la autoridad.
Eh, a mi me parece que eh, justamente ese tipo de eh, de situación es muy importante -- especialmente en los niveles iniciales de la educación -- que esta convención, que estas convenciones tienen que ser respetadas.
Los buenos docentes, en cambio, prefieren comunicarse con sus alumnos, porque prefieren usar el lenguaje como herramienta de comunicación y no como herramienta de imposición de autoridad.
Nosotros estamos atravesando en este momento lo que yo considero que es una de las mayores tragedias educativas que vivimos en la Argentina y no podemos darnos el lujo de, eh, introducir cambios morfológicos, artefactos que sus cuyas consecuencias no conocemos.
Conocemos las consecuencias de negarse a aceptar los cambios que suceden en el lenguaje? Bueno, sí. Una de las consecuencias son docentes con un lenguaje impostado, que dicen "palabras alusivas" en el "solemne acto" por el "natalicio del general".
Otra es la falta de conexión entre los alumnos y el contenido que se les enseña.
Lo digo desde mi posición de lego que nunca dió clases en nivel inicial, la misma que tiene la farmacéutica Pitta, que jamás lo hizo tampoco.
Lo que nosotros tenemos que hacer es eh, realmente garantizar la mejor educación posible para para los niños, para las niñas, para los adolescentes, para que esa educación los habilite a ellos a defender en el futuro sus derechos.
Por ejemplo el derecho a que se respete su manera de hablar y no se los trate como ciudadanos de segunda? Ok.
Ahora, hay dos puntos, bueno, hay un punto que a mí me afecta fundamentalmente que es eso de que -- a ver, yo entiendo perfectamente bien que los cambios en, que los idiomas no son inmutables, que los idiomas son dinámicos, que hay cambios, pero esos cambios nunca se dan de arriba hacia abajo. Los cambios que son de arriba hacia abajo son autoritarios.
Y por eso propone que haya una regla de que no se use lenguaje inclusivo en las escuelas, regla que será impuesta por el gobierno a través de las autoridades educativas y que en caso de no ser cumplida tendrá las sanciones correspondientes.
Epa.
Si usteden han leído, este, la novela de 1984 de Orwell [ininteligible] la Neolengua casualmente se refiere a eso, no? A tratar de controlar el pensamiento a través de una Neolengua. Los cambios se dan naturalmente en la sociedad.
Sí, pero cuando se te cruza un cambio vos querés mantener el status quo. Tengo que admitir que a Orwell no se le ocurrió el concepto de una lengua que NO cambia para mantener una sociedad anquilosada e inmutable.
Y esos cambios, eh, si si son validados mismo por la sociedad son incorporados y son después aceptados, bueno, ya conocemos todo ese procedimiento entonces todo lo que venga de arriba hacia abajo, a mi entender es autoritario y no deberíamos aceptarlo.
¿Entonces por qué quiere que haya una norma "de arriba hacia abajo" prohibiendo el lenguaje inclusivo? Ah, porque solo es autoritario cuando lo hace otro.
Y, eh, quiero referirme a algo que pasó, bueno, el día ese que no pudimos hablar justamente eh, a mi me había llamado mucho la atención algo que estaba pasando en Irán, y lo traigo por algo en particular. Ese día habían salido las mujeres en Irán a sacarse el [hijab] que es una, es un, es algo que las oprime, es eh, realmente es una sociedad que, que, que penaliza inclusive ser mujer, la comunidad LGBT no puede salir a protestar en Irán.
Mas allá de que ese párrafo es, sinceramente, una ensalada ... en twitter explicó que lo dijo porque en Irán los pronombres no tienen género y de todas formas no hay igualdad de género.
Desempaquetemos esa pelotudez gigante así vemos las pelotudeces mas chiquitas de las que está construída.
1) En Irán no hay pronombres con género.
Bueno, en farsi no los hay. No es lo mismo el país que el idioma, Pitta. Pero no los hay en farsi moderno.
¡En farsi antiguo sí! Porque justamente la pérdida del género en los pronombres es un proceso muy común en los lenguajes.
Proceso que sospecho, estamos empezando a presenciar en el castellano.
2) No tener pronombres con género no evita la opresión
Nadie dijo que así fuera. Hay tantos problemas lógicos en esa afirmación que va a llevar un par de párrafos.
Al ser una sociedad más igualitaria, hay grupos de personas que piden que esa igualdad se refleje en el lenguaje.
Es decir: igualdad => pronombres sin género, no al revés.
Al afirmar que "como en Irán no tienen pronombres con género y de todas formas hay opresión" eso tiene alguna relevancia en la situación local en Argentina está cometiendo una bruta afirmación del consecuente.
Finalmente ... si leen todo lo que dijo. Alguien me explica cuál era el "punto que [a ella la] afecta fundamentalmente"?
PD: Alguien que en una presentación en un ámbito formal, pudiendo leer, es así de improvisada e incoherente ... vergüenza ajena.
I have been running a personal server at my office for a little while (See 1 and 2) where I run a number of containerized services.
Mi server "producción" Pinky, en su forma final. Radxa Zero con 4GB de RAM y 32GB de eMMC, 2 HDDs de 1TB en RAID1 con btrfs. pic.twitter.com/ckhPloQXPO
— Roberto H. Alsina (@ralsina) August 4, 2022
Since I had it, I wanted to add a way to easily deploy my own experimental code so I can do quick "servers" for things I am playing with.
I could just create my code as, say, a flask app and create containers for them and deploy them that way, and then add ingress rules in my gateway and ... it gets exhausting pretty fast.
What I wanted was a way to run my own Heroku, sorta. Just write a bit of code, run a command, have it be available.
After googling I found a solution that didn't require me to implement a k8s cluster: faasd. The promise is:
So, minimal config, ease of deployment, no need to constant tweaking of my gateway. All good!
Except ... faasd doesn't play along with Docker. Both use containerd and cni and other things as their backend, and faasd says that really, they like specific versions so they should install them, not the system, and then running docker gets pretty dicey.
So, I could just get a second server. It's not like I don't have more small computers.
Tengo un problema.
— Roberto H. Alsina (@ralsina) August 2, 2022
Pero también tengo soluciones! pic.twitter.com/u1qj5d21Cj
But my server has spare capacity! So I don't WANNA START A SECOND SERVER!
Also, this is going to often be toy code I have not carefully vetted for security, so it would be better if it ran in isolation.
So? I needed a VM.
My server is a Radxa Zero. It's smaller than a credit card. It has, however, 4 cores, and 4GB of RAM, so surely there must be a way to run a VM in it that can isolate Faasd and let it run its wonky versions of things while the rest of the system doesn´t care.
And yes, there is!
Firecracker claims that you can start a VM fast, that it has overhead comparable to a container, and that it provides isolation! It's what Amazon uses for Lambda, so it should be enough for me.
On the other hand, Firecracker is a pain if you aren't a freaking Amazon SRE, which I am really not, but ...
Ignite is a VM manager that has a "container UX" and can manage VMs declaratively!
So I set out to run ignite on my server. And guess what? It works!
It's packaged for Arch, which is what I am using, so I just installed it, run a couple of scripts to create a VM:
[ralsina@pinky faas]$ cat build.sh
#!/bin/sh -x
# Create and configure a VM with faasd in it
set -e
NAME=faas
waitport() {
while ! nc -z $1 $2 ; do sleep 1 ; done
}
sudo ignite create weaveworks/ignite-ubuntu \
--cpus 2 \
--memory 1GB \
--size 10GB \
--ssh=id_rsa.pub \
-p 8082:8081 \
--name $NAME
sudo ignite vm start $NAME
IP=$(sudo ignite vm ls | grep faas | cut -f9 -d\ )
waitport $IP 22
ssh -o "StrictHostKeyChecking no" root@$IP mkdir -p /var/lib/faasd/secrets
ssh root@$IP "echo $(pass faas.ralsina.me) > /var/lib/faasd/secrets/basic-auth-password"
scp setup.sh root@$IP:
ssh root@$IP sh setup.sh
# Login
export OPENFAAS_URL=http://localhost:8082
ssh root@$IP cat /var/lib/faasd/secrets/basic-auth-password | faas-cli login --password-stdin
# Setup test function
faas-cli store deploy figlet
echo 'Success!' | faas-cli invoke figlet
[ralsina@pinky faas]$ cat setup.sh
#!/bin/sh -x
set -e
apt update
apt upgrade -y
apt install -y git
git clone https://github.com/openfaas/faasd
cd faasd
./hack/install.sh
If you run build.sh
it will create a ubuntu-based VM with Faasd installed, start it, map a port to it, setup SSH keys so you can ssh into it, and configure authentication for Faasd so you can log into that too.
Indeed it does!
There is one and it's pretty bad.
If the server closes badly (and that means: without explicitly shutting down the VM), the VM gets corrupted, every time. It either ends in a "Running" state in ignite while it's dead in containerd, or the network allocation is somehow duplicated and denied, or one of half a dozen other failure states at which point it's easier to remove everything in /var/lib/firecracker
and recreate it.
You betcha! Here's an example from https://nombres.ralsina.me, if I run build.sh
it builds it, deploy.sh
deploys it, the actual code is in the busqueda/
and historico/
folders.
It's very simple to write code, and it's very simple to deploy.
If I found a better way to handle the VMs I would consider this finished.
Because I want to be able to deploy random python code easily to my own server, I have setup a "Function as a Service" thing, called faasd (think of it as poor people's AWS lambda). More details on how, why and how it turned out will come in the future. BUT: this explains how to fix the unavoidable headache CORS will give you.
Situation:
The Faasd server runs in some machine, which is proxied by a Nginx server available at https://faasd.ralsina.me
Apps are just HTML pages somewhere inside either https://ralsina.me or some other similar domain.
You will setup your function, test it out using curl, be happy it works, then set it up in your web app and get an error in the console about how CORS is not allowing the request.
CORS is a way for a service living in a certain URL to say which other URLs are allowed to call it. So, if the app are in, say, https://nombres.ralsina.me and the function lives in https://faas.ralsina.me then the ORIGIN for the app is not the same as the ORIGIN for the function, so this is a "Cross Origin Request" and you are trying to do "Cross Origin Resource Sharing" (CORS) and the browser won't let you.
There are a number of fixes you can try, but they all come down to the same two basic approaches:
Make it so the request is not cross-source. To do that, move the function somehow into the same URL as the page, and bob's your uncle.
So, just change the proxy config so nombres.ralsina.me/functions is proxied to the faasd server's /functions and change the page to use a request that is not cross-origin, and that's fixed.
I don't want to do this because I don't want to have to setup the proxy differently for each app.
Have the function return a header that says "Access-Control-Allow-Origin: something". That "something" should be the origin of the request (in our example nombres.ralsina.me) or "*" to say "I don't care".
So, you may say "Fine, I'll just add that header in my response and it will work!". Oh sweet summer child. That will NOT work (at least not in the case of Faasd)
Why?
Because web browsers don't just make the request they want and then look at the headers. They do a special preflight request, which is something like "Hey, server, if I were to ask you to give me /functions/whatever from this origin, would you give me a CORS permission or not?"
That request is done using the OPTIONS HTTP method, and Faasd (and, to be honest, most web frameworks) will not process those by passing them to your code.
So, even if your function says CORS is allowed, you still will get CORS errors.
You can see this if you examine your browser's HTTP traffic using the developer tools. There will be an OPTIONS preflight request, and that one doesn't have the header.
So, the easiest thing is to add those in the proxy.
So, in my case, in the proxy's nginx.conf, I had to add this in "the right place":
add_header 'Access-Control-Allow-Origin' '*';
What is the right place will vary depending on how you have configured things. But hey, there you go.
Esto es una especie de secuela a Lo que ando haciendo de hace un mes.
Sigo haciendo lo mismo? Maso. Arranquemos con qué pasó con lo que estaba haciendo.
Hice cosas, pero decidí cambiar la CPU por una Radxa Zero ... que no anda con mi monitor, así que me creé un subproyecto de "hacer que ande".
Terminado, por lo menos a un nivel de comodidad suficiente. Solo falta publicar de alguna manera.
No volví a usar ninguna de las cosas que mencioné :-D
Sin embargo, acá está el software que nadie usa pero debieran, de este mes.
dolt una base de datos compatible con MySQL pero que vista de otra manera es ... como git?
La performance es medio falopa pero es muy piola para publicar datos. Ejemplo.
rqlite la respuesta a "Necesito usar sqlite pero no quiero mover un archivo de datos de un lado para otro"
st una terminal super liviana que no es una bazofia! Tengo un fork
Abandonado (o terminado, que es lo mismo).
No mucho
Migré mi server a una Radxa Zero una compu que tiene performance tipo raspi 4, pero en un formato físico tipo raspi zero.
Al tener más capacidad de cómputo y memoria, le metí mas servicios!
Moví todo http://nombres.ralsina.me para que se ejecute ahí. Eso implica una base de datos (rqlite) y un entorno de ejecución especial, porque no quiero que si de golpe la gente lo usa me tire abajo los otros servicios. Por eso ...
Quiero poder publicar boludeces hechas rápido en Python (o en otros lenguajes) sin tener que pensar en cómo hacer el deployment, o de si a mi server no le va a dar el cuero y me va a tirar algo "importante", o de problemas de seguridad, etc.
Entonces:
De esa manera tiene un tope en cuanto a consumo de recursos, y puedo deployear simplemente con un comando.
Si quiero hacer una notebook, obviamente eso implica diseñar la carcaza y un montón de otras cosas, por lo que he tenido que aprender sobre como hacer esas cosas.
He usado una variedad de herramientas y estoy MUY FELIZ con una que se llama CadQuery que permite crear objetos escribiendo Python!
He llegado al momento en que me siento cómodo, cuando no tengo el objeto que necesito, o tengo partes y me faltan otras, simplemente de decir "ok, la hago yo".
Quiero una webcam para octoprint, tengo un trípode viejo de micrófono, una webcam pedorra con "montura" para monitor?
— Roberto H. Alsina (@ralsina) July 14, 2022
No pasa nada, 15 minutos de cadquery, 40 minutos de impresión y tengo exactamente el trípode que quiero. pic.twitter.com/RCSzhtWSkR