Mostrando las entradas con la etiqueta Lua. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Lua. Mostrar todas las entradas

viernes, 16 de agosto de 2024

Scripts de Lua en Redis


Redis, conocido por ser un sistema de almacenamiento de datos en memoria altamente rápido, no tiene soporte directo para procedimientos almacenados o funciones como los sistemas de bases de datos relacionales tradicionales. Sin embargo, Redis ofrece características que permiten realizar operaciones complejas y reutilizables de manera similar a los procedimientos almacenados y funciones, principalmente a través de scripts en Lua.

Lua es un lenguaje de scripting ligero y potente, y Redis permite la ejecución de scripts Lua en su entorno. Esto brinda la posibilidad de realizar operaciones más complejas que las que se pueden lograr con los comandos básicos de Redis.


Por qué usar Lua en Redis: 

  • Atomicidad: Los scripts Lua se ejecutan de manera atómica en Redis, lo que significa que ninguna otra operación puede interferir con la ejecución del script.
  • Reutilización: Puedes almacenar y reutilizar scripts Lua para realizar operaciones complejas, lo que es análogo a los procedimientos almacenados.
  • Flexibilidad: Lua te permite hacer uso de la lógica de programación, como condicionales y bucles, directamente dentro de Redis.


Supongamos que queremos implementar un procedimiento que incremente el valor de una clave solo si la clave existe y su valor es mayor que un umbral dado. Este es un típico ejemplo donde un procedimiento almacenado sería útil en un sistema de bases de datos relacional.


-- Script Lua para incrementar un valor si es mayor que un umbral

local current = redis.call('GET', KEYS[1])

if current and tonumber(current) > tonumber(ARGV[1]) then

    return redis.call('INCRBY', KEYS[1], ARGV[2])

else

    return nil

end


Para ejecutar este script en Redis, puedes usar el comando `EVAL`:


EVAL "local current = redis.call('GET', KEYS[1])

if current and tonumber(current) > tonumber(ARGV[1]) then

    return redis.call('INCRBY', KEYS[1], ARGV[2])

else

    return nil

end" 1 mykey 10 5


Este comando recibe los siguientes parametros :

  • 1 indica el número de claves (`mykey`) que el script recibirá.
  • mykey es la clave en Redis que el script verificará y posiblemente incrementará.
  • 10 es el umbral; si el valor actual de `mykey` es mayor que este valor, se incrementará.
  • 5 es la cantidad por la cual se incrementará el valor de `mykey` si la condición se cumple.


Aunque Redis no tiene una noción de funciones al estilo SQL, puedes pensar en los scripts Lua como funciones reutilizables. Si bien Redis no permite definir funciones Lua en el mismo sentido que los procedimientos almacenados en SQL, puedes almacenar el script en Redis y llamarlo repetidamente.


Para almacenar un script:


SCRIPT LOAD "local current = redis.call('GET', KEYS[1])

if current and tonumber(current) > tonumber(ARGV[1]) then

    return redis.call('INCRBY', KEYS[1], ARGV[2])

else

    return nil

end


Esto te devolverá un `sha1` hash del script, que puedes usar para invocarlo nuevamente:


EVALSHA <sha1> 1 mykey 10 5


Mientras que Redis no soporta procedimientos almacenados y funciones en el sentido tradicional de bases de datos relacionales, su capacidad para ejecutar scripts Lua te permite realizar operaciones avanzadas y reutilizables de manera similar. Esta funcionalidad es extremadamente útil cuando necesitas lógica compleja o atomicidad en tus operaciones con Redis.

viernes, 28 de agosto de 2020

Que lenguaje de programación debo aprender?


Este es un post de opinión no me apoyo en ninguna encuesta o nada, es opinión de lo que voy leyendo. A la vez ya hice post similares pero lo actualice a 2020. 

