Entradas

CurseForge Support !

 Uraium4Linux ahora da soporte a la instalación de modspack con formato curse. La velocidad con la que Uranium4Linux es capaz de instalar los modspacks sigue siendo muy superior a GD Launcher o Twitch Launcher. Esto era de esperar porque la parte mas costosa siempre es hacer las requests y descargar los mods y ya sabíamos que Uranium es blazingly fast haciendo las requests así que ahora que solo había que copiar los archivos de configuración no seria mucho mas lento. También he resuelto un par de problemillas con respecto a las requests asíncronas y es que probando Uranium en ordenadores con hardware más modesto (Intel Atom 1 núcleo 2 hilos) me di cuenta que al crear tantas threads como requests tenga que hacer esto puede ser un inconveniente ya que puede saturar la capacidad de la CPU por lo tanto he añadido una nueva flag que limita las threads que puede crear Uranium. ./Uranium4Linux -d -f ./MiModpack.zip -r /minecraft/root -t 16   Con la flag -t limitamos el número de threads que

Crab Crab Crab, I'm gonna step on the Crab

Imagen
Después de finalmente implementar url_maker para Curse, un curse_requester y toda la parafernalia requerida para testear el rendimiento que Uranium4Linux puede proporcionar a la hora de descargar mods llega el momento de la verdad. Rust es un lenguaje que destaca por su velocidad ya que al ser compilado y tener un 0 abstraction cost puede ofrecer mucho rendimiento. Yo sabia que Uranium4Linux sería blazingly fast y realmente esperaba resultados mejores que la competencia (GD Launcher [código abierto], Twitch Launcher [Privativo af]). Aquí muestro el resultado de estos dos últimos Launchers: A la izquierda GD Launcher con 52s y a la derecha Twitch Launcher con 145s https://github.com/gorilla-devs/GDLauncher Ahora vamos a ver el rendimiento que puede ofrecernos Uranium4Linux a la hora de descargar un paquete de 296 Mods con un peso de 500Mb aproximadamente. cargo run --release  2.79s user 2.00s system 59% cpu 8.056 total   8 segundos !!! No podia creermelo, Uranium4Linux es capaz de desca

Curse, Murmur y 2

Hasta ahora Uranium4Linux solo soportaba el repositorio de mods RINTH pero ayer mientras "bicheaba" otros proyectos libres encontré lo siguiente:  https://github.com/gorilla-devs/GDLauncher/blob/master/napi/src/lib.rs No me lo creía! Parecía la pieza de código que me faltaba para conseguir que Uranium4Linux sacará los hashes de los archivos y que la api de CURSE los admitiese, así que como buen programador hice lo que tenia que hacer.    Ctrl+C, Ctrl+V   Después de copiar y pegar en mi código y sacarle el hash a un archivo parecía que daba un resultado correcto, lo puse en https://reqbin.com/ (una pagina web que permite hacer requests) y efectivamente el resultado era correcto, la api me devolvía una respuesta 200 con todo el contenido del mod.   MURMUR 2  El algoritmo que utiliza Curse para sacar el hash a los archivos es Murmur2. No lo había escuchado en mi vida, y he tenido algunos problemas para implementarlo ya que he intentado utilizar otras librerías que no sean las q

Async Pool

Async Pool Debido a que Uranium4Linux toma ventaja de la programación asíncrona es necesario una pool de tareas para que este pueda funcionar de forma eficiente. El principal problema de las task es que no se puede saber el tiempo que va a tomar ejecutarlas por lo tanto necesitamos de algo que pueda comprobar si la task esta lista y, en caso de que lo este, guardar el resultado o aplicar alguna función. Para conseguir esto he diseñado una estructura tal que: pub struct AsyncPool<T> {     request_pool: Vec<JoinHandle<T>>,     items: usize,     not_done_request: Vec<usize>,     ordered_requests: HashMap<usize, T> }   La idea original de la AsyncPool era que el orden en el que los resultados son devueltos a partir de task no estuviera garantizado. Es decir, si añado un vector con las tasks [1, 2, 3, 4] el vector con los resultados no

Unzipper

Desarrollo del unzipper Descripcion del unzipper En Uranium4Linux el unzipper es la parte encargada de descomprimir el archivo que contiene los archivos necesarios para descargar y configurar el pack de mods para el usuario. Codigo La idea principal del unzipper es la siguiente: Se recibe un argumento que será la ruta al .zip que contenga la información del modpack. Con esa ruta se extraerán todos los archivos que contenga el .zip en una carpeta temporal para después copiar los archivos de configuración, los "raw mods" y finalmente leer el json y descargar los mods. Raw mods son los mods que debido a que no han sido encontrados en la RinthAPI se han metido "hardcoded" al .zip y por lo tanto solo hace falta copiarlos a la ruta destino. Problemas surgidos Mientras desarrollaba el unzipper me he dado cuenta de que necesito de algún módulo en mi programa que sea capaz de darme buenos mensajes de errores

Entrada Principal

Propósitos e Historia de Uranium4Linux 1. Facilitar la creación, distribución y la actualización de paquetes de mods para minecraft. 2. Estandarizar la forma en la que se distribuyen los paquetes de mods, teniendo una misma estructura. Historia La idea de Uranium4Linux fue el poder compartir pack de mods de minecraft con mis amigos de forma sencilla ya que para pasar los mods y toda la configuración teníamos que comprimir los .jar, la carpeta "config/", mirar si los mods son compatibles con la version de minecraft, etc. Entonces fue cuando se me ocurrió la idea de un programa que facilitara todo esto, que con un simple archivo pudiera descargar y actualizar los mods y que dándole un directorio root de Minecraft pudiera obtener un archivo modpack para compartir. La idea parecía sencilla, con un simple scrip de python se podría comprimir todo y meterlo en un zip. El problema de esta idea es que el archivo