Un Tipo Diferente de Serverless: Un Estudio de Caso para SQLite y Whisper.cpp

Rate this content
Bookmark

Puedes construir aplicaciones con un enfoque local-primero. En este estudio de caso, profundizamos en cómo podrías usar WASM para ejecutar Whisper.cpp para convertir voz a texto y también usar WASM para alojar una base de datos local de SQLite. La única razón por la que necesitamos una conexión de red para esta aplicación es para obtener la carga inicial de JS y descargar los modelos de Whisper desde una tienda remota, ya que pueden ser bastante grandes. 

This talk has been presented at JSNation US 2024, check out the latest edition of this JavaScript Conference.

Chris Griffing
Chris Griffing
25 min
21 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy introduce WebAssembly (Wasm) y su versatilidad para soportar cualquier lenguaje en cualquier sistema operativo. La historia de Wasm se remonta a 2011 con Emscripten y NACL, y ha ganado importancia con la introducción de Wasi, la interfaz del sistema WebAssembly. Wasm es compatible con los navegadores modernos y se puede usar con lenguajes como C, C++, Rust y Go. Aplicaciones populares como Figma, CapCut y 1Password utilizan Wasm para mejorar el rendimiento. Web Workers y los buffers de matriz compartidos eliminan la necesidad de serialización de objetos. La charla también discute el uso de Keasley y Drizzle para interactuar con SQL. La construcción y optimización de la aplicación involucra consideraciones de migraciones, preparación de la aplicación, suspense, UI optimista y la supresión de entradas. Whisper, un proyecto de IA de código abierto, ofrece modelos para la conversión de audio a texto y se implementa usando whisper.cpp. Las opciones de despliegue incluyen Render, Netlify, Vercel y Cloudflare, pero usar un proveedor VPS económico con un servidor de archivos puede ser una alternativa rentable.

1. Introducción a Wasm

Short description:

Hoy voy a hablar sobre un tipo diferente de serverless: un estudio de caso para SQLite y whisper.cpp ejecutándose en el navegador. Explicaré qué es Wasm y cómo soporta cualquier lenguaje en cualquier sistema operativo. ¡Vamos a profundizar en ello!

Hola a todos, hoy voy a hablar sobre un tipo diferente de serverless. Este es un estudio de caso para SQLite y whisper.cpp ejecutándose puramente en el navegador. Así que básicamente, construí una aplicación. Quiero guiarte un poco sobre cómo construí esa aplicación, cómo funciona un poco bajo el capó, y un poco de la tecnología que utilicé.

Pero también, voy a tener que explicar qué es realmente Wasm, porque así es como podemos hacer todo esto. Así que, comencemos. Pero primero, un poco sobre mí. Soy un defensor de desarrolladores en GitKraken. Es mi primera vez en este tipo de rol, y realmente lo estoy disfrutando. He sido ingeniero durante unos 10 años, y es bastante divertido. Soy un streamer de Twitch y un YouTuber perezoso. Además de un entusiasta de los gorros. Tengo muchos gorros. Si quieres encontrarme en otras redes sociales, mi nombre es CMGriffin en básicamente todas las plataformas. Puedes usar este código QR para encontrarme también, y ya sabes, sí, conectémonos. Vamos a charlar. Pero ahora, vamos a profundizar en ello.

¿Qué es Wasm? Entonces, Wasm es WebAssembly. Es un estándar abierto, y su objetivo es soportar cualquier lenguaje en cualquier sistema operativo. La idea es que, si puedes compilar desde un lenguaje como Rust o C++ o Go o lo que sea, puedes ejecutarlo en tu navegador como Wasm, y tienes esta gran portabilidad. Así que, sí. Wasm. ¿Qué? Aquí hay una representación técnica o textual de cómo se ve Wasm. Y no necesitas memorizar esto, pero imaginemos este programa que está construido de estas, ya sabes, expresiones S. Cuando se compila a Wasm, se convierte en este formato binario. Así que, este es ese mismo programa exacto. Ahora, no vas a necesitar memorizar esto, pero podemos revisar y ver qué son algunas de estas cosas. Así que, esa primera línea identifica esto como WebAssembly, como un binario de WebAssembly, como cosas de Wasm, así como la versión de Wasm que estamos soportando. Va a haber la definición del módulo. Están los tipos de los parámetros, el número de tipos que estamos pasando, ya sabes, la función que estamos exportando, ya sabes, el número de resultados que devolveremos, y el tipo de ese resultado de retorno.

2. Wasm: Function Signature, History, and Wasi

Short description:

Está la firma de la función, la sección de exportación y el formato binario. La historia de Wasm se remonta a 2011 con Emscripten y NACL. En 2015, se anunció Wasm y NACL fue deprecado a favor de Wasm. Wasi, la interfaz del sistema WebAssembly, proporciona un conjunto de características similares a POSIX. La importancia de Wasm y Wasi es destacada por el creador de Docker. Ejecutar Wasm en el servidor es el futuro de la computación.

Está la firma de la función, ¿verdad? Entonces, esos son los argumentos que la función toma, el tamaño de la misma, el número de funciones que estamos exportando. {{^}}Está la sección de exportación, que es la palabra clave export, el tamaño de esa sección, el número de exportaciones. Y a medida que seguimos, está la sección de exportación, que es solo un poco más como el nombre de la exportación, ya sabes, la sección de la función, que es en realidad como el código dentro de ella, la lógica de esa sección y cómo estamos manipulando algunas de las variables que se pasan a ella, y finalmente el final, que denota como el final de ese bloque binario. Y realmente, de nuevo, no vas a necesitar memorizar esto, pero sigue siendo algo interesante, y si quieres leer más al respecto, puedes encontrar la especificación binaria en GitHub.

Así que ahora, consideremos realmente la historia de Wasm. Comenzó en 2011, que es hace mucho tiempo, antes de que yo fuera realmente un desarrollador. Podías usar Emscripten para compilar C y C++ desde 2011 a algo que se ejecutaría en el navegador. Google tenía su propia versión de algo similar a Wasm llamado Native Client, o NACL, y luego en 2013, se introdujo ASM.js, y ASM.js era código JavaScript que luego se pasaría a este compilador ASM.js para que el navegador lo optimizara y ejecutara, y era muy interesante, porque escribirías código JavaScript, pero anotarías tal vez el tipo de una cierta variable para hacerle saber que sería un float o un entero o cosas así. Y luego en 2015, Wasm en sí fue anunciado, ese formato binario real. NACL fue luego deprecado un par de años después a favor de Wasm, porque Google decidió que, sí, ¿por qué construir algo y mantenerlo ellos mismos cuando podrían realmente apoyar un estándar abierto? El soporte amplio de navegadores llegó alrededor de ese mismo tiempo. Después de eso, obtuvimos algo llamado Wasi, que es la interfaz del sistema WebAssembly, que explicaré un poco más aquí en un momento. En 2019, los hilos de Wasm se habilitaron por defecto en Chrome, y en 2022, Wasm 2.0, un borrador para ello fue creado. Hay un poco de controversia alrededor de ese borrador y cómo funciona, pero no vamos a profundizar demasiado en eso ahora mismo. Puede que valga la pena leerlo por tu cuenta.

