Showing posts with label Racket. Show all posts
Showing posts with label Racket. Show all posts

Wednesday, September 23, 2015

(Definiendo SAP HANA (OData) con Racket)

Este post fué posteado originalmente en (Defining SAP HANA (OData) with Racket).

Racket es un lenguaje de largo espectro que va más allá de Lisp y Scheme con dialectos que soportan objectos, types, laziness y más. Y más significa Funcional, Procedural, Orientado a Objetos, Lógico, Reflexivo y Meta.

Basicamente…Racket es un nuevo nombre para PLT Scheme. Y PLT Scheme viene de la familia Lisp.

Así que, antes de seguir adelánte…quiero compartir un cómic de XKCD que trata de iluminarnos sobre lo que es Lisp -:)


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 Racket…

Racket es un lenguaje de programación muy completo…así que no necesitamos paquetes externos…

Para programar en Racket utilizo el mejor editor de Racket “Dr. Racket” que viene incluído en la instalación de Racket…así que nuevamente…no hay de que preocuparse -:)

Copien y peguen el siguiente código…

Racket_HANA.rkt
#lang racket
(require json)
(require net/base64)
(require net/url)

(define make-auth-header
     (list (string-append
       "Authorization: Basic "
       (bytes->string/utf-8
        (base64-encode
         (string->bytes/utf-8
          (string-append "SYSTEM" ":" "YourPassword")))))))

(define (get_path path params)
  (port->string(get-pure-port path params)))

(define json (string->jsexpr (get_path (string->url "YouServer:8000/Flights/flights.xsodata/FLIGHTS?$format=json") 
                              make-auth-header)))
(define results (hash-ref (hash-ref json 'd) 'results))

(define (show_info results len ctr)
  (cond [(or (= ctr len) (< ctr len))
         (string-append (hash-ref (list-ref results ctr) 'CARRNAME) ": "
                        (hash-ref (list-ref results 0) 'PRICE) "\n"
                        (show_info results len (add1 ctr)))]
        [(> ctr len)
         (string-append "" "\n")]))

(display (show_info results (sub1 (length results)) 0))

Ahora lo pueden ver…Racket adora los parentesis -:) En fín…presionar el botón "run" y tendrás esto…


He estado haciendo interfaces de SAP HANA OData con muchos lenguajes…y hasta ahora…Racket ha sido una de mis implementaciones más cortas…aunque es dificil acostumbrarse a tantos parentesis…es un lenguaje muy interesánte y poderoso…y lás cosas salen más pronto de lo que uno podría imaginarse…

Saludos,

Blag.
Development Culture.

Wednesday, October 29, 2014

How to Design Programs - Review del Libro

Acabo de terminar de leer How to Design Programs, un libro dirigido a principiantes que quieren explorar el maravilloso mundo de la programación...y para ello utiliza Scheme y DrScheme (el cual es llamado ahora Racket).



Por supuesto, no se enfocan en Scheme pero en los principios del diseño en programación...el cual lo convierte en un libro muy importante.

El libro en si es bastante grande...con 565 páginas...

Hay mucho ejemplos muy interesántes que van desde bastante simples a más o menos complejos, así que viene enlazado con una muy buena curva de aprendizaje.

Utilizándo Scheme como un punto de inicio para aprender programación es un mi opinión una opción bastante inteligente...la sintáxis puede ser un poco extraña algunas veces pero lo bueno es que no hay muchos keywords así que su aprendizaje no es una tarea muy dura...



Aún si tienes experiencia en programación...este libro es muy útil puesto que va más allá del simple acto de programar puesto que enseña como diseñar, construir y probar tus aplicaciones...haciéndolas más robustas y menos propensas a errores...

Si tienen la oportunidad...lean este libro...no se van a arrepentir -;)

Saludos,

Blag.
Development Culture.

Thursday, October 16, 2014

Realm of Racket - Review del libro

Justo acabo de terminar de leer Realm of Racket un libro sobre Racket -:)


El libro tiene 316 páginas...así que es un libro grande...

Empieza con los conceptos básicos de Rackets pero muy rápidamente salta a desarrollar juegos con Racket...lo cual es algo excelente...especialmente si quieres construir juegos con Racket...

El libro viene con algunos comics interesántes y divertidos contándonos la historia de Chad y como utilizándo Racket logra resolver algunos interesántes retos...

Algo que no me gusta mucho del libro...es que me parece que algunos de los juegos son muy largos y complejos lo cual contradice un poco el hecho de ser un libro para principiantes...

En fín...el libro viene con mucha información interesánte y te pondrá el camino correcto para aprender Racket -;)

Aprenderás acerca de Recusión, Lambdas, Loops, GameUI y Networking...





Racket es un poderoso pero extraño lenguaje de programación...así que este libro te ayudará a sentirte más cómodo...

Si quieres aprender Racket de una manera divertida y construí algunos juegos en el proceso...entonces este libro es para ti -:)

Saludos,

Blag.
Development Culture.

