Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




vivora

Me encanta cuando casi todo el mundo está de vacaciones, helpdesk te plantea dudas muy específicas de módulos que no has tocado en la vida, no hay ningún tipo de documentación, el código no está comentado y tienes que ponerte a mirar que hace cada cosa... empieza bien la semana

aren-pulid0

He creado un script para sacar invis de forocoches

https://pastebin.com/k5A3HV41

Las invitaciones solo salen en horas exactas es decir 16:00 - 17:00 ....

Instrucciones
Es recomendable poner el script a y 59 a funcionar por si se parase, junto con el captcha(s) de https://forocoches.com/codigo que expira en approx un minuto.

Si habéis puesto bien la hora sonará POLEEE y tendréis el código en el clipboard, pegais en el input y ya tenéis la tan deseada invitación

AVISO: El comando (linea 51) para copiar al clipboard y el del sonido depende del SO qe uses, en este caso está para MacOS y dice POLEEEE

1 1 respuesta
frekaice

#41102 Me da a mí que eso va a estar lleno de bots para vender invis

1 respuesta
aren-pulid0

#41103 no lo dudes jajajaja, los que no son programadores se piensan que hay gente que hace copiar pegar súper rápido xd

BTW lo he mejorado un poco para que entre en hilo que se abren a y 59, donde el bot puede postear a en punto, y he adececentado el código un poco que al principio era vomitivo 😆

Wei-Yu

nombres de variables en castellano

absolutely ludicrous

1 respuesta
aren-pulid0

#41105 cabrón es un script guarro hecho en 30 minutos bastante que lo comparto

1
B

mira que es tonto el vegano

Dry-Prime

En las PR os suelen mirar la complejidad ciclomatica? Me han rechazado una PR por poner un for dentro de un else que hay dentro de otro for, no quieren que ponga breaks ni returns en medio del método. El tio que pasa las revisiones es un grandisimo gilipollas pero hoy se ha superado con estas virguerias xd

2 respuestas
frekaice

#41108 :rofl: A menos que el código sea una virguería no solemos decir nada. Lo que puedes comentar es que te sugiera la solución si no le parece bien, y le pasas a él la responsabilidad.

1 respuesta
Fyn4r

un for dentro de un else que hay dentro de otro for

A ver xD

1 respuesta
Amazon

#41108 ponle continues jsjejseje

Dry-Prime

#41109 #41110
https://imgur.com/a/49Fgnq2

No sé, se lo he pasado a mis compañeros y a nadie le parece mal pero este tio se lo ha tomado como si fuera una grandisima mierda muy mal optimizada y que no sé programar. Lo he probado a hacer con recursividad con una flag y tampoco le ha gustado. Dice que así no está bien pero no dice cómo hacerlo bien asi que welp

4 respuestas
Wei-Yu

#41112 loco que se ve el nombre

frekaice

#41112 Nombre del commit. edita

Amazon

Mierda he llegado tarde

Dry-Prime

Ups, arreglado

Troyer

#41112 yo te lo echaba para atrás por usar variables en español xdd

Ahora en serio, si se rechaza un PR lo normal es con una recomendación, no se rechaza y te quedas tan pancho.

No debería de pasar nada por usar breaks pero mi recomendación es que cuando necesitas hacer break uses while en vez de un for.

PD: Programa en inglés

1 respuesta
MTX_Anubis

#41112 A mi ese codigo me parece un truño y soy de la opinión de hacer las cosas explícitas pero es que es horrible.

const hasFirstPage = (r) => this.hasRol(r) || r.submenus.find(this.hasRol)
const firstPage = RUTAS.find(hasFirstPage)
if (firstPage) this.router.navigate(firstPage.url)
3 1 respuesta
Kaledros

¿Y con un filter no te bastaba? Además de las variables y el comentario en castellano, digo.

1 respuesta
Amazon
private findFirstAuthorizedPage(routes: RutaMenu[]): RutaMenu {
  for (let route of routes) {
    if (this.hasRol(route)) {
      return route;
    } else if (route.submenus && route.submenus.length > 0) {
      const authorizedSubroute = this.findFirstAuthorizedPage(route.submenus);
      if (authorizedSubroute) {
        return authorizedSubroute;
      }
    }
  }
  return null;
}