Así que Wasi es la interfaz del sistema WebAssembly. Está diseñado por Mozilla, y proporciona un conjunto de características similares a POSIX, por lo que puedes obtener como entrada/salida de archivos o redes o cosas que tu sistema operativo maneja por ti que cuando compilas un binario para un cierto sistema operativo, esos son los enlaces que realmente están siendo conectados para ti a ese binario. Así que en su lugar, Wasi te ayuda a hacer eso con código Wasm, y cuando combinas esas cosas juntas, obtienes algo muy poderoso. Solomon Hikes, el creador de Docker, dijo una vez en 2019, si Wasm y Wasi existieran en 2008, no habríamos necesitado crear Docker. Así de importante es. WebAssembly en el servidor es el futuro de la computación. Solo piensa en eso, como realmente poderoso. Así que la portabilidad que obtendríamos para ejecutar Wasm en la Web también significaría que podríamos obtener esa portabilidad a nivel de servidor, y ya sabes, no necesitaríamos Docker en ese punto siempre y cuando haya una interfaz Wasi para exponer estas cosas para nosotros. Y siempre y cuando nuestras dependencias pudieran compilarse a Wasm también. Mi charla favorita y ejemplo de cómo podría ser este futuro es The Birth and Death of JavaScript por Gary Bernhardt. Ahora, el título es engañoso. No es realmente anti-JavaScript. Tiene algunos puntos muy buenos sobre cómo no es un lenguaje perfecto, por supuesto, porque no existe tal cosa. Pero él pasa por y señala que debido a que JavaScript es como es, llevó al futuro que estamos viendo donde la gente está presionando para que Wasm obtenga un código más eficiente de su navegador.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Utilizando Rust desde Vue con WebAssembly
Vue.js London Live 2021Vue.js London Live 2021
8 min
Utilizando Rust desde Vue con WebAssembly
Top Content
In this Talk, the speaker demonstrates how to use Rust with WebAssembly in a Vue.js project. They explain that WebAssembly is a binary format that allows for high-performance code and less memory usage in the browser. The speaker shows how to build a Rust example using the WasmPack tool and integrate it into a Vue template. They also demonstrate how to call Rust code from a Vue component and deploy the resulting package to npm for easy sharing and consumption.
Depuración de JS
React Summit 2023React Summit 2023
24 min
Depuración de JS
Top Content
Debugging JavaScript is a crucial skill that is often overlooked in the industry. It is important to understand the problem, reproduce the issue, and identify the root cause. Having a variety of debugging tools and techniques, such as console methods and graphical debuggers, is beneficial. Replay is a time-traveling debugger for JavaScript that allows users to record and inspect bugs. It works with Redux, plain React, and even minified code with the help of source maps.
Un Marco para Gestionar la Deuda Técnica
TechLead Conference 2023TechLead Conference 2023
35 min
Un Marco para Gestionar la Deuda Técnica
Top Content
Today's Talk discusses the importance of managing technical debt through refactoring practices, prioritization, and planning. Successful refactoring requires establishing guidelines, maintaining an inventory, and implementing a process. Celebrating success and ensuring resilience are key to building a strong refactoring culture. Visibility, support, and transparent communication are crucial for addressing technical debt effectively. The team's responsibilities, operating style, and availability should be transparent to product managers.
Haciendo JavaScript en WebAssembly Rápido
JSNation Live 2021JSNation Live 2021
29 min
Haciendo JavaScript en WebAssembly Rápido
Top Content
WebAssembly enables optimizing JavaScript performance for different environments by deploying the JavaScript engine as a portable WebAssembly module. By making JavaScript on WebAssembly fast, instances can be created for each request, reducing latency and security risks. Initialization and runtime phases can be improved with tools like Wiser and snapshotting, resulting in faster startup times. Optimizing JavaScript performance in WebAssembly can be achieved through techniques like ahead-of-time compilation and inline caching. WebAssembly usage is growing outside the web, offering benefits like isolation and portability. Build sizes and snapshotting in WebAssembly depend on the application, and more information can be found on the Mozilla Hacks website and Bike Reliance site.
Construyendo un Asistente AI Activado por Voz con Javascript
JSNation 2023JSNation 2023
21 min
Construyendo un Asistente AI Activado por Voz con Javascript
Top Content
This Talk discusses building a voice-activated AI assistant using web APIs and JavaScript. It covers using the Web Speech API for speech recognition and the speech synthesis API for text to speech. The speaker demonstrates how to communicate with the Open AI API and handle the response. The Talk also explores enabling speech recognition and addressing the user. The speaker concludes by mentioning the possibility of creating a product out of the project and using Tauri for native desktop-like experiences.
Una Guía Práctica para Migrar a Componentes de Servidor
React Advanced 2023React Advanced 2023
28 min
Una Guía Práctica para Migrar a Componentes de Servidor
Top Content
React query version five is live and we'll be discussing the migration process to server components using Next.js and React Query. The process involves planning, preparing, and setting up server components, migrating pages, adding layouts, and moving components to the server. We'll also explore the benefits of server components such as reducing JavaScript shipping, enabling powerful caching, and leveraging the features of the app router. Additionally, we'll cover topics like handling authentication, rendering in server components, and the impact on server load and costs.

