Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




Lecherito

#27360 los blogs me valen porque pueder leer en diagonal, pero de los videos estoy un poco en contra xD. Son lentos escribiendo y toda la pesca

2 respuestas
isvidal

#27361 x2 y ha disfrutar.

Yo he descubierto que me ayudan mucho mas que una lectura en diagonal de la docu

1 respuesta
Fyn4r

#27361 también es cierto que soy de los que va pasando el vídeo con la flecha xd

1 respuesta
MTX_Anubis

#27354 Pues sí tienes razón porque hablaba de cabeza. De todas formas, lo que estaba asentado entonces eran las N-Layers y salvo los que usaban ActiveRecord que acoplaban el acceso a datos al modelo, el resto usaban su capa DAO y su capa de Servicios (haciendo finalmente los modelos anémicos y fijate si es viejo que ya Fowler tiene una entrada de ello del 2003). Los Framework de los que hablan vinieron a asentar 2 cosas: ActiveRecord y convención sobre configuración, no patrones que ya lo estaban.

De hecho es que el puto libro de Eric Evans de DDD es del 2003 y todas esta mierda del N-Layers, MVC y DDD son más viejas que el Sol.

desu

Ando preparando un streaming sobre el tema. Estoy pensando en este titulo: "system design para fperos, que no saben lo que es un puntero ni una vm ni una gc panda de anormales"

A ver si ma;ana a las 11h lo tengo.

En tu canal de confianza.

El lugar donde los <140IQ y cuenco arroncistas os podeis sentir como en casa.

1 respuesta
MTX_Anubis
#27358desu:

hay otro youtuber famosete que hace videos de "AI" (que no tiene ni putisima idea) que tambien hace eso, coge un articulo y te lo traduce XD no aporta nada XD

son incapaces de crear contenido, solo saben ladrar y ladrar y ni entienden lo que dicen.

Pues no te veas conferencias españolas que son todas mierdas fusiladas otros famosetes. Salvo los que hacen cosas de verdad y te hablan de lo que hacen (si puedes ver algo de TinyBird adelante, para mi esa gente es de lo mejor que hay en españa)

B

me mola el título

Lecherito

#27363 #27362 es mas, es que a veces antes que a la documentacion, voy al github a ver el codigo xddd

B

Yo uso Nanopb ... :B

laZAr0

Un fpero violó a mi padre y mató a mi perro. Aiuda

B

#27365 Si me enseñas cosas no me encuentro "como en casa", soy fpero, yo no aprendo... ese es mi estado "natural".

r2d2rigo

Cuando algun dia os sentais mal por ser unos fperos pensad que la podriais haber cagado mucho mas:

2
desu

Voy a analizar los primeros 8 minutos.

Primera pregunta del minuto 0 al 3:05

Preguntan si los DTO de comandos son immutables, porque se ponen getters? porque no hacerlo publico y ahorrarte ese codigo?

Su respuesta: un sin sentido, un sin sentido de bobadas por no entender que cojones es un getter/setter ni su motivación histórica. Hablan de clean code, buenas practicas y tradeoffs ... no lo transcribo. miradlo vosotros mismos. las tonterías de SOLID y demás bobadas de siempre.

respuesta correcta: el motivo por el cual se usan los getters es por las librerias y frameworks de reflection de lenguajes como java, c# y demas... hoy en dia no son necesarios. de hecho en lenguajes modernos son malas practicas porque no tienes oop como en go o rust. en go i.e lo que se fuerza es a poner el nombre del field como te llegara en el DTO para que el serializer/deserializer lo haga bien.

type User struct {
    Name   string `json:"name"`
    Type   string `json:"type"`
    Age    int    `json:"Age"`
    Social Social `json:"social"`
}

en rust teneis https://blog.logrocket.com/json-and-rust-why-serde_json-is-the-top-choice/

Es decir, hacer getters/setters solo depende del lenguaje, si es un lenguaje viejo lo utilizaras, pero no para proteger tus dtos o tonterias asi. es por motivos de reflection que se arrastran desde hace 20 a;os... Mejor no hagas estos patrones anticuados. Yo recomiendo el estilo de go y no usar reflection.


segunda pregunta en 3;18

como hacer un login o peticion, cuando "no esperas una respuesta" al usar "commandbus"

La pregunta la re escribo. La cola es async, si algo tarda o envias un command a un bus, no puedes bloquear y esperar. Es la gracia de la cola. Por tanto como harias un login o algo del estilo?

