miércoles, 22 de julio de 2026

vllm-mlx: Inferencia de modelos de IA optimizada para Apple Silicon


 

El ecosistema de la inteligencia artificial continúa evolucionando, y vllm-mlx se presenta como una de las propuestas más interesantes para quienes desarrollan o ejecutan modelos de lenguaje en equipos con procesadores Apple Silicon. Este proyecto ofrece un servidor de inferencia inspirado en vLLM, pero diseñado específicamente para aprovechar el framework MLX de Apple, permitiendo ejecutar modelos de lenguaje (LLM), modelos multimodales, embeddings y tareas de audio de forma nativa sobre la GPU mediante Metal. Además, es compatible con las API de OpenAI y Anthropic, lo que facilita integrar aplicaciones existentes sin realizar cambios significativos en el código.

Uno de los aspectos más destacados de vllm-mlx es su enfoque en el rendimiento. Incorpora tecnologías como Continuous Batching, Paged KV Cache, almacenamiento de caché en SSD y reutilización inteligente de prefijos, características que permiten atender múltiples solicitudes concurrentes con un consumo de memoria mucho más eficiente. Estas optimizaciones reducen considerablemente la latencia y aumentan el rendimiento en comparación con soluciones tradicionales, haciendo posible ejecutar modelos de gran tamaño incluso en computadoras personales equipadas con chips Apple M1, M2, M3, M4 y posteriores.

Otro punto fuerte del proyecto es su soporte multimodal. Desde un único servidor es posible procesar texto, imágenes, video y audio, además de incorporar funciones como reconocimiento de voz (STT), síntesis de voz (TTS), generación de embeddings y llamadas a herramientas mediante el protocolo MCP. Gracias a su compatibilidad con una amplia variedad de modelos, incluyendo Llama, Qwen, Gemma, Pixtral, DeepSeek y Whisper, vllm-mlx se convierte en una plataforma muy versátil para construir asistentes inteligentes, agentes autónomos y aplicaciones de IA generativa sin depender de infraestructura en la nube.

En definitiva, vllm-mlx representa una alternativa moderna y de alto rendimiento para ejecutar inteligencia artificial de forma local en dispositivos Apple Silicon. Su compatibilidad con estándares ampliamente utilizados, junto con su arquitectura optimizada y su enfoque en la escalabilidad, lo convierten en una herramienta ideal tanto para desarrolladores como para investigadores que buscan desplegar modelos de IA de manera eficiente, segura y aprovechando al máximo el hardware de Apple. Al ser un proyecto de código abierto bajo licencia Apache 2.0, también fomenta la colaboración de la comunidad y la incorporación constante de nuevas funcionalidades.


Repositorio Oficial : https://github.com/waybarrios/vllm-mlx

Buscatrabajo : una webapp desarrollada en flask para buscar trabajo.


 

Agregador de ofertas de empleo remoto y freelance con interfaz web.

Por defecto está enfocado en perfiles de soporte técnico / call center en español (sin inglés) y desarrollador junior, con modalidad de trabajo seleccionable (remoto, híbrido o presencial). Todo el perfil de puntaje se puede ajustar desde el navegador o en config.yaml.

MVP enfocado en Elempleo (Colombia) e InfoJobs.

Características

  • Interfaz web para configurar y ejecutar el scraping.
  • Selección de portales: Elempleo e InfoJobs.
  • Análisis de HV/CV con IA: sube tu hoja de vida y la IA rellena el perfil de búsqueda (términos, modalidades, palabras clave). Soporta Gemini y cualquier API compatible con OpenAI (OpenRouter, Groq, Ollama...).
  • Personalización de términos de búsqueda por portal.
  • Bonus configurable por palabras clave en el título de la oferta.
  • Ajuste del umbral de relevancia en tiempo real.
  • Ejecución asíncrona: el scraping corre en segundo plano sin bloquear la web.
  • Filtro por palabras clave y scoring según tu stack técnico.
  • Limpieza automática de ofertas que ya no aparecen.
  • Visualización de resultados con links directos a cada oferta.
  • Exportación a CSV y notificaciones opcionales (Telegram / email).
Estructura del proyecto