Workshops on related topic

Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Node Congress 2024Node Congress 2024
152 min
Construye Aplicaciones Modernas Utilizando GraphQL y Javascript
Featured Workshop
Emanuel Scirlet
Miguel Henriques
2 authors
Ven y aprende cómo puedes potenciar tus aplicaciones modernas y seguras utilizando GraphQL y Javascript. En este masterclass construiremos una API de GraphQL y demostraremos los beneficios del lenguaje de consulta para APIs y los casos de uso para los que es adecuado. Se requiere conocimiento básico de Javascript.
Cómo Resolver Problemas del Mundo Real con Remix
Remix Conf Europe 2022Remix Conf Europe 2022
195 min
Cómo Resolver Problemas del Mundo Real con Remix
Featured Workshop
Michael Carter
Michael Carter
- ¿Errores? Cómo renderizar y registrar tus errores del servidor y del clientea - Cuándo devolver errores vs lanzar excepcionesb - Configurar servicios de registro como Sentry, LogRocket y Bugsnag- ¿Formularios? Cómo validar y manejar formularios de varias páginasa - Usar zod para validar los datos del formulario en tu acciónb - Pasar por formularios de varias páginas sin perder datos- ¿Atascado? Cómo solucionar errores o funciones faltantes en Remix para que puedas continuara - Usar patch-package para solucionar rápidamente tu instalación de Remixb - Mostrar herramienta para gestionar múltiples parches y seleccionar solicitudes de extracción abiertas- ¿Usuarios? Cómo manejar aplicaciones de varios inquilinos con Prismaa - Determinar el inquilino por el host o por el usuariob - Base de datos múltiples o base de datos única/múltiples esquemasc - Asegura que los datos del inquilino siempre estén separados de los demás
Modelado de Bases de Datos Relacionales para GraphQL
GraphQL Galaxy 2020GraphQL Galaxy 2020
106 min
Modelado de Bases de Datos Relacionales para GraphQL
Top Content
WorkshopFree
Adron Hall
Adron Hall
En esta masterclass profundizaremos en el modelado de datos. Comenzaremos con una discusión sobre varios tipos de bases de datos y cómo se mapean a GraphQL. Una vez que se haya establecido esa base, el enfoque se desplazará a tipos específicos de bases de datos y cómo construir modelos de datos que funcionen mejor para GraphQL en varios escenarios.
Índice de contenidosParte 1 - Hora 1      a. Modelado de Datos de Bases de Datos Relacionales      b. Comparando Bases de Datos Relacionales y NoSQL      c. GraphQL con la Base de Datos en menteParte 2 - Hora 2      a. Diseño de Modelos de Datos Relacionales      b. Relación, Construcción de Tablas Multijoin      c. Complejidades de Consulta de Modelado de Datos Relacionales y GraphQL
Prerrequisitos      a. Herramienta de modelado de datos. El formador utilizará dbdiagram      b. Postgres, aunque no es necesario instalar esto localmente, ya que estaré utilizando una imagen de Dicker de Postgres, de Docker Hub para todos los ejemplos      c. Hasura
Construyendo una Aplicación de Shopify con React & Node
React Summit Remote Edition 2021React Summit Remote Edition 2021
87 min
Construyendo una Aplicación de Shopify con React & Node
Top Content
WorkshopFree
Jennifer Gray
Hanna Chen
2 authors
Los comerciantes de Shopify tienen un conjunto diverso de necesidades, y los desarrolladores tienen una oportunidad única para satisfacer esas necesidades construyendo aplicaciones. Construir una aplicación puede ser un trabajo duro, pero Shopify ha creado un conjunto de herramientas y recursos para ayudarte a construir una experiencia de aplicación sin problemas lo más rápido posible. Obtén experiencia práctica construyendo una aplicación integrada de Shopify utilizando el CLI de la aplicación Shopify, Polaris y Shopify App Bridge.Te mostraremos cómo crear una aplicación que acceda a la información de una tienda de desarrollo y pueda ejecutarse en tu entorno local.
Construye una sala de chat con Appwrite y React
JSNation 2022JSNation 2022
41 min
Construye una sala de chat con Appwrite y React
WorkshopFree
Wess Cope
Wess Cope
Las API/Backends son difíciles y necesitamos websockets. Utilizarás VS Code como tu editor, Parcel.js, Chakra-ui, React, React Icons y Appwrite. Al final de este masterclass, tendrás los conocimientos para construir una aplicación en tiempo real utilizando Appwrite y sin necesidad de desarrollar una API. ¡Sigue los pasos y tendrás una increíble aplicación de chat para presumir!
Problemas difíciles de GraphQL en Shopify
GraphQL Galaxy 2021GraphQL Galaxy 2021
164 min
Problemas difíciles de GraphQL en Shopify
WorkshopFree
Rebecca Friedman
Jonathan Baker
Alex Ackerman
Théo Ben Hassen
 Greg MacWilliam
5 authors
En Shopify a gran escala, resolvemos algunos problemas bastante difíciles. En este masterclass, cinco oradores diferentes describirán algunos de los desafíos que hemos enfrentado y cómo los hemos superado.

Tabla de contenidos:
1 - El infame problema "N+1": Jonathan Baker - Vamos a hablar sobre qué es, por qué es un problema y cómo Shopify lo maneja a gran escala en varios APIs de GraphQL.
2 - Contextualizando APIs de GraphQL: Alex Ackerman - Cómo y por qué decidimos usar directivas. Compartiré qué son las directivas, qué directivas están disponibles de forma predeterminada y cómo crear directivas personalizadas.
3 - Consultas de GraphQL más rápidas para clientes móviles: Theo Ben Hassen - A medida que tu aplicación móvil crece, también lo harán tus consultas de GraphQL. En esta charla, repasaré diversas estrategias para hacer que tus consultas sean más rápidas y efectivas.
4 - Construyendo el producto del futuro hoy: Greg MacWilliam - Cómo Shopify adopta las características futuras en el código actual.
5 - Gestión efectiva de APIs grandes: Rebecca Friedman - Tenemos miles de desarrolladores en Shopify. Veamos cómo estamos asegurando la calidad y consistencia de nuestras APIs de GraphQL con tantos colaboradores.