su respuesta: primero el ricitos no ha entendido que es un commandBus y dice una chorrada. su amigo pelado le corrija al instante... "que el commandbus es asíncrono y es la puta gracia de nuestros cursos ricitos".

Justo después me he perdido, de repente el ricitos le da la razón al otro, el otro dice hay commandbus sincronos y asincros y esa es la clave, el ricitos dice exacto, como si esa hubiese sido la respuesta que quería dar cuando la cara de gilipollas mientras le contestaba no decía lo mismo e inmediatamente se va por la ramas.

Se va por las ramas el ricitos pero mucho, se pone ha hablar un caso donde el cliente le manda toda la info de un usuario para el caso de uso. El calvito, en lugar de corregirle, le sigue le rollo.

Se siguen liando, el calvito le sigue echando le;a al fuego. La pregunta no era esa. La pregunta era como gestionar un login en un bus asíncrono... Pero se lían y se lían. Nada que decir.

"Pues perfecto, siguiente duda".

respuesta correcta: el servicio devuelve un id para consultar y luego lanza la petición a la cola... que es el protocolo asíncrono habitual. podéis consultar por ejemplo el dise;o de api de google https://google.aip.dev/151 https://google.aip.dev/152

Otra alternativa es tener stream/sse/sockets. aunque por defecto la guia de google no recomienda estas estrategias pueden tener sentido en ciertas peticiones.

la respuesta mas correcta seria. depende del caso de uso. en algunos puedes tener un sse abierto esperando la respuesta o error. otros te devuelve la id con info y metadatos para que el cliente decida como actuar.


Dos preguntas en 8 minutos sobre sus cursos y su contenido. Dos respuestas completamente erróneas donde no han respondido lo que les preguntan ni han dado argumentos sólidos. Y no lo han hecho porque no entienden ni lo que les han preguntando ni lo que en sus cursos explican.

NO TIENEN NI PUTA IDEA.

1 respuesta
Ranthas
#27373desu:

el motivo por el cual se usan los getters es por las librerias y frameworks de reflection de lenguajes como java, c# y demas... hoy en dia no son necesarios.

Te voy a dar la clave para la eterna discusión de los getter/setter: olvidalo. Nadie, absolutamente nadie hoy en día entiende para que es un getter/setter; simplemente aporrean el teclado, o peor aún, usan Lombok y a campeonar.

Te pongo un ejemplo que me viene fresquito:

public class SomeDTO {
    private final String attr1;
    private final int attr2;

public SomeDTO(String attr1, int attr2) {
    this.attr1 = attr1;
    this.attr2 = attr2;
}

// getters
}

El DTO en cuestión es una representación de cualquier mierda que necesita el front, no tiene lógica de negocio, simplemente atributos para que el front pinte un registro de una tabla o vete tú a saber que mierda. Pues al rato uno de los masillas preguntando por qué está hecho así, que luego no puede inicializar con constructor vacío + llamar a los setters para rellenar los atributos.

La primera vez que le explicas que si el DTO siempre tiene que estar inicializado y no se va a modificar, entonces debe tener únicamente un constructor que se encargue adecuadamente de la inicialización y no permitir la modificación, pues bueno, lo achacas a que el pobre es solo del FP. La septuagésima novena vez pues ya pasas y que haga lo que quiera.

Luego vienen los lloros porque claro, cuando tienes un DTO con tropecientos atributos con constructor vacío + setters, el idiota de turno se deja algo atrás, y desde luego, suda de hacer tests, pues está claro que algo acabará saliendo mal. Y ni se te ocurra plantear usar un Builder, porque entonces tendrás el dichoso Builder hasta en la sopa.

2 respuestas
desu

#27374 Esto en muchos frameworks de java y c# te va a petar. necesitan un constructor vació si o si. que es peor aun. el constructor vacio es para tener copias entre referencias que extiendan de otras clases en runtime. el puto sida asqueroso de las jerarquias y oop.

al final es uno de los muchos males que ha dejado la oop en la programación... uno de los canceres que sufrimos y parece difícil de olvidar por la cantidad de gente sin estudios que hay en la industria.


no tienen ningún secreto, se necesita una referencia para llamarla en runtime para meter el atributo que lee, se estableció el standard getFieldName, el código busca la referencia al get fieldname y le pasa el fieldname que ha parseado a la referencia invocándolo.. fin sin trampa, fácil para auténticos bobos... pero hoy en dia? lol

