Showing posts with label Lua. Show all posts
Showing posts with label Lua. Show all posts

Monday, November 23, 2015

SAP HANA en la luna (con Lua)

Este post fué posteado originalmente en SAP HANA on the moon (with Lua).


Lua es un lenguaje de programación ligero diseñado como un lenguaje script con semántica extensible como primera regla. Lua es multi plataforma puesto que está escrito en ANSI C, y tiene una API de C relativamente simple.

Si están preguntándo acerca del título…bueno…Lua significa Luna en Portugués -;)


Lua es bastante potente pero sencillo de aprender y usar. Si ya saben Python o Ruby, no tendrán muchos problemas…

Antes de continuar…quiero compartir una pequeña broma…que no es especificamente única para Lua…pero aún así es graciosa -;)


Así que…ninguna demostración estaría completa si la enlazaramos con SAP HANA, so? Así que…vamos a hacerlo -;)

Primero, debemos crear un objeto Join y asociar la tabla por MANDT y CARRID. De ahí, seleccionar los siguientes campos como output MANDT, CARRID, CARRNAME, PRICE y CURRENCY.

Luego crear un objeto Aggregation seleccionándo los campos CARRNAME, PRICE (Como columnas agregadas) y CURRENCY. Debemos filtrar el campo CURRENCY por ‘USD’.

Luego, debemos crear un objeto Projection y seleccionar solo PRICE y CARRNAME.

En el objeto Semantics asegúrense de marcar  “CROSS CLIENT” como cliente por defecto.


Ahora, cambiemos a la vista SAP HANA Development y creemos un nuevo repositorio. Lo llamaremos“Flights”.

Creamos un proyecto “XS Engine” y también lo llamamos “Flights”. Lo enlazamos con el repositorio “Flights”.

Creamos un archivo vacio llamado “.xsapp”.

Creamos un archivo llamado “.xsaccess” con el siguente código.

.xsaccess
{
          "exposed" : true,
          "authentication" : [ { "method" : "Basic" } ]
}

Finalmente creamos un archivo llamado “flights.xsodata” con el siguiente código

flights.xsodata
service {
          "Blag/FLIGHTS_BY_CARRIER.calculationview" as "FLIGHTS" keys 
                                                        generate local "Id";
}

Activamos el proyecto y lanzamos nuestro browser...deberíamos ver algo como esto…


La parte de SAP HANA está lista…así que ahora podemos pasar a la parte de Lua…

Antes de continuar…debo de recomendar que instalen un par de cosas…si usan Linux…instalen esto…

sudo apt-get install lua5.2

Y luego sigan las instrucciones para instalar LuaRocks un manejador de paquetes para Lua…

Instalen los siguientes paquetes…

sudo luarocks install luasec
sudo luarocks install luajson
sudo luarocks install luasocket

Para programar en Lua, pueden utilizar cualquier editor que les guste…copien y peguen el siguiente código…

Lua_HANA.lua
http = require("socket.http")
mime = require("mime")
ltn12 = require("ltn12")
json = require("json")

h = {Authorization = "Basic " .. (mime.b64("SYSTEM:YourPassword")), 

     ["Content-Type"] = "application/json", ["content-length"] = jsonsize }

local resp ={}

ok, code, headers = http.request{url = "http://YourServer:8000/Flights/flights.xsodata/FLIGHTS?$format=json", 
     redirect = true, method = "GET", headers = h, source = source, 
                                 sink = ltn12.sink.table(resp)}

local dec = json.decode(resp[1])
local d = dec["d"]["results"]
for i = 1, #d do
 io.write(d[i]["CARRNAME"]," : ",d[i]["PRICE"], "\n")
end
print("")


Hacer esta integración con Lua fué rápido y sencillo…Lua es un lenguaje muy interesánte con algunas características muy buenas que no se pueden encontrar en otros lenguajes...

Saludos,

Blag.
Development Culture.

Thursday, June 18, 2015

LED es mi nuevo Hello World - Tiempo de Lua

Continúando con mi tradición de escribir una aplicación de LED para cada uno de los lenguajes de programación que aprendo...es tiempo de Lua -;)

LedNumbers.lua
local function split(s,delim)
 local result = {}
 for match in (s..delim):gmatch("(.-)"..delim) do
  table.insert(result,match)
 end
 return result
end

leds = {[0] = " _  ,| | ,|_| ",
        [1] = "  ,| ,| ",
        [2] = " _  , _| ,|_  ",
        [3] = "_  ,_| ,_| ",
        [4] = "    ,|_| ,  | ",
        [5] = " _  ,|_  , _| ",
        [6] = " _  ,|_  ,|_| ",
        [7] = "_   , |  , |  ",
        [8] = " _  ,|_| ,|_| ",
        [9] = " _  ,|_| , _| "}

io.write("Enter a number: ")
num = io.read()
for i = 1,3 do
 for j = 1, #num do
  line=split(leds[tonumber(string.sub(num,j,j))],",")
  io.write(line[i])
 end
 print("")
end

Lo que pueden ver inmediatamente...y es algo que realmente me sorprendió...es que Lua no proveé un comando de "split" o "explode" como parte de su core, así que tienes que hacerlo por tu cuenta...en realidad...lo mismo aplica para Haskell...pero para mí...los lenguajes funcionales están en otro nivel...y de todos modos...la implementación en Haskell de la función split es mucho más corta...

Aquí está el resultado...


Saludos,

Blag.
Development Culture.

Friday, June 12, 2015

Mi primer post en Lua

Lua es un lenguaje de programación que siempre me ha intrigado pero que nunca me he dado un tiempo para tratar de aprenderlo...

Esto ha cambiado por supuesto -;) Porque he comenzado a leer Beginning Lua Programming...


Así que...que es Lua exactamente? Bueno...es un lenguaje script embedible (si tienen una mejor traducción para "embeddable" me avisan), poderoso, rápido y ligero.

Una descripción simple para un lenguaje simple...y no...no estoy implicándo simple como "inútil" sino como simple en su curva de aprendizaje y diseño...Lua es en realidad extremadamente poderoso y se que se quedarían más que sorprendidos si supieran donde es utilizado...solo busquen y veran a que me refiero -;)

La sintaxis me recuerda bastante a Python o Julia...así que es bastante sencillo acostumbrarse...

Como un ejemplo...aquí está mi ejemplo de números Fibonacci...

Fibonacci.lua
function fib(num,a,b)
 local result = ""
 if a > 0 and num > 1 then
  result = result .. (a+b) .. " " .. fib(num-1,a+b,a)
 elseif a == 0 then
  result = a .. " " .. b .. " " .. (a+b) .. " " .. fib(num-1,a+b,b)
 end
 return result
end

io.write("Enter a number: ")
num = tonumber(io.read())
print(fib(num,0,1))


Aquí hay un par de pruebas -:)



Saludos,

Blag.
Development Culture.