domingo, 6 de septiembre de 2020

Docker: instalando Elixir

 

Elixir es un lenguaje dinámico y funcional diseñado para crear aplicaciones escalables y fáciles de mantener. En este post instalaremos una imagen de Elixir con ayuda de Docker

Podemos buscar una imagen tecleando:

$ docker search elixir
Descargamos e instalamos imagen de Elixir.
$ docker pull elixir

Creamos un programa Elixir. La extensión es *.exs.
hola_mundo.exs

IO.puts "Hola, mundo en Elixir!!"

El clásico programa de "Hola, mundo".  

Listamos imágenes.

$ docker images -a

Para entrar al REPL del lenguaje:
$ docker run -it --rm elixir

Para ejecutar script:
$ docker run -it --rm --name elixir-inst1 -v "$PWD":/usr/src/myapp -w /usr/src/myapp elixir elixir hola_mundo.exs

Links: 

https://elixir-lang.org/

domingo, 30 de agosto de 2020

Un lenguaje de programación llamado Concurnas

Concurnas es un lenguaje de programación JVM de código abierto diseñado para construir sistemas concurrentes, distribuidos y paralelos confiables, escalables y de alto rendimiento. A primera vista es muy parecido a Groovy.

La extensión de un programa en Concurnas es *.conc  

Instalación

$ sdk install concurnas
Compilar:
$ concc programa.conc
Ejecutar:
$ conc programa

El Hello, world y otros programas usando Concurnas:

hello_world.conc
System.out.println("Hola, mundo en Concurnas!!")

clases.conc
class X{
   def hola(){
      System.out.println("Hola desde clase X")
   }
}
class Y{
   def hola(){
      System.out.println("Hola desde clase Y")
   }
}

def main(args String[]){
   new X().hola()
   new Y().hola()
}
mayor.conc
def main(args String[]){
  x int = 4
  y int = 2
  System.out.println("x: "+x)
  System.out.println("y: "+y)
  if(x > y){
    System.out.printf("%d > %d \n",x,y)
  }
}

cuenta.conc
def main(args String[]){
	cuenta()
}

def cuenta(){
    suma int = 0
    nombre String = "Polinar Sanchez Umberto"
    palabras String[] = nombre.split(" ")
    System.out.println(nombre)
    System.out.println("Cant. de palabras: "+palabras.length)
    for(cad in palabras){
    	System.out.println(cad+" : "+cad.length())
    	suma = suma + cad.length()
    }
    System.out.println("Cant. de letras: "+suma)
}
operaciones.conc
class X{
	def hacer(args String[]){
		System.err.println("Argumentos: "+args)
	}

	def getLongitud(a String?)=> a?.length()?:'ups'
}

def main(args String[]){
  System.out.println("Hola, mundo en Concurnas!!")	
  new X().hacer(args)

  System.out.println(new X().getLongitud(null))//ups
  System.out.println(new X().getLongitud("null"))//4

  System.out.println("\t***Tipos***")
  entero int 
  entero = 453
  System.out.println("Entero: "+entero)
  System.out.printf("Entero: %d\n",entero)
  cadena String
  cadena = "Este es un buen dia para comenzar."
  System.out.printf("Cadena: %s\n",cadena)
  verdadero Boolean
  verdadero = true
  if(verdadero){
  	System.out.println(new X().getLongitud("Juan Jacobo Rosseau"))
  }

  testA()
  caracter char 
  caracter ='\u1234'
  System.out.println("Caracter: "+caracter)
  class MyClase
  objClase MyClase
  objClase = new MyClase()
  
  if(objClase == null){
  	System.out.println("El objeto es nulo")
  }else{
  	System.out.println("El objeto no es nulo")
  }

  testB()
  testC()

}

def testA(){
	System.out.println("Este es un metodo")
}

def testB(){
  a int = 32
  b int = 21
  c int = 11
  mayor int = a

  System.out.printf("a:%d, b:%d, c:%d\n",a,b,c);
  
  if(mayor < b){
    mayor = b
  }
  if(mayor < c){
    mayor = c
  }
  System.out.println("El mayor es: "+mayor);

}

def testC(){
  System.out.println(mayuscula())
  System.out.println("Suma: "+suma(12,4))
  System.out.println("Decimo: "+decimo())
  System.out.println("Centesimo: "+centesimo())
  System.out.println("Milesimo: "+milesimo())
  //Esto no compilara:
  //cadena String=null
  cadena String="null"
  try{
    cadena = cadena.toUpperCase()
  }catch(npe NullPointerException){
    System.err.println("Ha ocurrido un NullPointerException!!")
  }catch(ex Exception){
    System.err.println("Ha ocurrido una excepcion: "+ex.toString())
    ex.printStackTrace()
  }

  if(verdadero()){
    System.out.println("Suma: "+suma(-32,54))
  }

  falsoFalso Boolean = falso()
  if( not falsoFalso){
    System.out.println("Hola, mundo desde Concurnas!!!")
  }
}

