Está en la página 1de 10

Informática en ejemplos

Ejemplos de código en diversos lenguajes de programación.

JPA. Llaves compuestas con @IdClass

package com.inforhomex.entity;

import com.inforhomex.entity.pk.TelephonePK;

import java.util.Objects;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

@Entity
@Table(name = "Telephones")
@IdClass(value = TelephonePK.class)
public class Telephone {
@Id
private Long employeId;
@Id
private String telType;

private String number;

/*GETTERS AND SETTERS*/

Listar versión de un paquete instalado en Python

No existe una forma que asegure siempre obtener la versión de un paquete/módulo,


esto puede depender del método de instalación/administrador de paquetes usado y de
características propias de cada librería (que puede incluso no exponer esta
información en algunos casos). Genéricamente hay dos formas de obtener esta
información:

Desde la terminal, si se usa PIP para instalar los paquetes


En este caso podemos obtener las versiones de los mismos de diferentes formas:
 pip list. Muestra los paquetes instalados junto a su versión, tabulados y
ordenados alfabéticamente:
 $ python3 -m pip list

 Package Version
 --------------- ---------
 matplotlib 2.2.2
 mypy 0.620
 nltk 3.3
 Nuitka 0.5.32.3
 numpy 1.15.0
 opencv-python 3.4.2.17
pandas 0.23.4
 pip freeze. En este caso muestra los paquetes y su versión pero en el formato
propio para requirements.txt, menos ameno al usuario:
 $ python3 -m pip freeze

 beautifulsoup4==4.6.1
 matplotlib==2.2.2
 mypy==0.620
 nltk==3.3
 Nuitka==0.5.32.3
 numpy==1.15.0
 opencv-python==3.4.2.17
pandas==0.23.4
 pip show. Permite mostrar información detallada de uno o varios paquetes
(nombre, descripción, versión, autor, email, homepage, directorio de instalación,
paquetes requeridos, paquetes que lo requieren) instalados:
 $ python3 -m pip show numpy pandas matplotlib

 Name: numpy
 Version: 1.15.0
 Summary: NumPy: array processing for numbers, strings, records, and objects.
 Home-page: http://www.numpy.org
 Author: Travis E. Oliphant et al.
 Author-email: None
 License: BSD
 Location: .pyenv/versions/3.7.0/lib/python3.7/site-packages
 Requires:
 Required-by: scipy, pandas, opencv-python, matplotlib
 ---
 Name: pandas
 Version: 0.23.4
 Summary: Powerful data structures for data analysis, time series, and statistics
 Home-page: http://pandas.pydata.org
 Author: None
 Author-email: None
 License: BSD
 Location: .pyenv/versions/3.7.0/lib/python3.7/site-packages
 Requires: pytz, numpy, python-dateutil
 Required-by:
 ---
 Name: matplotlib
 Version: 2.2.2
 Summary: Python plotting package
 Home-page: http://matplotlib.org
 Author: John D. Hunter, Michael Droettboom
 Author-email: matplotlib-users@python.org
 License: BSD
 Location: .pyenv/versions/3.7.0/lib/python3.7/site-packages
 Requires: kiwisolver, six, python-dateutil, pyparsing, numpy, pytz, cycler
Required-by:
Desde el propio script/intérprete interactivo
En este caso tenemos también varias posibilidades:

 Usar el atributo especial __version__:


 >>> import pandas
 >>> import matplotlib
 >>> import numpy