pero claro, haz esto entender a un fpero que esta ocupado comiendo tofu o leyendo el manifiesto comunista. no hay tiempo para aprender como funciona la jvm o la oop por dentro. eso es demasiado chungo y no lo necesitan para nada. luego a picar sobre ingeniería como auténticos retrasados mentales. mejor hacer un poco de clases abstractas y jerarquías complejas y luego llorar porque c# no esta parseandole bien los dtos y c# es una mierda.... ayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy

en fin que ya paso de los de codely, les he dado demasiadas oportunidades porque los fperos del hilo dicen que en verdad si dominan y que los videos de youtube son mas light de broma. no no saben. no tienen ni puta idea de nada de lo que hablan, acertaran algo de potra pero ni entienden lo que repiten como loros, y tu tienes menos idea aun por recomendarlos. se ríen en tu puta cara, se te caen los mocos y te ayudan a que te los comas. espero que nadie haya pagado dinero por sus cursos de mierda.

1 respuesta
MTX_Anubis

#27374 Además sobre los DTOs, en el video lo dicen mal; confunden público con inmutable.

Si haces los atributos inmutables no tiene ningún peligro que sean públicos, no hace falta "Confiar en la responsabilidad del equipo" como dicen. Subnormal, si una vez inicializados no se pueden modificar.

@desu cuando montamos una plataforma de cursos; mejor, podríamos montar una plataforma para critira otras plataformas.

3 respuestas
Ranthas
#27375desu:

Esto en muchos frameworks de java y c# te va a petar.

Si ya lo sé, llevo con Spring desde 2009; este caso en concreto es un DTO que no está relacionado con Spring; el caso de uso es llamas a la DB -> obtienes Entity -> mapeas Entity a DTO -> devuelves DTO al front.

En todo ese proceso, no necesitas en absoluto constructores vacíos, ni setters ni pollas, pero venga los masillas dale que te pego con la misma cantinela. Si es cierto que las entities (estamos hablando de Hibernate) REQUIEREN UN CONSTRUCTOR VACÍO + GETTER/SETTERS, exactamente por lo que comentas: mediante reflexión, mapea las columnas de la DB a los atributos del entity por el nombre del atributo, o bien, usando el nombre que hayas puesto en la anotación @Column. Yo, por convención, siempre uso esta anotación, aunque la columna en DB se llame igual que el atributo.

#27376MTX_Anubis:

Si haces los atributos inmutables no tiene ningún peligro que sean públicos, no hace falta "Confiar en la responsabilidad del equipo" como dicen. Subnormal, si una vez inicializados no se pueden modificar.

Mi ejemplo, el tener los atributos privados es indiferente; puedes tenerlos públicos con la keyword

final

, ya que solo se modifican en la inicialización, y solo se inicializan en el único constructor que necesita los parámetros para ejecutar la operación.

Además, es que tiene ventajas como asegurarte de que el objeto se inicializa siempre de una misma manera y además, está siempre en ese mismo estado; no te hacen falta tests siquiera; la propia construcción del objeto es su prueba formal. Pero que si quieres arroz Catalina, mañana revisaré los pull requests del masilla nuevo y todo lleno de putos setters, constructores vacíos y fallos en el frontend porque llega la información sin inicializar correctamente.

2 respuestas
Wei-Yu

Cómo odio tener líneas que pasan del número de columna máximo que tengo definido. Que son cosas que o no se pueden romper o si las rompes se leen peor, pero me quedo un rato mirándolas fijamente porque me salta el autismo.

p.d: desu muerdealmohadas

#27377 imho si se puede evitar no uses anotaciones en los modelos de dominio, no sé si el fw de turno que usas te deja indicarle los mapeos desde fuera pero es mucho mejor así.

*editado porque no sé escribir, aunque tampoco lo he mejorado mucho.

1 1 respuesta
desu

#27376 Hacia donde SI a ha avanzado esto de public es en el tema de módulos, análisis estático, implementación de traits/interfaces. Por ejemplo en Go y Rust.

Dependiendo de donde declares las cosas las vas a tener que implementar donde toque. Esto se por los módulos.

Ademas el tema de visibilidad publico y privado se usa como input en el analizador estático.

De nuevo esta gente no sabe lo que es un modulo, mejor dejarlo.

Cuando los lenguajes les jodan la estructuras de carpetas para hacer hexagonal haber que inventan en 10 a;os... HAHAHAHAHAH