Quieres saber mas del proyecto, te comparto el enlace a el repositorio.





martes, 21 de julio de 2026

Arquitectura Hexagonal: una forma moderna de diseñar aplicaciones mantenibles


 La Arquitectura Hexagonal, también conocida como Ports and Adapters, es un patrón arquitectónico propuesto por Alistair Cockburn con el objetivo de desacoplar la lógica de negocio de las tecnologías externas, como bases de datos, interfaces gráficas, servicios web o sistemas de mensajería. Su principal propósito es garantizar que el núcleo de la aplicación permanezca independiente de cualquier framework o infraestructura, permitiendo que el software evolucione sin afectar las reglas de negocio. A diferencia de las arquitecturas tradicionales en capas, donde la lógica suele depender de componentes externos, la arquitectura hexagonal invierte esta relación mediante el uso de puertos (interfaces) y adaptadores (implementaciones), logrando un diseño mucho más flexible y fácil de mantener.

Diagrama conceptual de la Arquitectura Hexagonal

En esta arquitectura, el dominio representa el corazón de la aplicación y contiene todas las reglas de negocio. Alrededor de él existen los puertos, que son interfaces que definen cómo el dominio se comunica con el exterior. Finalmente, los adaptadores implementan dichos puertos para interactuar con tecnologías específicas, como una base de datos MySQL, PostgreSQL, MongoDB, una API REST, una interfaz web o incluso una cola de mensajes como RabbitMQ o Kafka. Gracias a este enfoque, si en algún momento la organización decide cambiar de proveedor de base de datos o reemplazar un framework como Spring Boot por otro, la lógica del negocio permanece intacta, ya que únicamente se reemplazan los adaptadores correspondientes.

jueves, 8 de marzo de 2018

Para los coders que empiezan. : Condicionales en C#



Los condicionales en C# son muy faciles de utilizar, para ello deberemos tener en cuenta las nociones basicas algoritmicas y aplicarlas al lenguaje. yo no les voy a explicar nociones basicas en este post. depronto me dedico a hacer un pequeño cursillo explicativo de como utilizar C#, por ahora les dejo una muestra de los condicionales.

Utilizando repl.it podemos ver el resultado.


lunes, 30 de diciembre de 2013

Clase Sencilla para el manejo de peticiones SOAP, PHP5


Bueno, una clase para el manejo de peticiones a webservices por soap, utilizando las librerias de php5

?php/*

WSDL PRO..... Cliet for SoapClient
It's Free
Es gratis pero no te olvides donde la conseguiste...
http://elblogcodigolandia.blogspot.com

Luis Toscano - admin@caribecoders.com

*/
class wsdlpro{
 public $client;

 public function wsdlpro(){

 }

 public function initClient($url){
  $this->client = new SoapClient($url,array('cache_wsdl' => WSDL_CACHE_NONE, 'trace' => TRUE));
 }

 public function execMethod($method,$param){
  try{
$res = $this->client->$method($param);
return array('status'=>'true','data'=>$res);
}catch (Exception $e) {
trigger_error($e->getMessage(), E_USER_WARNING);
}
 
 }

 public function resetWsdl(){
  unset($this->client);
 }

}

?>

martes, 29 de octubre de 2013

Validando Formularios con HTML5 y Javascript.


Sin mas parla solo les dejo aquí el código es facilito de entender cualquier cosa me dejan un comentario.


validador indenpendiente de formularios con HTML5 y Javascript
$(document).ready(function()
{
    $('#theIdOfMyForm').submit(function(event){
        if(!this.checkValidity())
        {
            event.preventDefault();
        }
    });
});

miércoles, 5 de septiembre de 2012

Hablemos de ODBC.


Bueno en el siguiente post hablaremos un poco de ODBC, esa herramienta que nos puede sacar de muchos apuros. jeje.


Un Poco de WikiPedia.