private getFirstPageByRole(): void {
  const firstPage = this.findFirstAuthorizedPage(DICCIONARIO_RUTAS_MENU);
  if (firstPage) {
    this.router.navigate([firstPage.url]);
  }
}
private getFirstPageByRole(): void {
  let authorizedRoutes: RutaMenu[] = [];
  for (let route of DICCIONARIO_RUTAS_MENU) {
    if (this.hasRol(route)) {
      authorizedRoutes.push(route);
    } else if (route.submenus && route.submenus.length > 0) {
      for (let subroute of route.submenus) {
        if (this.hasRol(subroute)) {
          authorizedRoutes.push(subroute);
        }
      }
    }
  }
  if (authorizedRoutes.length > 0) {
    this.router.navigate([authorizedRoutes[0].url]);
  }
}
private getFirstPageByRole(): void {
  let queue: RutaMenu[] = DICCIONARIO_RUTAS_MENU;
  let firstPage: RutaMenu = null;
  while (queue.length > 0 && !firstPage) {
    const route = queue.shift();
    if (this.hasRol(route)) {
      firstPage = route;
    } else if (route.submenus && route.submenus.length > 0) {
      queue = queue.concat(route.submenus);
    }
  }
  if (firstPage) {
    this.router.navigate([firstPage.url]);
  }
}
2 1 respuesta
Dry-Prime

#41117 Con el while creo que tendría el mismo problema, si pongo como condición que ha encontrado firstPage, tendría que poner una flag por si no se encuentra (que puede darse el caso) y este hombre no quiere flags tampoco .

#41118 Me dices que es un truño y luego vas y me pones una variable que se llama r? La madre que te pario xd pero si, se ve mucho más limpio así, lo probaré gracias.

#41119 No que yo sepa porque el array tiene varios niveles de submenus y tengo que comprobarlos todos.

#41120 El primer ejemplo tampoco le gustaría porque tiene returns en mitad del método, eso es hasta peor que los breaks. En el segundo recorres el array entero cuando realmente tampoco hay necedidad, el primero que encuentre manda. El tercero tiene buena pinta, lo probaré también gracias.

3 respuestas
Kaledros

#41121 Pues haz un stream, ¿no?

Amazon

#41121 ya por eso le pedí a chatgpt que me lo rehiciera de otra manera, esa tampoco me moló

Aun así, return early pattern 10/10

MTX_Anubis

#41121 Es una lambda, nadie pone nombres a los argumentos de una lambda xD

De todas formas estoy viendo que no te va a devolver el submenú (me pasa por no leer bien xD). Haciendo un flatten se puede seguir haciendo de forma bastante elegante.

// esto lo haces cuando arranque así lo haces una sola vez dando por hecho de que es una constante.
const flattenedRoutes = RUTAS
  .flatMap(r => [r, ...r.submenus])

const firstPage = flattenedRoutes.find(this.hasRol)
...

Y si no pues con un while sin tantos condicionales dentro de ese for ya que no quiere early returns (que no lo entiendo pero bueno, yo siempre que puedo los uso)

1
JuAn4k4

Como se implementa hasRole(page) ?

Dependiendo de eso tienes soluciones mejores.

De todas formas, no debería estar ese objeto de rutas ya filtradas por si tiene o no acceso ? Es decir eso lo vas a usar seguro para luego mostrar o no las rutas en la Ui.

Si ya está calculado, puedes pillar la primera key de ese objeto y listo.

Y aún así, no hay una que todos tengan acceso ?

1 respuesta
Dry-Prime

#41125 El metodo no tiene que filtrar las rutas a las que tiene acceso el usuario sino obtener la ruta inicial del usuario por rol, osea lo primero que verá tras logarse, que es dinámico según el rol del usuario.

El código de hasRole es sólo esto:

private hasRol(menu: RutaMenu): boolean {
return menu.primera_ruta?.length > 0 && menu.primera_ruta.includes(this.usuarioLogado.rol);
}
1 respuesta
RedSpirit

Al márgen de la solución concreta, lo que no entiendo es porque te parece mal que te tiren atrás una PR si es mejorable. Personalmente prefiero que me toquen las pelotas en una PR y aprender cosas que que me dejen pasar la primera mierda que suelto. Las code reviews son una oportunidad genial de aprendizaje,

2 respuestas
TheBrotha

#41127 el tema entiendo que es porqué no aporta ninguna explicación más allá del "esta mal", a mi ahora con el cambio de curro me tiran muuuchas cosas atrás, pero siempre con comentarios sobre porqué no deberian estar así

1 respuesta
Wei-Yu

los que trabajáis con PRs y code reviews también cobráis la mitad? si tenéis la mitad de output que el sueldo vaya acorde no?

Lifecasi0

Alguien no se comió su tofu hoy.

2