Por suerte la comunidad que desarrolla cosas serias no hace ni puto caso a estas buenas practicas ni estos patrones de dise;o. Solo son ideas, practicas y patrones para fperos en empresas paco comiendo su cuenquito de arroz y picando CRUDs. Cuando tu vida profesional es esta autentica porqueria entiendo que necesites estar inventandote patrones y sobre enginieria para sentirte un ingeniero de verdad. HAHAHAHAHAHAHAHAH

#27377Ranthas:

Hibernate

los orm y demas van mal por la OOP.

en el futuro no tendremos estos problemas gracias a que los lenguajes contemporáneos ya no la llevan.

el problema? los fperos estan re inventando frameworks en ese estilo de anotaciones con decoradores que te obliga a hacer estas guarradas HAHAHAHAHAHHA es increible la verdad

Ranthas

#27378 Esa anotación es propia de las clases de dominio, no se pueden usar fuera de ellas (al arrancar el Spring Context con Hibernate si escanea una anotación @Column fuera de una clase anotada con @Entity te dará un error).

1 respuesta
Wei-Yu

#27380 en sisharp por ejemplo con el entiti freimwork tienes dos formas de declarar ese tipo de bindings, via anotaciones en el propio modelo o utilizando la fluent api que te lo bindea al cablear todo el ORM

en vez de meterle [Key(GenerationStrategy=noséquémovida)] como atributo al Id e indicarle todas las mariconadas dentro del modelo lo declaro fuera y de cara a migrar es mucho más cómodo la verdad (te lo dice uno qeu lleva 2 meses migrando de una versión de .net a otra xd)

yo reconozco que no me acaba de gustar del todo la movida porque se me hace algo fea y no me acabé de acostumbrar aún pero sólo le veo cosas buenas si consigues mentalizarte de cómo está orquestado por debajo y cómo lo separas a nivel de código... en el ejemplo que uso picas más líneas por cómo está diseñada la API pero entiendo que eso es un detalle más de implementación que conceptual

1 respuesta
desu

A ver si podeis mirar el codigo... de un googleado y dedicandole 30 segundos a buscar una clase que parece relevante con el tema de mappeo...

https://github.com/hibernate/hibernate-orm/blob/main/hibernate-core/src/main/java/org/hibernate/mapping/Component.java

private Setter injector(Property property, Class attributeDeclarer) {
		return property.getPropertyAccessStrategy( attributeDeclarer )
				.buildPropertyAccess( attributeDeclarer, property.getName() )
				.getSetter();
	}

no se que me da mas asco, en injector, el declarer, el strategy o que el strategy sea un metodo get de property que le pasa un argumento XD.

AHHAHAHAHAHAHAHHA

Ranthas

#27381 Pues no, en hibernate y sus implementaciones, como JPA, no hay nada parecido. En las versiones primigenias se hacía todo ese "cableado" en un XML de configuración, así que realmente no estamos tan mal.

Y si, el que no se consuela es porque no quiere

1 respuesta
Fyn4r

El gato dando clases y poniendo tochos es como Yoda pegándose con Dooku, todos sabemos que controla, todos esperamos que haga algo y cuando actúa, el cabron no defrauda

1
frekaice

Yo solo diré que recientemente entro un junior en el equipo y su primer proyecto ha sido una mini aplicación que expone una API. Le preparamos un template con algunos ejemplos y a la semana nos hemos encontrado con una arquitectura hexagonal de +130 ficheros, todo el template básico que tenía se lo ha cargado para tener esta versión "que es mejor". Over engineering en estado puro :rofl:

r2d2rigo

Desu hablando de C# sin haberlo tocado siquiera???? Me pinchas y no sangro.

1 respuesta
B

.

Kaledros

#27352 Llevo literalmente un mes metido más a fondo en tema de eventos, colas y mensajería, así que seguramente esté equivocado, pero allé voy.

Hasta donde yo sé, el caso de uso más típico (y recomendado) para eso son sistemas reactivos en los que los servicios no se comunican, simplemente publican cosas y quien quiera que lo escuche (patrón Observable de toda la vida). Eso simplifica muchísimo añadir servicios nuevos, sólo tienes que configurar de qué logs escuchan y a qué logs publican. Y además esos logs te sirven para reconstruir todas las transacciones del sistema en caso de catástrofe, pero eso es otro tema.