Dicho esto, me pongo a opinar. Si queres aprender un lenguaje de programación, lo que primero que debes hacer es pensar a que te queres dedicar. Dado que la programación tiene varios objetivos y si bien hay lenguajes que son buenos para todo pero no son populares en todo, por lo tanto, dependiendo a que te queres dedicar es el lenguaje que debes aprender. 

Voy a listar temas y poniendo los lenguajes. 

Backend : Java, C#, Kotlin, Scala, Groovy, PHP, Python, Haskell, Go, SQL, Ruby

Frontend : Javascript, Typescript, Elm

Mobile : Java, Kotlin, C#, Dart

Data science : SQL, Python, Julia, R

Sistemas (bajo nivel) : Rust, Go, C

Sistemas concurrentes : Rust, Go, Scala, Haskell, Erlang, Elixir

Juegos : C, C++, Rust, Go, Lua, Elm, C#



miércoles, 7 de diciembre de 2016

Lua en Python



Lua se puede embeber en python. Lua es un lenguaje muy bueno, pensado en la simplicidad y es script.

Hace poco leí un articulo sobre como correr lua en python, y me pareció una idea muy buena. La utilidad ?? pensaran ustedes, bueno más allá de nuestra diversión podemos guardar código lua y ejecutarlo y podemos hacer que gente no tan interiorizada con la programación, modifique este código. Se me ocurre reglas de facturación que son muy cambiantes, por ejemplo.

Veamos un ejemplo:

from lupa import LuaRuntime
lua = LuaRuntime()

lua_code = """
function (size)
    a = {}
    b = {}
    st = os.clock()
    for i=0, size-1 do
        a[i] = math.random(size)
    end

    for i=0, size-1 do
        b[i] = math.random(size)
    end

    print("LUA init: "..(os.clock()-st))

    st = os.clock()
    for i=0, size-1 do
        if a[i] ~= b[i] then
            a[i] = a[i] + b[i]
        end
    end
    print("LUA sum: "..(os.clock()-st))
end
"""
test = lua.eval(lua_code)
size = 5000000
test(size)

Y listo!!

Dejo link: http://alexeyvishnevsky.com/?p=248&imm_mid=0eb43e&cmp=em-prog-na-na-newsltr_20161203


lunes, 8 de febrero de 2016

Lenguajes de programación más solicitados y mejor pagados



Bueno ya publique esto cientos de veces, pero es bueno recordar las implicancias que esta tomando la programación funcional y si no me creen vean este post, sobre todo la parte que indica:

A pesar de su poca frecuencia, los lenguajes mejor pagados son: 

1.-Lisp 

2.-F# 

3.-Haskell 

4.-Scala 

5.-Clojure 

6.-Erlang 

7.-Lua 

Dejo link: http://www.taringa.net/post/info/19148330/Lenguajes-de-programacion-mas-solicitados-y-mejor-pagados.html




jueves, 9 de julio de 2015

Seven More Languages in Seven Weeks: Languages That Are Shaping the Future

Alguna vez les hable del libro 7 lenguajes en 7 semanas, bueno las editorial The Pragmatic Bookshelf ha lanzado un nuevo libro con la misma temática. Los lenguajes a analizar son  Lua, Factor, Elm, Elixir, Julia, MiniKanren y Idris.

Y hasta tiene video y todo: 




Ya saben que regalarme!!

Dejo el link:
https://pragprog.com/book/7lang/seven-more-languages-in-seven-weeks


domingo, 26 de abril de 2015

Web Frameworks Benchmark 2015

InfoQ publico un benchmark por demás interesante sobre frameworks web. Básicamente este benchmark compara frameworks web de diferentes lenguajes y tecnologías. Y la velocidad se mide en request por segundo.
Veamos el benchmark:


Como es de esperar cuando hablamos de performance el ganador es C y le sigue C++.

Otra cosa que saco de este benchmark es que existen varios Framework que no conozco. Tendré que estudiar más.

Dejo link: http://www.infoq.com/news/2015/04/web-frameworks-benchmark-2015