Open DataBase Connectivity (ODBC) es un estándar de acceso a las bases de datos desarrollado por SQL Access Group en 1992. El objetivo de ODBC es hacer posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos (DBMS) almacene los datos. ODBC logra esto al insertar una capa intermedia (CLI) denominada nivel de Interfaz de Cliente SQL, entre la aplicación y el DBMS. El propósito de esta capa es traducir las consultas de datos de la aplicación en comandos que el DBMS entienda. Para que esto funcione tanto la aplicación como el DBMS deben ser compatibles con ODBC, esto es que la aplicación debe ser capaz de producir comandos ODBC y el DBMS debe ser capaz de responder a ellos. Desde la versión 2.0 el estándar soporta SAG y SQL.
El software funciona de dos modos, con un software manejador en el cliente, o una filosofía cliente-servidor. En el primer modo, el driver interpreta las conexiones y llamadas SQL y las traduce desde el API ODBC hacia el DBMS. En el segundo modo para conectarse a labase de datos se crea una DSN dentro del ODBC que define los parámetros, ruta y características de la conexión según los datos que solicite el creador o fabricante.


Ahora veamos algunas formas de utilizarla.

Microsoft Access, Con PHP

if ($conn_access = odbc_connect ( "guiarte_access", "", "")){     echo "Conectado correctamente";
    $ssql = "select * from libros";
    if($rs_access = odbc_exec ($conn_access, $ssql)){
        echo "La sentencia se ejecutó correctamente";
        while ($fila = odbc_fetch_object($rs_access)){
           echo "
" . $fila->titulo;
        }
    }else{
        echo "Error al ejecutar la sentencia SQL";
    }
} else{
    echo "Error en la conexión con la base de datos";
}



DB2 IBM, Con PHP

$database = 'DBNAME';$hostname = 'HOST';$port = 'PORT';$user = 'USERNAME';$password = 'PASSWORD';$driver = 'DB2';$conn_string = "DRIVER=\{$driver};DATABASE=$database;HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
if (!$db = odbc_connect ($conn_string, $user, $password)) echo 'Error!';else echo 'Success!';
odbc_close($db);



Oracle, Con ASP

<%  Dim conexion, rsTabla   'creamos un objeto de tipo "connection" para la   'conexión con el origen de datos ODBC   set conexion = Server.CreateObject("ADODB.Connection")  'nos conectamos al origen de datos ODBC "bdoracle"  conexion.Open "bdoracle","system","contraseña_system"   'creamos un objeto de tipo "recordset" (tabla)   Set rsTabla = Server.CreateObject("ADODB.Recordset")   consultaSQL ="SELECT * from prueba"   'asignamos al objeto "rsTabla" el resultado de la ejecución de la consulta SQL   rsTabla.Open consultaSQL, conexion, 1   'Recorremos todos los registros del objeto recordset y mostramos su valor   while not rstabla.eof    codigo = rstabla("codigo")     nombre = rstabla("nombre")     importe = rstabla("importe")     Response.Write "Código: " & codigo & "
    Response.Write "Nombre: " & nombre & "
"
    Response.Write "Importe: " & importe & "
" & "
    rstabla.MoveNext   wend   'cerramos el recordset y la conexión   rsTabla.close   conexion.close   'liberamos los objetos   Set conexion = Nothing   Set rsTabla = Nothing %>

SQL Server, con Node.js
var odbc = require("odbc");
var connectionString = "DSN=probrems;UID=noneOfYourBeesWax;PWD=noneOfYourBeesWax;DATABASE=andrew";
var db = new odbc.Database();
    db.open(connectionString, function(err){
        if(err){
            throw err;
        };
        /*
            Once the connection is open you can query it.
            That means if you tried to query it outside or before this handler finished, it would say...
            "Connection Not Open"
        */
        db.query("SELECT * FROM andrew.dbo.probremTypes;", function(err, rows, moreResultSets){
            if(err){
                console.log(err.message);
            };
            console.log(rows);
        });
    });
process.on('SIGINT', function () {
    db.close(function(){
        console.log('Database Connection Closed');
        process.exit();
    });
});




Los anteriores ejemplos no han sido probados, asi que no sabremos si tienen errores o no, el funcionamiento de  ODBC es simple ofrecer un conector universal para el acceso a datos, antes que todo deberán tener en cuenta la instalacion de los respectivos drivers, si no lo hacen problemas inesperados pueden aparecer.