El caso es que eso te añade una complejidad y una flexibilidad que la mayor parte de aplicaciones no necesitan. Te ponen el ejemplo de un e-commerce cuando salvo que seas Amazon, EBay o AliExpress tu tienda de mierda no va a necesitar un sistema de comunicación asíncrono cuando alguien te compre lo que sea que vendas en tu storefront hecho con un framework de JS, hazlo todo por http y vas que ardes. Si tienes 50 servicios que no se conocen, no se hablan, que se comunican asíncronamente y es un requerimiento poder escalarlo al doble de eso en el futuro entonces sí, cáscale un Kafka y te olvidas, ahí te soluciona más problemas de los que te da. Pero para lo demás es un poco overkill.

1 respuesta
desu

#27386 No necesito tocar c# para saber como funciona internamente. De hecho la ultima vez ya te demostré que sabia como funcionaba mejor que tu. Es lo que tiene no ser un fpero y entender las cosas por dentro. Por esto precisamente se va a la universidad, donde aprendes los fundamentos y luego eres capaz de hacer cualquier cosa. Es la diferencia entre aprender computacion y programación VS aprender a hacer un CRUD en c# y un front en react en tu centro de estudios "superiores".

Te puedo decir cosas que me cuestan mas, erlang por ejemplo. la beam tengo una intuición mas superficial y no te se justificar todas las decisiones de dise;o de erlang y elixir a partir de su funcionamiento. Pero bueno, tampoco me costaría mucho mirarmelo. No deja de ser una VM. A ti en cambio, el cambiar de lenguaje se que se te atraganta mas porque tus neuronas hacen overflow.

Tampoco nadie en la vida va a esperar de un fpero que sepa programar mas de un lenguaje. asi que tate manso.

#27388 Gracias por tu comentario porque lo has hecho con buena intencion. pero no has respondido absolutamente nada que sea relevante. de hecho has respondido la misma porqueria que digo que no se debe responder.

"el caso mas tipico y recomendado" por quien y porque recomendado? recomendado bajo que criterios tecnicos?

Ponme un benchmark de trafico cola vs api gateway vs service mesh. que contemple en la comparativa los nodes requeridos. los recursos utliizados por la infra (brokers + dlock, side cars, api gateway) en relacion a los requeridos por tus servicios => eficiencia de recursos.

Con un throughput y uso de recursos creo que ya estaria bien para empezar. Un segundo paso seria hacer chaos engineering para saturar la red y ver como se comporta cada uno de los casos en situaciones de problemas reales que nos podemos encontrar. Cuanto se tarda en recuperar consistencia despues de caidas de varios nodos? ademas esto implica replicacion, cuanta? coldstarts vs dumpeos tambien me interesaria.

En fin, temas tecnicos basicos que no vas a leer porque sinceramente, esto solo lo han probado las faangs y 4 unicornios contados. el resto solo copian o hacen sobre enginieria como el analfabeto medio de c# picando patrones abstract factory.

Despues de unos dias mirando este tema creo que ya veo la luz, y basándome en los resultados de faangs y demas engineering blogs creo que ya lo tengo bastante pillado. pero me gustaría tener sus datos privados de las pruebas. sino mis conclusiones no van a ser muy diferentes del anormal que hace CQRS porque lo ha visto en un video de codely, yo hare codely porque creo que las FAANGs lo usan por X,Y,Z motivio. Pero no podre demostrarlo (nadie puede al parecer kekekekek)

2 respuestas
Kaledros
#27389desu:

Ponme un benchmark de (...)

Es que eso no son concerns relevantes para el 99% de los casos de uso. Para la inmensa mayoría de gente que va a implementar una tecnología le interesan aspectos más pragmáticos: ¿va a añadir valor al producto? ¿Sabemos usarla o estamos aprendiendo? ¿Es escalable? Son concerns de management y de coste/beneficio. Hay muy pocos casos donde una benchmark te vaya a decidir una tecnología y desde luego esos casos no se dan en software empresarial.

Estoy de acuerdo (me tendré que duchar después de esto XD) contigo en que la mayor parte de veces hacerse sólo esas preguntas y no indagar más termina con la tecnología incorrecta sólo porque el tío al cargo se empeña y la gente que lo tiene que aprobar no sabe ni qué es un integer, pero hay un término medio entre tomarse una decisión estratégica como si fueras a invadir Polonia y pasar de todo y poner el cazo a final de mes.

Por cierto, con "recomendado" no me refería a que venga un señor con autoridad y te lo recomiende, me refiero a que para ese caso de uso concreto lo más recomendado por sus propias características es esa tecnología. Es como si te dijera que para hacer una web lo más recomendado es HTML, no lo recomienda nadie, es que es para lo que sirve XD

1 respuesta