lunes, 5 de enero de 2015

Lua Cookbook


Lua es un lenguaje imperativo muy liviano y a la vez extensible, que se hizo famoso porque con el podemos personalizar la interfaz gráfica de World of Warcraft. Pero a la vez se utiliza en numerosas aplicaciones.

Quiero compartir el cookbook de Lua que se puede acceder de forma online:

http://stevedonovan.github.io/lua-cookbook/

miércoles, 16 de abril de 2014

Moonscript


MoonScript es un lenguaje dinámico que compila a la plataforma Lua. Con este lenguaje vas a tener el poder de un potente lenguaje script y la potencia de Lua

MoonScript puede correr dentro de Lua y a la vez puede ser dinámicamente compilado y cargar los archivos dinamicamente gracias a moonloader. Lo único que necesita es que agreguemos el siguiente import: require "moonscript".

MoonScript proporciona una sintaxis limpia, como pueden ver:

export my_func
x = 2323

collection =
  height: 32434
  hats: {"tophat", "bball", "bowler"}

my_func = (a) -> x + a

print my_func 100

Dejo link:
http://moonscript.org/
http://moonscript.org/reference/

martes, 22 de octubre de 2013

La revista de The Pragmatic Bookshelf





The Pragmatic Bookshelf es una editorial que me gusta mucho, tiene muy buenos libros de programación. También lanza una revista la cual se puede descargar de forma gratuita. Va por el numero 49 y yo ni enterado :S

Se pueden encontrar muchos temas de interés y artículos sobre java, scala, clojure, elixir, erlang, python, ruby, etc.

Dejo link: http://pragprog.com/magazines

jueves, 23 de febrero de 2012

Hyperpolyglot


Cuando alguien hace un buen trabajo no queda otra que sacarse el sombrero y si es licito compartir ese trabajo a la comunidad. Por esta razón quiero compartir una pagina que encontré que tiene diferentes comparaciones de lenguajes de programación. Estas comparaciones son muy completas y tienen una buena calidad.

Las comparativas son:


Interpreted Languages:PHP, Perl, Python, Ruby
Interpreted Languages:Tcl, Lua, JavaScript, Io
Operating System Automation:POSIX Shell, AppleScript, PowerShell
C++ Style Languages:C++, Objective C, Java, C#
Pascal Style Languages:Pascal, Ada, PL/pgSQL, MySQL
Lisp Dialects:Common Lisp, Scheme, Clojure, Emacs Lisp
Type Inference Languages:Standard ML, OCaml, Scala, Haskell
Untyped Declarative Languages:Prolog, Erlang, Oz
Concatenative Languages:Forth, PostScript, Factor
Tabular Data Selection:SQL, Awk, Pig
Computer Algebra Software:Maxima, Mathematica
Numerical Analysis Software:Fortran, MATLAB, R, NumPy


Dejo el link:
http://hyperpolyglot.org/

viernes, 23 de julio de 2010

Lenguaje de programación modernos

Un poco amarillista el titulo del post pero en los últimos años nos vimos bombardeados por nuevos lenguajes de programación como ruby, goovy, scala, ioke, python, etc. Y la verdad que están muy buenos.


Todo empezó con el bum de ruby, lenguaje script basado en smalltalk, que con railes parecía como que iba a conquistar el mundo. Pero otras plataformas no tardaron en copiar los beneficios del lenguaje para su plataforma así nació jruby, jython groovy (en java) y iron ruby y iron python (en .net).


Luego nació algo muy interesante la mezcla de paradigmas en particular la programación funcional con la programación orientada objetos, dando muy buenos lenguajes como scala, ioke o clojure en java y F# en .net.


En el blog se hablo de algunos de estos lenguajes:

http://emanuelpeg.blogspot.com/search/label/Clojure

http://emanuelpeg.blogspot.com/search/label/Ioke

http://emanuelpeg.blogspot.com/search/label/jython