def mayuscula(){
  "mayuscula".toUpperCase()
}

def suma(a int, b int){
  a+b
}

def decimo(){
  1.0/10.0
}

def centesimo(){
  1.0/100.0
}

def milesimo(){
  1.0/1000.0
}

def verdadero()=> true
def falso()=> false

Como se puede observar es muy similar a Java y/o Groovy. En próximos post seguiremos hablando de este lenguaje.

 

Sitio oficial: 

https://concurnas.com

sábado, 11 de julio de 2020

Scala sobre SBT parte 2



En el anterior post sobre SBT vimos una breve descripción de la herramienta y cómo instalarlo.

Para listar la versión de la herramienta debemos abrir una terminal de comandos y teclear:
$ sbt -version

Mostrará algo como esto:
sbt version in this project: 1.3.4
sbt script version: 1.3.4


Creando un proyecto con SBT.
  1. Crear directorio.
  2. Ubicarnos en directorio creado y crear subdirectorio.
  3. Crear archivo build.sbt
  4. Escribir el código.
  5. Compilar y ejecutar.
$ mkdir testSbt
$ cd testSbt
$ mkdir sbt-ejemplo
$ cd sbt-ejemplo


Una vez en el directorio sbt-ejemplo, creamos el archivo build.sbt con cualquier editor de textos.

Ahora creamos el programa.

Hola.scala

package main

object Hola{

   def main(args: Array[String]):Unit{
       println("Hola, mundo desde Codemonkey Junior")
   }

}


Para compilar y ejecutar el programa tecleamos:
$ sbt

 >compile
 >run


Si no hay ningún error, mostrará el mensaje:
"Hola, mundo desde Codemonkey Junior"


Links:
https://emanuelpeg.blogspot.com/2020/05/libro-gratuito-de-scala.html
https://www.scala-sbt.org/
http://www.scala-js.org/
https://sdkman.io




viernes, 8 de mayo de 2020

Scala sobre SBT

SBT (Simple Build Tool) es una herramienta similar a Gradle, pero para el lenguaje Scala, un lenguaje de programación dependiente de la JVM.

Con esta herramienta podremos crear proyectos Scala. Crear su documentación y soportar subproyectos.

El archivo build.sbt es como el build.gradle para Gradle y/o el pom.xml para Maven.

Instalando SBT usando SDKMAN!

$ sdk install scala

Instalando SBT en Windows

https://www.scala-sbt.org/download.html


En siguientes post veremos como usar esta herramienta.


Enlaces:
https://emanuelpeg.blogspot.com/2020/05/libro-gratuito-de-scala.html
https://www.scala-sbt.org/
http://www.scala-js.org/
https://sdkman.io
 

domingo, 29 de marzo de 2020

Groovy for todos!!

En este blog hemos tratado algunos temas sobre Groovy, un lenguaje de programación de tipado dinámico (o pseudo dinámico) muy parecido a lenguajes como Python y/o Ruby.

Muchos, es la verdad, no lo conocen y mucho menos lo usan de manera profesional. Esto nos hace preguntar ¿Por qué?  ¿Por qué casi nadie lo conoce/usa? La respuesta es más que obvia: Java sigue activo y otros lenguajes como Kotlin se comen a los lenguajes dependientes de la máquina virtual.

Además tomando en cuenta que surgen otras dudas:
¿Qué puedo hacer con Groovy que no pueda hacer con Java?
¿Me conviene ($) aprenderlo?
¿Lo usaré en algún trabajo?

La única forma de responder esto es ponernos a la obra y conocer el lenguaje. Y para ello su instalación será esencial. Nosotros usaremos SDKMAN! que nos facilita la existencia.

$ sdk install groovy

Una vez instalado crearemos el clásico programa Hola, mundo.

GroovyMain.groovy

class GroovyMain{

  static void main(args){
     println "Hola, mundo!!!"
  }

}

Compilamos y ejecutamos:

$ groovyc GroovyMain.groovy
$ groovy GroovyMain

Mostrará el mensaje "Hola, mundo!!!" en consola.

Como dice la documentación oficial: Groovy se permite algunas cosas que no se permiten en Java, comoel tipado pseudo dinámico.