 >>> pandas.__version__
 '0.23.4'
 >>> matplotlib.__version__
 '2.2.2'
 >>> numpy.__version__
'1.15.0'
Si bien es la forma estándar de definir la versión de un módulo a partir de PEP
396, hay librerias que no lo implementan o lo hacen solo a nivel de
subpaquetes/módulos, cómo es el caso de lxml.
 De tener instalado setuptools (bastante probable) podemos usar pkg_resources:
 >>> pkg_resources.get_distribution("numpy").version
 '1.15.0'
 >>> pkg_resources.get_distribution("lxml").version
'4.2.4'
El uso de pip list/freeze/show y de __version__ posiblemente sean las formas más
universales, pero no siempre están disponibles en todos los casos. Hay paquetes que
definen sus propias formas de acceder a la versión instalada, por ejemplo:
¿Como sé qué versión de Django estoy usando?
NOTA: dado que usas Python 3 en Windows, de no estar usando entornos virtuales,
la forma más simple de ejecutar intérprete determinado en CMD, sobretodo si se
tienen varias versiones de Python instaladas, es usar Python Launcher, que ya tienes
instalado:
py -3.6 -m pip list
py -2.7 -m pip list
py -3.6 mi_modulo.py
...
Proceso batch en Groovy.
En este ejemplo vamos a ver como ejecutar un proceso batch en Groovy.
Para ello tenemos que saber que los archivos batch son útiles para la
automatización de tareas,por ejemplo revisar el espacio en disco, ver el
contenido de un directorio, ,etc. En este ejemplo vamos a crear un
archivo BAT (MS-DOS).

Abrimos cualquier editor de texto (como notepad++, sublime text 2, etc.)


y creamos un nuevo archivo, le llamaremos "miscomandos.bat" (también
se puede cambiar la extensión por .cmd).
@echo off
echo Hola visitante de
http://alquimistadecodigo.blogspot.com/
@pause

Desde terminal de comando nos ubicamos en el directorio donde se creo


el archivo y tecleamos su nombre, aparece el mensaje: Hola visitante de
https://alquimistadecodigo.blogspot.com
¿Groovy permite ejecutar comandos del sistema? Así es, basta que
teclees desde terminal "groovysh"te abrirá el REPL. Escribe esto:
println "help".execute().text

Groovy Shell (2.1.5, JVM: 1.7.0_05)


Type 'help' or '\h' for help.
-----------------------------------------
groovy:000> printl "help".execute().text

Saldrá algo como esto:

-------------------------------------------------
------------------------------
groovy:000> printl "help".execute().text
ERROR groovy.lang.MissingMethodException:
No signature of method:
groovysh_evaluate.printl() is applicable for
argument ty
pes: (java.lang.String) values: [Para obtener más
información acerca de un coman
do específico, escriba HELP
seguido del nombre de comando
ASSOC Muestra o modifica las
asociaciones de las extensiones
de archivos.
ATTRIB Muestra o cambia los atributos del
archivo.
BREAK Establece o elimina la
comprobación extendida de Ctrl+C.
BCDEDIT Establece propiedades en la base
de datos de arranque para
controlar la carga del arranque.
CACLS Muestra o modifica las listas de
control de acceso (ACLs)
de archivos.
CALL Llama a un programa por lotes
desde otro.
CD Muestra el nombre del directorio
actual o cambia a otro
directorio.
CHCP Muestra o establece el número de
página de códigos activa.
//... más

Vamos a modificar el archivo "miscomandos.bat"


@echo off
@rem Programando en Batch
title Ejemplo de Batch
cls
echo Hola usuario %USERNAME%
echo hora: %time%
echo fecha: %date%
@pause

El siguiente paso es convertir este archivo en un *.exe, para ello usamos


el programa battoexeconverter, nos generará el archivo ejecutable, lo
guardamos en el ditrectorio C:\Windows\System32 (lo nombramos
"miscomandos.exe") Creamos el archivo "ejecuta.groovy" con el
siguiente código que ejecutará nuestro proceso batch en Groovy:
def programa="miscomandos.exe"
def sub="cmd /c start "+programa
Process p=sub.execute()
println p.text

Ejecutamos,la salida del proceso batch en Groovy es la siguiente:


Hola usuario Yo
hora: 19:10:47.86
fecha: 23/07/2013
Presione una tecla para continuar ...

Ya tenemos nuestro programa que permite ejecutar un proceso batch en


Groovy.

En los lenguajes dependientes de la JVM encontramos varias


peculiaridades que no llaman la atención. Y Groovy no se queda atrás.

Tenemos esta clase en Java:

class Cliente {
private String nombre;
public Cliente(){}

public void setNombre(String nombre){


this.nombre=nombre;
}

public String getNombre(){


return nombre;
}
}

Y ahora en Groovy:

class Cliente{
String nombre
}

Lo primero que notamos es que es menor código escrito. Pero también


a la hora de instanciar encontramos algo como esto:

En Java:
Cliente cliente= new Cliente();

En Groovy:
def cliente= new Cliente(nombre:"")

Y para "settear":

En Java:
cliente.setNombre("El alquimista de código");

En Groovy nos permite hacer esto de varias formas:


def cliente=new Cliente(nombre:"El alquimista de código")

O de esta otra forma:


cliente.nombre="El alquimista de código"
Además de usar "with" para asignar valores:
def cliente = new Cliente()
cliente.with{
nombre="El alquimista de código"
}

A Groovy se le considera "El Python de Java" por su sintaxis tan parecida


a ese lenguaje.
¿Cómo definir un mapa?
def mapaVacio=[:]
def mapaLleno=[1:'uno',2:'two',3:'III']

¿Cómo recorrer un mapa?


Con each:
mapaLleno.each{ llave , valor ->
println "llave: $llave - valor: $valor"
}
Con un for (llaves y valores):
for(valor in mapaLleno.values()){
println "valor: $valor"
}

for(llave in mapaLleno.keySet()){
println "llave: $llave"
}

Obtener un valor en específico


def mapaEscritores=['Jose Saramago':'La caverna','Carlos Ruiz Zafon':'La
sombra del viento','Taylor Caldwell':'El gran león de Dios','Jostein
Gaarder':'El mundo de Sofía']
def llave='Carlos Ruiz Zafon'
println mapaEscritores[llave] // imprime 'La sombra del viento'

if(mapaEscritores.containsKey(llave)){
println mapaEscritores[llave]
}

def escritor='Taylor Caldwell'


println mapaEscritores.get(escritor) // imprime 'El gran león de Dios'

Links
http://www.davidmarco.es/archivo/tutorial-groovy

Código en COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG0013.
AUTHOR FERNANDO CARRARO.
INSTALLATION. CODEMONKEYJUNIOR.
DATE-WRITTEN. 13/04/19.
DATE-COMPILED.
SECURITY. NO ES CONFIDENCIAL.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9 VALUE 0.

PROCEDURE DIVISION.
MOVE 3 TO WS-A.
DISPLAY "INTRODUCE NUMERO:".
ACCEPT WS-A.
EVALUATE TRUE
WHEN WS-A = 3
DISPLAY WS-A" es igual a 3"
WHEN WS-A > 2
DISPLAY WS-A" es mayor que 2"
WHEN WS-A < 0
DISPLAY WS-A"es menor a 0"
WHEN OTHER
DISPLAY "Entrada no valida"
END-EVALUATE.
STOP RUN.