Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




Dr_Manhattan

es raro estar un día por feda/dev, aprender algo leyendo y que no haya insultos, me ha molado, pero para no perder la dinámica: spiderman rojo! alemanes bla bla

2
aren-pulid0

Han salido las release notes de Go 1.22, entre otras cosas han mejorado los routing patterns

HTTP routing in the standard library is now more expressive. The patterns used by net/http.ServeMux have been enhanced to accept methods and wildcards.

Registering a handler with a method, like "POST /items/create", restricts invocations of the handler to requests with the given method. A pattern with a method takes precedence over a matching pattern without one. As a special case, registering a handler with "GET" also registers it with "HEAD".

Wildcards in patterns, like /items/{id}, match segments of the URL path. The actual segment value may be accessed by calling the Request.PathValue method. A wildcard ending in "...", like /files/{path...}, must occur at the end of a pattern and matches all the remaining segments.

A pattern that ends in "/" matches all paths that have it as a prefix, as always. To match the exact pattern including the trailing slash, end it with {$}, as in /exact/match/{$}.

If two patterns overlap in the requests that they match, then the more specific pattern takes precedence. If neither is more specific, the patterns conflict. This rule generalizes the original precedence rules and maintains the property that the order in which patterns are registered does not matter.

This change breaks backwards compatibility in small ways, some obvious—patterns with "{" and "}" behave differently— and some less so—treatment of escaped paths has been improved. The change is controlled by a GODEBUG field named httpmuxgo121. Set httpmuxgo121=1 to restore the old behavior.

Todos los lenguajes deberían tener esto en la stdlib

2 respuestas
desu

Al final el motivo por el que tener un constructor y trabajar con referencias es tan popular es porque necesitas usar código de otras personas y testarlo.

  • El tema de tener cosas a bajo nivel privadas o no, tansolo es una decision de que carga cognitiva y nivel de control sobre tu librería ceder al usuario. cuanto mas control, mas eficiencia a cambio de tener mayor carga cognitiva.

  • A nivel de testeabilidad aqui ya depende de la implementación de cada lenguaje, pero en la practica si o si, en todos necesitas punteros para poder tener interficies o pasar funciones y por tanto tener mocks.

Si tu tienes estas funciones, da igual el estilo:

struct Thing {}
func (t Thing) useThing() { }
func useThing(t Thing) { }

solo le podrás pasar un Thing, y tu quizás quieres testear este código verdad? podemos dar un paso mas y hacer esto:

struct Thing {}
func (t *Thing) useThing() { }
func useThing(t *Thing) { }

cuando le pasas el puntero ya no necesitas un Thing, necesitas un puntero que no deja de ser una dirección a memoria para la funcion a nivel sintáctico, asique si tu le pasas un nil por tu cara bonita o una dirección de memoria cualquiera, eso ya funciona en un primer nivel. Ahi las famosas NULL POINTER EXCEPTION jeje y todo el problema de la NULLABILIDAD. En caso de ser un puntero valido, el problema lo tendras porque esa dirección, al dereferenciarse y tratar de acceder al método que necesites, no encontrara la funcion... asique es tarea del compilador realizar el escáner de que esto va a ir bien...

Y es la tarea del programador hacer sintaxis fáciles de interpretar y sistemas de tipado inteligentes para que el compilador tenga la mayor potencia posible. Y de la misma manera de los usuarios del compilador, el escribir código IDIOMATICO para que este funcione lo mejor posible y detecte fallos en comptime para ayudarnos y haga el mejor compilado posible.

Imaginemos que tenemos:

interface Thing {
 func useThing()
{

struct Foo {}
func (f *Foo) useThing()

struct Bar {}
func (b *Bar) useThing{}

Ahora tanto Foo como Bar, implementan la interface Thing, (*Thing = Thing, es lo mismo, en interface no hace falta poner el * explicito) asique en el código que usa la interface, podemos usar ambos. A nivel sintáctico esto no es mas que punteros, y a nivel semántico, el compilador solo tiene que dereferenciar y mirar si estos struct tienen el método que requiere. Fácil.

func useThing(t Thing) {
  t.useThing()
 }
func main () {
   useThing(Foo)
   useThing(Bar)
{

Volviendo al principio, si trabajamos sobre structs a pelo, no podemos mockear de esta manera. Aunque existen maneras de hacerlo. Punto positivo si alguien me dice como testear sin interfaces ni punteros. PS q en Go se puede.

En conclusion, deberiamos escribir siempre el código mas eficiente posible, sobretodo cuando es una librería interna que es para nosotros mismos... cuando damos el paso de hacer algo publico, ahi ya podemos empezar a pensar en la usabilidad y carga cognitiva de nuestro código.

Y como conclusion final, tu lenguaje de mierda C#, Java, PHP es una mierda xq tiene un compilador de mierda hecho por fperos que no saben lo que es un puntero y asi os va anormales. Tenesi que poner Foo implements Thing xq vuestro de lenguaje de mierda no llega ni al nivel de Go, que mira que Go es una puta mierda... pues imaginaos.

2 1 respuesta
Kaledros
#52952aren-pulid0:

han mejorado los routing patterns

Se deben haber dado cuenta de la cantidad de gente que lo usa para CRUDs rest, porque hasta ahora era usable pero esto le da más vidilla.

#52953 Nunca lo comenté por aquí, pero la forma que tiene Go de implementar interfaces me parece muy sencilla y elegante.

type Stringer interface {
    String() string
}

type Article struct {
	Title string
	Author string
}

func (a Article) String() string {
	return fmt.Sprintf("The %q article was written by %s.", a.Title, a.Author)
}

Me recuerda a la simplicidad de las extension functions de Kotlin, que también me encantaron cuando las descubrí.

1
r2d2rigo

#52952 eso lo hace ASP.NET desde hace mas de una decada, y dotnet 5? 6? lo simplificaron muchisimo mas aun.

https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-8.0

1
TheBrotha

Esto sigue igual eh, cada uno hablando de su libro, como estan mis oldies?

2 respuestas
afhn

#52956 mi libro, luna de plutón, ya está disponible en todas las librerías de Argentina, Chile, Uruguay, Paraguay, Bolivia y Guatebuena. Sé que te va a encantar, muchas gracias.

1
desu

Thinking Forth 1984.

Coupling: A measure of how modules influence the behavior of other modules. Strong coupling is considered bad form. The worst case is when one module actually modifies code inside another module. Even passing control flags to other modules with the intent to control their function is dangerous.

Ahora busquemos la diferencia entre "framework" y "librería" de software:

The technical difference between a framework and library lies in a term called inversion of control.

When you use a library, you are in charge of the flow of the application. You are choosing when and where to call the library. When you use a framework, the framework is in charge of the flow. It provides some places for you to plug in your code, but it calls the code you plugged in as needed.

Conclusion: framework es una palabra bonita para el mal software.

GaN2

#52918 ByteByteGo es dios para system design, me tragué todos sus vídeos y material para preparar la última entrevista. Gracias por compartir majo

1 respuesta
Dr_Manhattan

#52956 ni me había dado cuenta de que no estabas xd. Todo bien, ¿qué tal tú?

1 respuesta
desu

#52959 de nada, aunque sea lo que sea seguro q yo podría explicarlo mil veces mejor. a veces se nos olvida, por mi humildad y por vuestra soberbia, que tenemos al mayor genio del siglo xxi entre nosotros.

1
afhn

Sí, y ese es wagyu

TheBrotha

#52960 Aquí haciendo cosas de hombre racializado

1 respuesta
Fyn4r

#52963 no deberías forear mientras llevas la moto de glovo

1
Wei-Yu

In the mystical world of SpotifyCoolClone Pandora there are a team of people in Squads who work on a specific problem together, like Authentication.

But authentication is just one part of a bigger function in the business called Onboarding so they have Tribes for these - an Onboarding Tribe with squads in them.

These squads though consist of both front end warriors and backend warriors, so to bring all the front end warriors together to share their "it's never gonna be fucking adopted" ideas with each other they form Chapters, like a Front End Chapter.

But since we all know that there are technologies used by both front end and backend warriors champions like Vue, Angular, Web Assembly, Blazor etc. they created a Web Technology Guild for likeminded warriors to come together and share how only one of these tech stacks are going to be relevant in the coming years and it's Blazor you fuckwhit JS losers!

Meanwhile back in Lala Land a Product Owner, Team Lead and Stratco are knee deep in filling up a backlog with priorities for Q2 unbeknownst to the Guild of Squaddy Tribe "this shit barely worked at Spotify" Wannabe Warriors monkeying around an auditorium somewhere.

pantocreitor

Donde yo curro se organizan con el tema de las tribus y todo el tema este…
Al final no son más que equipos y jefes de distintas cosas con nombres chachis que hacen lo que tienen que hacer.

Zireael

En qué invertis el dinero que os da la empresa para formación?

3 respuestas
GaN2

#52967 en más cuencos de arroz para poder comer

Dr_Manhattan

#52967 jajajajja dinero en formación, como si a la empresa le interesase que fuese más listo

1
desu

#52967 el dinero para formación q te tiene q aprobar tu manager y el jefe de tu manager? q pereza justificar q quiero un puto libro o comprar una mierda curso online

2 respuestas
JuAn4k4

Se me ha fastidiado la entrevista para el segundo curro en paralelo, me dicen que ya cubrieron el puesto y que como había pasado todo bien si quiero seguir en el proceso en la misma empresa para otro equipo. La sorpresa viene cuando me dicen que tengo que repetir las pruebas técnicas en typescript porque el equipo es de typescript, cuando tienen las dos entrevistas GRABADAS, pero no las quieren porque programaba en Kotlin en una, y la otra porque el lead era de otro equipo y no se fían de el. La madre que los pario macho.

3 respuestas
Dr_Manhattan

yo también te haría repetirla si has usado algo de la jvm

1 respuesta
desu

#52971 vente a china

1 respuesta
pantocreitor

Llevo 3 días recibiendo ofertas de consultoras pero místicamente con condiciones muy decentes…

Ya se han cansado de vender juniors como Wozniaks???

1 respuesta
JuAn4k4

#52972 Para hacerlo en typescript ?
#52973 Tengo dos niñas

2 respuestas
Dr_Manhattan

#52975 en typescript no, va a peor xd

Sphere

#52974 Ídem, una oferta porque han encontrado mi perfil (desactualizado) en Infojobs (ya me esperaba lo peor) y valoraban 50-60k de salario. La verdad es que me ha sorprendido.

1 respuesta
Kaledros
#52971JuAn4k4:

Kotlin

¿Para backend a pelo o para Android?

1 respuesta
Zireael

#52970 No, sin aprobación. Por eso pregunto

1 respuesta
desu

#52979 si el dinero no tiene aprobación es q te lo quitan del salario

1