Wednesday, October 15, 2014

LED es mi nuevo Hello World - Tiempo de Racket

Si pensaron que iba a dejar pasar la oportunidad de escribir un generador de números LED en Racket ...estaban totalmente equivocados -;)

Debo admitirlo...no fué nada fácil...Racket es impresionante pero extraño...toma un poco de tiempo acostumbrarse a usarlo...pero cuando las cosas funcionan...funcionan bien -;)

Aquí está el código fuente...

LED.rkt
#lang racket
(define (showLED num)
  (display(get_led(toList num num 0 1) 1 num)))

(define (toList num num_o start end)
  (cond [(number? num) (toList(number->string num) (number->string num_o) start end)]
        [(and (string? num) (> (string-length num_o) 1)) (append (cons(substring num start end) '())
                                                                (toList num (substring num_o 1 (string-length num_o)) 
                                                                        (add1 start)(add1 end)))]
        [(and (string? num) (= (string-length num_o) 1)) (append (cons(substring num_o 0 1) '()))]))

(define (get_led x n num)
  (cond [(> (length x) 0) (append (cons(make_led_digit (string->number(first x)) n) '()) (get_led(rest x) n num))]
        [(and (= (length x) 0) (< n 3)) (append '("\n") (get_led(toList num num 0 1) (add1 n) num) )]
        [(and (= (length x) 0) (>= n 3)) append '()]))

(define (make_led_digit a b)
  (cond [(and (= a 0)(= b 1)) " _  "]
        [(and (= a 0)(= b 2)) "| | "]
        [(and (= a 0)(= b 3)) "|_| "]
        [(and (= a 1)(= b 1)) "  "]
        [(and (= a 1)(= b 2)) "| "]
        [(and (= a 1)(= b 3)) "| "]
        [(and (= a 2)(= b 1)) " _  "]
        [(and (= a 2)(= b 2)) " _| "]
        [(and (= a 2)(= b 3)) "|_  "]
        [(and (= a 3)(= b 1)) "_  "]
        [(and (= a 3)(= b 2)) "_| "]
        [(and (= a 3)(= b 3)) "_| "]
        [(and (= a 4)(= b 1)) "    "]
        [(and (= a 4)(= b 2)) "|_| "]
        [(and (= a 4)(= b 3)) "  | "]
        [(and (= a 5)(= b 1)) " _  "]
        [(and (= a 5)(= b 2)) "|_  "]
        [(and (= a 5)(= b 3)) " _| "]        
        [(and (= a 6)(= b 1)) " _  "]
        [(and (= a 6)(= b 2)) "|_  "]
        [(and (= a 6)(= b 3)) "|_| "]
        [(and (= a 7)(= b 1)) "_   "]
        [(and (= a 7)(= b 2)) " |  "]
        [(and (= a 7)(= b 3)) " |  "]
        [(and (= a 8)(= b 1)) " _  "]
        [(and (= a 8)(= b 2)) "|_| "]
        [(and (= a 8)(= b 3)) "|_| "]
        [(and (= a 9)(= b 1)) " _  "]
        [(and (= a 9)(= b 2)) "|_| "]
        [(and (= a 9)(= b 3)) " _| "]))

Así es como se ve cuando lo ejecutamos...


Bueno...debo seguir aprendiendo...así que...nos vemos pronto -;)

Saludos,

Blag.
Development Culture.

Monday, October 13, 2014

Mi primer post sobre Racket

En mi eterna búsqueda de lenguajes de programación extraños...Llegué a encontrar Racket...que es basicamente el nuevo nombre de "PLT-Scheme"...de la familia de Lisp...


Racket puede ser instalado en Windows, Mac y Linux...así que es bastante bueno -:) Además de que viene con un excelente IDE llamado DrRacket...


Debo decirlo...Racket no se parece a nada de lo que he visto antes...es por es que lo amo -:D

Y aquí viene lo más extraño de todo...Racket es...
  • Funcional
  • Procedural
  • Modular
  • Orientado a Objetos
  • Lógico
  • Reflexivo
  • Meta

Loco, no? Ahora mismo estoy leyendo un libro impresionante llamado "Realm of Racket"...


Y luego de haber leído las primeras 61 páginas (sip...nada más) pude trasladar mi applicación Fibonacci en Haskell hacia Racket...así que aquí les va el código...

Fibonacci.rkt
#lang racket
(define (showFib num)
  (fib num 0 1))

(define (fib num a b)
  ( cond [(and (> a 0) (> num 1)) (append (cons (+ a b) '()) (fib (sub1 num) (+ a b) a))]
         [(= a 0) (append (append (cons a (cons b '())) (cons (+ a b) '())) (fib(sub1 num)(+ a b) b))]
         [(= 1 num) (append '())]))


Ahora...si lo ejecutamos...esto es lo que vamos a ver...


Impresionante, no? Funciona tal como lo esperado -:) No podría estar más feliz -;)

Saludos,

Blag.
Development Culture.