¿No os ha pasado que, después de encontrar los subtítulos de una película, resulta que están desincronizados? Pues a mí más de una vez. Por lo general sigo buscando y probando hasta que doy con los que se ajustan al vídeo en cuestión. Esta vez no ha sido así. Seguramente debido a que El Principito…
Autor: Marcos
Sobrepasando el límite
Por lo que he podido probar, de momento los modelos generativos locales están lejos de acercarse al rendimiento de los modelos de OpenAI, GPT-3 y GPT-4. Por otro lado el API de OpenAI impone un límite al tamaño de nuestras preguntas que, dependiendo del modelo que empleemos, será menor o mayor. Con GPT-3.5 no puedes…
Modelos locales
Llevaba tiempo queriendo correr uno de esos modelos generativos en mi propia máquina. Libre de otras prioridades, hoy por fin he tenido ocasión de comprobar si era verdad que modelos de la familia GPT4All o LlamaCpp estaban preparados para ser consumidos en ordenadores personales. De los centenares de proyectos que han proliferado desde el advenimiento…
Preparando los exámenes
Este año me he matriculado de nueve asignaturas, una de ellas anual de modo que me ha tocado preparar diez exámenes. A diferencia de convocatorias anteriores este segundo cuatrimestre he decido estudiarlo a base de hacer tests, muchos tests. No he leído de antemano los manuales, ni siquiera he utilizado apuntes. También he prescindido de…
Bicicletas
El cerebro tiende a engañarnos haciéndonos creer que por saber el nombre de un cosa ya entendemos cómo funciona. Cuanto más cotidiano es el objeto o evento más fácil es dejarnos engañar. Todos sabemos que la luna pasa por distintas fases, lo podemos contemplar con nuestros propios ojos, ¿pero sabemos cuál es el proceso que…
Las chispas de GPT-4
La semana pasada investigadores de Microsoft publicaron un artículo en arXiv titulado «Chispas de inteligencia artificial general: primeros experimentos con GPT-4». En él sostenían que GPT-4 mostró signos tempranos de AGI, lo que significa que posee capacidades iguales o superiores al nivel humano. Luego, si lees el artículo científico, resulta que el título es un…
CPU vs. GPU
Esta mañana me ha venido a la cabeza el siguiente par de binomios: GPU/emoción, CPU/razón, así, sin venir a cuento. No recuerdo haberme planteado nunca semejante emparejamiento o leído nada relacionado. Acababa de salir de la cama, solo se me ocurre que la idea pudiera haber originado en algún sueño olvidado. De lo que estoy…
Conversando con GPT-4
Raro sería que estuvieras leyendo estas palabras y no hubieras oído hablar de ChatGPT. OpenAI lo dio a conocer al mundo hace poco más de cinco meses y en enero de 2023, el producto contaba ya con más de 100 millones de usuarios, convirtiéndose en la aplicación para consumidores de más rápido crecimiento hasta la…
Autenticación múltiple en Spring boot: JWT y formulario
Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .headers() .frameOptions() .disable() .addHeaderWriter(new StaticHeadersWriter("Content-Security-Policy", "frame-ancestors 'self'")) .and() .csrf() .requireCsrfProtectionMatcher(new AndRequestMatcher(CsrfFilter.DEFAULT_CSRF_MATCHER, new RegexRequestMatcher("^(?!/api/)", null))) .and() .authorizeRequests() .antMatchers("/").fullyAuthenticated() .antMatchers("/client/**").hasAnyAuthority("CLIENT", "SUPER_ADMIN", "ADMIN") .antMatchers("/admin/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN") .antMatchers("/actuator/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN") .antMatchers("/api/auth/**").permitAll() .antMatchers("/api/**").hasAnyAuthority("ADMIN", "SUPER_ADMIN", "CLIENT", "API_USER") .and() .formLogin() .loginPage("/user/login") .successHandler(successHandler()) .failureUrl("/user/login?error=true") .defaultSuccessUrl("/") .usernameParameter("username") .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout")) .deleteCookies("remember-me") .logoutSuccessUrl("/user/login") .and() .rememberMe() .userDetailsService(userDetailsService); return http.build(); } |
…
TemplateInputException
Escenario Lo habré hecho centenares de veces. Desarrollo en local, pruebas y despliegue en remoto. Según el entorno en el que esté corriendo la aplicación, ésta podrá requerir una configuración distinta. Por ejemplo en un entorno de desarrollo querremos tener el caché deshabilitado o el nivel de los registros más bajo que en uno de…