http://emanuelpeg.blogspot.com/search/label/jRuby

http://emanuelpeg.blogspot.com/search/label/Lua

http://emanuelpeg.blogspot.com/search/label/Scala


Me quede pensando que esto esta buenísimo, la convivencia de diferentes paradigmas en un lenguaje, es raro que no se allá todavía inventado un lenguaje orientado a objeto y lógico como un prolog OO. Un ejemplo de esto es logtalk

¿Alguien conoce otro lenguaje multiparadigma?¿Alguien usa algun lenguaje multiparadigma?


viernes, 24 de julio de 2009

Lua


Lua es luna en portuges y tambien es un lenguage de programación extensible diseñado para una programación procedimental general con utilidades para la descripción de datos. También ofrece un buen soporte para la programación orientada a objetos, programación funcional y programación orientada a datos. Se pretende que Lua sea usado como un lenguaje de script potente y ligero para cualquier programa que lo necesite. Lua está implementado como una biblioteca escrita en Climpio (esto es, en el subconjunto común de ANSI C y C++).

Siendo un lenguaje de extensión, Lua no tiene noción de programa principal (main): sólo funciona embebido en un cliente anfitrión, denominado programa contenedor o simplemente anfitrión (host). Éste puede invocar funciones para ejecutar un trozo de código Lua, puede escribir y leer variables de Lua y puede registrar funciones C para que sean llamadas por el código Lua. A través del uso de funciones C, Lua puede ser aumentado para abarcar un amplio rango de diferentes dominios, creando entonces lenguajes de programación personalizados que comparten el mismo marco sintáctico. La distribución de Lua incluye un programa anfitrión de muestra denominado lua, que usa la biblioteca de Lua para ofrecer un intérprete de Lua completo e independiente.


Los programas en Lua no son interpretados directamente, sino compilados a código bytecode, que es ejecutado en la máquina virtual de Lua. El proceso de compilación es normalmente transparente al usuario y se realiza en tiempo de ejecución, pero puede hacerse con anticipación para aumentar el rendimiento y reducir el uso de memoria al prescindir del compilador.


Debido a que Lua compilado es pequeño, veloz y tiene una licencia permisiva ha ganado seguidores entre los desarrolladores de videojuegos. Algunos usos de Lua:

World of Warcraft, donde el usuario tiene la posibilidad de personalizar casi completamente la interfaz creando añadidos que permiten informarle de cualquier cosa en su correspondiente carpeta Interface en la qué el WoW.exe tiene el intérprete de lua y ejecuta en su Interface el Addon creado en lua.

También en un mod tipo "sandbox" para Half-Life 2 llamado Garry's Mod, pudiendo modificarlo casi completamente. Gran parte de Garry's Mod está escrito en lua.

También en un mod para Half-Life 2 llamado Fortress Forever que permite configurar altamente los mapas.

El RTS a gran escala Supreme Commander, el cual es modificable por el usuario en casi todos sus aspectos.

El juego de RPG Tibia

Parte de S.T.A.L.K.E.R. - Shadow Of Chernobyl, permitiendo al jugador modificar armas, armaduras y aspectos varios del juego.

Grim Fandango y La Fuga de Monkey Island (cuarta entrega de la saga Monkey Island) utilizan internamente scripts en Lua para definir la historia y los eventos que ocurren durante la partida.

Worms 4: mayhem utiliza lua y xml para definir las misiones y desafios.

Mediante un programa casero(o homebrew), el LuaPlayer, permite ejecutar archivos .lua en la conocida consola portatil de Sony.

Ragnarok Online usa LUA para programar la inteligencia artificial de los homunculos.

Regnum Online usa LUA para la mayoria de scripts del juego como interfaz, modo de juego, acciones, étc.

Lua es software libre, y se proporciona, como es usual, sin garantías, como se establece en su licencia. La implementación descrita en este manual está disponible en el sitio web oficial de Lua, www.lua.org.