def fecha = new Date() 
fecha = null 
def entero = "33" 
entero = 33 // permitido
String nombre = "Groovy is wonderful!!!"
nombre = true //Cuidado con esto 
boolean verdadero = false
def file = new File("archivo.sql");

Otra cosa que no debemos olvidar: Gradle, un gestor de proyectos similar a Maven, usa Groovy (DSL).


 Links:
http://groovy-lang.org/




domingo, 12 de enero de 2020

Java: Unsupported major.minor version 52.0

Es común encontrar excepciones en proyectos Java. No importando si el código está "bien escrito", siempre habrá algo que nos causará un disgusto futuro.

Recordar:Una excepción es una anomalía en el flujo normal de un programa. Un error, muchas veces, es un fallo irreparable en la que el desarrollados y/o usuario no les queda otra cosa más que pedir clemencia al Creador de Universo y la solución caiga del mismo cielo.

Uno de las más famosas es el NullPointerException, pero en está ocasión lo que nos trae ahora es el Error  Unsupported major.minor version 52.0

¿Por qué ocurre este error?
Parece ser que es porque una clase fue compilada en una versión de JDK específica y se quiere ejecutar en Otra  Versión de JDK. La clase java.lang.UnsupportedClassVersionError nos lanza este error.


Ejemplo. Compilas tu programa en JDK 5 y tratas de ejecutarlo con un JDK 4.

La siguiente tabla nos puede aclarar un poco las cosas.

Tabla

//Tabla de versiones y número correspondiente
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

La versión 52 corresponde al JDK 8. Lo que quiere decir que...


¡COMPILAMOS EL CÓDIGO EN UN JDK 8 Y TRATAMOS DE EJECUTARLO EN UN JDK MENOR!

Posibles soluciones, si es que usas Eclipse, son:

1. Project -> Properties -> Java Compiler Enable -> Compiler compliance level to 1.7, 1.6, 1.5 ...

2. Window -> Preferences -> Java ->  Compiler ->Compiler compliance level to 1.7, 1.6, 1.5 ...

3. Revisar que el JDK y el JRE sean la versión 8.

Links:
https://javarevisited.blogspot.com/2015/05/fixing-unsupported-majorminor-version.html






domingo, 15 de diciembre de 2019

JDBC

En este blog hemos hablado sobre alternativas a JDBC como JDBI, sin embargo conocer lo esencial siempre es importante.

JDBC fue ideada para crear una interface común entre distintos proveedores de bases de datos. Supongamos que requiero conectarme a una BD Oracle y/o SQL Server, con JDBC podemos crear una conexión sin la necesidad de crear decenas o centenas de clases y sus respectivos métodos, pues JDBC contiene lo esencial para ello.

Existen cuatro tipos de drivers JDBC:
  1. DRIVER PUENTE JDBC-ODBC: Un ejemplo de su uso es cuando queremos conectarnos a una BD de Access o incluso Excel. Al parecer ya no está en uso.
  2. DRIVER NATIVO: El inconveniente es que la máquina cliente debe tener instalador el driver,a unque es más recomendable que el driver JDBC-ODBC.
  3. DRIVER INTERMEDIO (RED): no requiere ningún tipo de instalación den el equipo donde se ejecuta el programa.
  4. DRIVER PURO(JAVA): no requiere ningún tipo de configuración en la máquina cliente.

 JDBC nos permite cargar el driver específico que necesitamos, crear la conexión a la BD, preparar y ejecutar sentencias SQL y visualizar los resultados de las consultas.

¿Cuáles son los pasos para usar JDBC?
Son cuatro pasos:
  1. Conectarnos a la BD: requerimos cargar el driver y crear la conexión.
  2. Ejecución de consultas: crear las sentencias SQL a ejecutar.
  3. Manipulación de registros: lectura, inserción, actualización y eliminación mediante lenguaje SQL(DML).
  4. Cerrar la conexión.


Cargar el driver
private static final String DRIVER_POSTGRES = "org.postgresql.Driver";
//...
Class.forName(DRIVER_POSTGRES);
Crear la conexión:
private static final String url = "jdbc:postgresql://localhost/BD";
private static final String user = "postgres";
private static final String password = "m1Cl4v3";

//Creamos la conexion
Connection conn;
//Postgres
conn = DriverManager.getConnection(url, user, password);
System.out.println("Conexion exitosa!!");
Ejecución y manipulación de datos (y cierre de la sentencia):
stm.execute(sql);
rs = stm.executeQuery(sql);
if(rs.next()) {
//...
rs.close();
}
Cerrar conexión:
conn.close();
//Comprobamos el cierre
if(conn.isClosed() == true) {   
   System.out.println("Conexion cerrada");
}

