Luan - software reaccionario por fschmidt

La librería goodjava


Contenidos


Introducción

contenidos

La librería goodjava es independiente de Luan. Luan llama a goodjava pero goodjava nunca llama al código de Luan. Así que goodjava puede ser utilizada como una librería de Java. goodjava está incluida en el archivo jar de Luan.

A medida que la programación occidental se volvió depravada, se hizo cada vez más difícil encontrar buenas librerías. Así que en lugar de usar librerías modernas depravadas, escribí las mías propias. Describiré las librerías más importantes.

goodjava.logger

contenidos

Esto incluye goodjava.logger que reemplaza a log4j, y goodjava.logging que reemplaza a slf4j. Puedes ver algunos ejemplos de cómo usar mi logger. La configuración está en Java, donde debería estar.

slf4j es un típico desastre moderno. Solo mira el logger de slf4j y compáralo con la interfaz de mi logger. log4j no es horrible pero tiene problemas significativos. Este proyecto fue abandonado por su autor para que pudiera crear un logger horrible y depravado llamado Logback para encajar con su cultura depravada. El mayor problema de log4j es que no maneja correctamente la separación de logs. Su RepositorySelector es un truco. El ThreadLocalAppender de goodjava.logger resuelve el problema correctamente.

Implementé un puente completo con slf4j, tanto de slf4j a goodjava.logging como de goodjava.logging a slf4j. De esta manera, mi código es completamente compatible con el código moderno depravado.

goodjava.parser

contenidos

En ciencias de la computación, el análisis sintáctico es un gran problema. Lo hacen complicado, por supuesto. Pero no debería serlo. Desarrollé un nuevo enfoque para el análisis sintáctico que está implementado aquí. Se basa en una simple pila de enteros que son posiciones en lo que es efectivamente un análisis sintáctico descendente recursivo. Uso esta idea para compilar Luan pero también para analizar JSON, consultas Lucene, solicitudes HTTP, BBCode, CSS, CSV, HTML, y otras cosas.

Cuando escribí el analizador JSON, funcionó en la primera ejecución. Es mucho más simple que cualquier otro analizador JSON. Te reto a buscar cualquier analizador JSON tan simple como este. Todos mis otros analizadores son similares. Mi enfoque para el análisis refleja mis valores anti-modernos. Odio el sinsentido teórico y odio la complejidad innecesaria. Piensa profundamente sobre un problema (como el análisis) hasta que veas la esencia del mismo. Luego escribe un código limpio y simple para resolver el problema.

goodjava.json

contenidos

Encontrado aquí, esto te permite analizar o crear JSON fácilmente.

goodjava.xml

contenidos

Otro caso más donde todas las librerías existentes son horribles, así que escribí la mía propia.

goodjava.rpc

contenidos

La mayoría de los RPCs (llamadas a procedimientos remotos) hoy en día usan REST, lo cual es realmente absurdo porque HTTP nunca fue diseñado para esto, por lo que es ineficiente. Así que hice un RPC simple basado en sockets que solo usa JSON aquí. Uso esto para gestionar mi servicio de alojamiento luan.

goodjava.lucene.queryparser

contenidos

Esta es una mejor implementación del QueryParser de Lucene que tiene defectos serios como solo poder consultar campos de texto. Mi implementación corrige todos los defectos.

goodjava.webserver

contenidos

Esta es la primera parte de la librería que escribí. La escribí después de estudiar todos los servidores web java disponibles y estar horrorizado por ellos. Mi odio hacia el software moderno y la cultura moderna estaba completamente desarrollado en ese momento, así que escribí este código con la intención de violar todas las reglas del software moderno, y estoy bastante satisfecho con el resultado. El código es muy limpio y simple. Aquí está el código fuente.

La interfaz principal es Handler. Nota la simplicidad. Esto toma una Request y devuelve una Response (o null si la solicitud no fue manejada). Nota cómo estas clases son estructuras simples sin métodos "get" y "set". Son estructuras que representan directamente los datos subyacentes verdaderos en el protocolo HTTP. No hay capas estúpidas que oscurezcan (como servlets). Manténlo crudo y simple.

Para escribir un servidor, escribe tu propio Handler o encadena manejadores existentes. Ve este ejemplo.

Uso este servidor web por sí solo para el desarrollo, y detrás de nginx para producción. Solo he implementado lo que necesito a medida que lo necesito. No he intentado hacer de este un servidor web independiente listo para producción. Eso es mucho más trabajo.

goodjava.mail

contenidos

La última horrible librería moderna que reemplacé es java.mail. Mi código para enviar correo tiene un poco más de 200 líneas. Es una capa delgada sobre SMTP y MIME.