Ejemplo. Creamos una conexión a PostgreSQL.

  • Clase Main.java
  • Clase Contacto.java
  • Clase ConexionPostgres.java


Contacto.java

package org.inforhomex.modelo;

/**
*@Author Fer Carraro
*
*/

public class Contacto {
 private int id;
 private String nombre;
 private String telefono;

 public Contacto() {
 }

 public Contacto(int id, String nombre, String telefono) {
  super();
  this.id = id;
  this.nombre = nombre;
  this.telefono = telefono;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getNombre() {
  return nombre;
 }

 public void setNombre(String nombre) {
  this.nombre = nombre;
 }

 public String getTelefono() {
  return telefono;
 }

 public void setTelefono(String telefono) {
  this.telefono = telefono;
 }

 @Override
 public String toString() {
  return "Contacto [id=" + id + ", nombre=" + nombre + ", telefono=" + telefono + "]";
 }

}

ConexionPostgres.java
package org.inforhomex.conexion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.sql.SQLException;
import java.sql.SQLSyntaxErrorException;
import org.postgresql.util.PSQLException;
import org.inforhomex.modelo.Contacto;


public class ConexionPostgres {
 
 
 private static final String DRIVER_POSTGRES = "org.postgresql.Driver";
 private static final String url = "jdbc:postgresql://localhost/curso";
 private static final String user = "postgres";
 private static final String password = "tuclave";
 

 public static void conexion() throws SQLException, SQLSyntaxErrorException,ClassNotFoundException,PSQLException; { 
  //Postgres
  Class.forName(DRIVER_POSTGRES);
  
  //Creamos la conexion
  Connection conn;
  //Postgres
  conn = DriverManager.getConnection(url, user, password);
  System.out.println("Conexion exitosa!!");
  String sql; 
  //Sentencia SQL Postgres
  sql = "select nombre, telefono from public.contactos limit 1";
  Statement stm;
  ResultSet rs;
  Contacto contacto;
  
  stm = conn.createStatement();
  
  if(stm != null) {
   //ejecutamos consulta
   System.out.println("Ejecutamos consulta...");
   stm.execute(sql);
   rs = stm.executeQuery(sql);
   if(rs.next()) {
    System.out.println("Nombre: "+rs.getString("nombre"));
    System.out.println("Telefono: "+rs.getString("telefono"));
    contacto = new Contacto();
    contacto.setId(1);
    contacto.setNombre(rs.getString("nombre"));
    contacto.setTelefono(rs.getString("telefono"));
    javax.swing.JOptionPane.showMessageDialog(null, contacto,"Contacto encontrado",JOptionPane.INFORMATION_MESSAGE);
   }
   //cerramos el ResultSet
   rs.close();
   //cerramos consulta
   System.out.println("Cerramos consulta...");
   stm.close();
  }
  
  
  //Cerramos la conexion
  conn.close();
  //Comprobamos el cierre
  if(conn.isClosed() == true) {
   System.out.println("Conexion cerrada");
  }
 }

}


Main.java
package org.inforhomex;

import org.inforhomex.conexion.ConexionPostgres;
import org.inforhomex.conexion.Conexion;
import java.sql.SQLException;
import java.sql.SQLSyntaxErrorException;
import javax.swing.JOptionPane;
import org.postgresql.util.PSQLException;
/**
*@Author Fer Carraro
*
*/

public class Main {

 public static void main(String[] args) {
  System.out.println("Inicio");
  try {
   //Nos conectamos a la BD
   ConexionPostgres.conexion();
  } catch(PSQLException ex0) {
   JOptionPane.showMessageDialog(null, ex0.toString(),"PSQLException",JOptionPane.ERROR_MESSAGE);
  }catch (SQLSyntaxErrorException ex1) {
   JOptionPane.showMessageDialog(null, ex1.toString(),"SQLSyntaxErrorException",JOptionPane.ERROR_MESSAGE);
  } catch (SQLException ex2) {
   JOptionPane.showMessageDialog(null, ex2.toString(),"SQLException",JOptionPane.ERROR_MESSAGE);
  } catch (Exception ex3) {
   JOptionPane.showMessageDialog(null, ex3.toString(),"Exception",JOptionPane.ERROR_MESSAGE);
  }finally {
   System.out.println("Hecho");
  }
 }

}

Ejemplo completo en github:

Links:
https://www.javatpoint.com/jdbc-driver 
http://codigoxules.org/conectar-mysql-utilizando-driver-jdbc-java-mysql-jdbc/


Programadores

Un programador es una persona que no solo teclea código. Es un profesional, certificado o no, que tiene ciertas peculiaridades. ...

Etiquetas

Archivo del blog