Author Archives: admin

Librerías de Java para Reportes

Estas son algunas de las librerías para Java que puedes usar para generar reportes en diversos formatos, agregar gráficas y otros recursos útiles para mostrar datos al usuario final. Algunos proyectos disponen de una versión opensource, edición community y versiones comerciales.

JFreeChart

JFreeChart es una biblioteca de gráficos hecha 100% Java que facilita a los desarrolladores mostrar gráficos de calidad profesional en tus aplicaciones. El amplio conjunto de características de JFreeChart incluye:

  • Una API consistente y bien documentada, que admite una amplia gama de tipos de gráficos
  • Diseño flexible que es fácil de ampliar, dirigida tanto a aplicaciones de servidor como del cliente.
  • Compatibilidad con muchos tipos de salida, incluidos los componentes Swing y JavaFX, archivos de imagen (incluidos PNG y JPEG) y formatos de archivos de gráficos vectoriales (incluidos PDF, EPS y SVG)
  • JFreeChart es de código abierto o más específicamente, software libre. Se distribuye bajo los términos de la GNU Lesser General Public Licence (LGPL), que permite su uso en aplicaciones propietarias.

JasperReport

JasperReport es una de las herramientas para reportes de código abierto más populares y ampliamente utilizadas. Se usa en cientos de miles de entornos de producción y presenta versiones tanto community como comerciales.

  • Formateo y visualización de reportes interactivos
  • Repositorio central seguro
  • Informe de programación y distribución
  • Interfaz de usuario personalizable y personalizable

BIRT

BIRT consta de varios componentes. Los componentes principales incluyen un diseñador de reportes y en tiempo de ejecución de BIRT, pero BIRT también proporciona tres componentes adicionales: un motor de gráficos, un diseñador de gráficos y un visor. Con estos componentes, podrías desarrollar y publicar informes como una solución independiente.

  • Listas
  • Gráficas
  • Tablas cruzadas
  • Cartas y documentos
  • Informas compuestos

Pentaho

Pentaho es una suite empresarial completa, que abarca una amplia gama de casos de uso desde reportes hasta minería de datos. La suite de Pentaho BI abarca varios proyectos de código abierto, de los cuales Pentaho Reporting es uno de ellos. Al igual que las otras herramientas, Pentaho Reporting tiene un amplio conjunto de funciones, listas para su uso en organizaciones empresariales.

  • Permite crear reportes en PDF, Excel, HTML, texto, archivo de texto enriquecido, XML y CSV.

SpagoBI

SpagoBI es otra suite de inteligencia empresarial completa. Algunas herramientas que incluye son, por ejemplo: reportes, gráficos, cockpits, minería de datos, ETL y mucho más. La empresa que respalda este desarrollo ofrece servicios profesionales como asistencia al usuario, mantenimiento, consultoría y capacitación.

  • Reportes en formatos HTML, PDF, XLS, XML, TXT, CSV, RTF
  • Análisis multidimensional (OLAP)
  • Gráficas
  • KPIs
  • Coopits Interactivos
  • Reportes ad-hoc
  • Muchas otras características.

KNIME

KNIME es una plataforma de análisis de código abierto, con orígenes en la investigación farmacéutica. Su uso se ha expandido a industrias como bancos, editores, fabricantes de automóviles, compañías de telecomunicaciones y otros.

KNIME proporciona una gama de características, que incluyen extensiones de colaboración y un portal web. El aprendizaje automático también está integrado, incluido el soporte de Weka.

ReportServer

ReportServer es otra plataforma de inteligencia empresarial de código abierto, con una edición comercial disponible también. ReportServer permite crear reportes, análisis ad-hoc, informes de Excel y Word y análisis OLAP multidimensionales.


Primera Imagen de un Agujero Negro, por Katherine Louise Bouman


Katherine Louise Bouman es una científica y profesora asistente de ciencias de la computación en el Instituto de Tecnología de California.  Hace tres años, Bouman lideró la creación de un algoritmo que eventualmente ayudó a formar esta imagen única en su clase: un agujero negro supermasivo y su sombra en el centro de una galaxia conocida como M87. Ella era entonces una estudiante graduada en ciencias de la computación e inteligencia artificial en el Instituto de Tecnología de Massachusetts.

Puedes ver una interesante charla de Bouman y su propuesta para la detección de agujeros negros en TED de hace tres años.

Años más tarde puedes ver que su investigación es un total éxito.

Ella y su equipo tomaron los «datos escasos y ruidosos» que generaron diversos radiotelescopios alrededor del mundo e intentaron crear una imagen. Durante los últimos años, Bouman dirigió la verificación de imágenes y la selección de parámetros para crearla. Mas de 5 petabytes fueron necesarios para recabar la información de todos los centros de investigación que participaron.

 

 

La imagen obtenida, revela la cara sombría de un agujero negro supermasivo de 6.500 millones de masas solares en el centro de Messier 87 (M87), una gran galaxia a unos 55 millones de años luz de la Tierra en el cúmulo de galaxias de Virgo. Tales objetos son la comprobación (una vez más) de la teoría de la relatividad general de Einstein que predice la deformación del espacio-tiempo por objetos súper massivos.


Librerías Más Usadas en Python

Estas son algunas de las librerías para Python más usadas y que quizá deberías conocer si estás aprendiendo el lenguaje. Son bastante útiles, te facilitarán el desarrollo de aplicaciones avanzadas y podrás usarlas con la confianza de que funcionan y están siendo actualizadas constantemente.

  1. requests
  2. tqdm
  3. pillow
  4. scrapy
  5. numpy
  6. pandas
  7. scapy
  8. matplotlib
  9. kivy
  10. nltk
  11. keras
  12. SQLAlchemy
  13. Django
  14. Twisted



requests

Es según sus creadores Python HTTP para humanos. La librería requests te permitirá hacer peticiones por http de una manera sencilla.  Cuando se hace una petición, requests automáticamente decodificará el contenido extraido de un servidor y la mayoría de caracteres unicode serán decodificados correctamente.

En este ejemplo sencillo:

import requests
r = requests.get('https://www.google.com')
print(r.text)

El resultado es el siguiente:

La página de [requests]

tqdm

Barras de progreso para PythonLas barras de progreso son bastante útiles porque ayudan a hacer que los trabajos de procesamiento de datos sean menos dolorosos entre otras cosas porque mostrarán una estimación confiable de cuánto tiempo tomará y el porque el usuario puede ver de inmediato si una tarea se ha detenido.

En el siguiente ejemplo:

from tqdm import tqdm
from time import sleep

for i in tqdm(range(1000)):
    sleep(0.01)

El resultado es el siguiente:

La página de [tqdm]

pillow

Una herramienta para manipular imágenes. Es un fork de PIL y es más fácil de usar, bastante útil si trabajas con imágenes frecuentemente.

A continuación un pequeño ejemplo:

from PIL import Image
size = (128, 43)
saved = "/home/decodigo/Documentos/python/archivos/logo_python_2.png"
try:
    im = Image.open("/home/decodigo/Documentos/python/archivos/logo_python.png")
except ValueError:
    print("Unable to load image")
im.thumbnail(size)
im.save(saved)
im.show()

El resultado será una ventana con la imagen de tamaño diferente. Antes de mostrar la ventana se creará una nueva imagen con el tamaño asignado.

La página de [pillow]

scrapy

Scrapy es framework que te permitirá rastrear sitios web y extraer datos estructurados que pueden utilizarse para una amplia gama de aplicaciones, como la extracción de datos, el procesamiento de información o el archivo histórico.

import scrapy

class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']
    def parse(self, response):
        for title in response.css('.post-header>h2'):
            yield {'title': title.css('a ::text').get()}
        for next_page in response.css('a.next-posts-link'):
            yield response.follow(next_page, self.parse)

Aunque Scrapy fue diseñado originalmente para el rastreo web, también se puede usar para extraer datos con APIs (como los Amazon Associates Web Services) o como un rastreador web de propósito general.

Para entender más como configurar un proyecto es mejor ir a la página del proyecto.

La página de [scrapy].

NumPy

NumPy es el paquete más usado para computación científica con Python. Contiene, entre otras cosas:

  • Un poderoso objeto de matriz N-dimensional
  • Funciones sofisticadas (broadcasting)
  • Herramientas para la integración de código C / C ++ y Fortran.
  • Álgebra lineal útil, transformada de Fourier y capacidades de números aleatorios.

La página de [numpy]

pandas

Pandas es una biblioteca de código abierto con licencia BSD que proporciona estructuras de datos de alto rendimiento, fáciles de usar y herramientas de análisis de datos para el lenguaje de programación Python.

Pretende ser un bloque de construcción fundamental para realizar análisis prácticos de datos del mundo real con Python. Pandas es muy extenso y para entender mejor todo lo que puedes hacer es mejor pasar por la página del proyecto.

La página de [pandas]

scapy

Scapy permite enviar, rastrear y diseccionar y falsificar paquetes de red. Esta capacidad permite la construcción de herramientas que pueden sondear, escanear o atacar redes.

En otras palabras, Scapy es un poderoso programa interactivo de manipulación de paquetes. Es capaz de forjar o decodificar paquetes de una gran cantidad de protocolos, enviarlos por cable, capturarlos, hacer coincidir solicitudes y respuestas, y mucho más. Scapy puede manejar fácilmente la mayoría de las tareas clásicas como escaneo, rastreo de rutas, sondeo, pruebas unitarias, ataques o descubrimiento de redes. Puede reemplazar hping, arpspoof, arp-sk, arping, p0f e incluso algunas partes de Nmap, tcpdump y tshark)

La página de [scapy]

Matplotlib

Matplotlib es una biblioteca de trazado 2D que produce gráficas de buena calidad en una variedad de formatos  y entornos interactivos. Podrás generar gráficas, histogramas, espectros de potencia, gráficas de barras, gráficas de errores, diagramas de dispersión, etc., con unas pocas líneas de código.

La página de [Matplotlib]

Kivy

Kivy es una biblioteca de software de código abierto para el rápido desarrollo de aplicaciones equipadas con interfaces de usuario novedosas, como las aplicaciones multitáctiles. Es proyecto multiplataforma con un módulo para Python 2 y Python 3.

La página de [kivi]

NLTK

NLTK es una plataforma líder para la creación de programas en Python para trabajar con datos en lenguaje humano. Proporciona interfaces fáciles de usar para más de 50 recursos corporales y léxicos, como WordNet, junto con un conjunto de bibliotecas de procesamiento de texto para clasificación, tokenización, derivación, etiquetado, análisis y razonamiento semántico, wrappers para bibliotecas NLP muy solidas.

La página de [NLTK]

Keras

Keras es una API de redes neuronales de alto nivel, escrita en Python y capaz de ejecutarse sobre TensorFlow, CNTK o Theano. Fue desarrollada para permitir a los desarrolladores experimentación rápida. Con al filosofía de «Poder pasar de la idea al resultado con el menor retraso posible es clave para hacer una buena investigación».

La página de [Keras]

SQLAlchemy

SQLAlchemy es el kit de herramientas SQL para Python y un mapeador relacional de objetos que ofrece a los desarrolladores de aplicaciones el máximo poder y flexibilidad de SQL.

Proporciona un conjunto completo de patrones de persistencia conocidos a nivel empresarial, diseñados para el acceso a bases de datos eficientes y de alto rendimiento.

La página de [SQLAlchemy]

Django

Django es un framwork web para Python de alto nivel que fomenta el desarrollo rápido y el diseño limpio y pragmático. Creado por desarrolladores experimentados, se encarga de gran parte de las complicaciones del desarrollo web, por lo que podrás concentrarte en escribir aplicaciones sin necesidad de reinventar la rueda. Es gratis y de código abierto.

La página de [django]

Twisted

Twisted es un framework de red que se basa en el paradigma de la programación dirigida por eventos, quiere decir que los usuarios de Twisted pueden escribir pequeños callbacks (retrollamadas) predefinidos en el framework para realizar tareas complejas. Está bajo la licencia MIT.

La página de [Twister]

 


Curiosidades en operaciones de punto flotante

¿Qué pasa si restas?

9999999999999999.0 – 9999999999999998.0 = ?

El resultado depende un poco del lenguaje.   En la mayoría de los casos el resultado será 2.

Esta es la pregunta que se hizo Geo Carncross y hace el experimento con varios lenguajes de programación.


Seguramente lo habrás aprendido en la escuela, pero es un aspecto de la programación que suele olvidarse con frecuencia.



La razón tiene que ver más con la forma en la que se almacenan valores decimales en la memoria que con la operación misma.   En el caso de Java por ejemplo, un valor de punto flotante de doble precisión como el tipo double es un valor de 64 bits, donde:

1 bit denota el signo (positivo o negativo).
11 bits para el exponente.
52 bits para los dígitos significativos (la parte fraccionaria como un binario) .

Estas partes se combinan para producir un valor decimal double.

De este modo cuando realizas la resta, realmente estás haciendo la operación sobre valores diferentes de los que especificaste durante la edición del código.

package com.decodigo;

/**
 *
 * @author decodigo.com
 */
public class Prueba {
    
    public static void main(String args[]){
        double a = 9999999999999999.0;
        double b = 9999999999999998.0;        
        double resultado = a - b;
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        System.out.println("resultado: " + resultado);
    }
}

El resultado en consola será:

a: 1.0E16
b: 9.999999999999998E15
resultado: 2.0

Un número decimal no se representa exactamente en la memoria, aunque en apariencia tengan incluso el mismo número de dígitos mientras estás escribiendo el código.  Cuando el copilador convierte los valores de a y b a un número de coma flotante, sus valores se aproximan para ser representados internamente en formato binario y se complementan con el exponente si se excede la capacidad de los dígitos significativos.

Adicionalmente, cuantas más operaciones se realicen con un número de punto flotante, mayor será el número de errores de redondeo.


Tips para programadores

Aprende un nuevo lenguaje

Es sabido que no debes enfocarte en una sola tecnología o lenguaje de programación.   Pero el sentido de este consejo no es sólo que escojas una tecnología que te permita ganar más dinero (que también es una buena idea), sino que además de eso te permita experimentar y hacer cosas diferentes. Por ejemplo, si siempre has estado enfocado a aplicaciones WEB, puedes comenzar a experimentar con el control de motores eléctricos o para obtener datos desde sensores o hardware que no hayas usado anteriormente, o probar también con aplicaciones para móviles, tendrás una perspectiva más amplia de lo que es el desarrollo de software.


Ten un  «Pet Project»

Todos tenemos ideas para una aplicación o desarrollo que nos gustaría programar.  Sin embargo pocas veces las materializamos.  Esto no sólo es malo porque pierdes la oportunidad de llevar a cabo una buena idea, sino que también es posible que nunca sepas si esa idea es mala o que en realidad no sea tan útil, o peor aún, que ya exista algo parecido porque no habías investigado demasiado y te enfoques mejor en otra cosa.  Adquiere el hábito de tener al menos un proyecto y ve agregando características poco a poco pero de forma constante.

Relaciónate con personas que hagan cosas diferentes

No sólo se trata de encontrar gente que use otras tecnologías, sino otras formas de hacer negocios y de ganar dinero.  Es posible que encuentres oportunidades donde otros no las han visto, tan sólo porque no ha llegado nadie para propornerlas.  No te enfoques sólo a entender los problemas de los clientes de la empresa donde trabajes.

Haz que tu trabajo se vea elegante

Son muchos los desarrolladores que descuidan el aspecto visual de su trabajo y sólo se preocupan porque funcione correctamente.  Sin embargo una apariencia visual o usabilidad deficientes, pueden hacer que el usuario tenga una impresión equivocada sobre como funcionan tus desarrollos y llegue a pensar que tiene errores aún cuando esto no sea verdad, recuerda que haces desarrollo para facilitarle la vida a personas que no siempre tienen un conocimiento técnico silimar al tuyo.

No inventes cosas que ya están bien hechas

Lenguajes como Java o C# no son los más ampliamente usados por su sintaxis o su facilidad de uso, sino por la inmensa variedad de librerías o herramientas que existen y que puedes usar libremente, con la seguridad de que van a funcionar correctamente. No gastes tu tiempo tratndo de hacer algo que ya existe si no lo vas a superar.

Comparte y acepta críticas a tu código

Es universal. Ocurre en todas las profesiones. A nadie le gusta que le digan como hacer cosas que uno supone hace bien.  Pero compartir ideas y tomar en cuenta las recomendaciones de otros es casi tan útil como Google para aprender cosas nuevas.  Además mejoras tu ambiente laboral.

Crea librerías de ejemplos o soluciones

No es que tengas que desarrollar librerías nuevas, se trata más bien de esos ejemplos, como conectarte a bases de datos, nombres de drivers, herramientas, comandos, funciones o técnicas de desarrollo que quizá aplicarás en tus proyectos más de una vez. En cualquier momento puedes usar el buscador y encontrar prácticamente todo lo que necesites, pero tener cosas ya probadas previamente por tí, es muy útil.

Descansa lejos de la computadora

Esto debes hacerlo por puro amor propio y no sólo es descansar, ejercítate.  Algunos problemas de espalda y ojos derivados de pasar horas sentados frente a la computadora pueden agravarse y son difíciles de tratar.  Cuida tu cuerpo.

 


Una de las mejores presentaciones de Machine Learning

El empleado de Google Jason Mayes, ingeniero creativo senior, ha publicado unas de las mejores presentaciones sobre Machine Learning. El trabajo es el resultado de dos años de experiencia, es gratuito y se puede descargar o visualizar en línea. Los únicos requisitos según su creador son los siguientes:

  • Dos horas de estudio y atención continuas.
  • Cerrar clientes de correo y aplicaciones de mensajería.
  • Buscar un lugar adecuado para su estudio, porque no por nada se trata del estudio de «deep learning».
  • Leer más de una vez las letras en negritas.

El único inconveniente, está en inglés, pero es más o menos fácil de entender.
El enlace directo: https://docs.google.com/presentation/



La presentación de Google Duplex en la Google I/O

La gran novedad en uno de los eventos más importantes de Google, la 2018 I/O Developer Conference es Google Duplex, el asistente que hará las reservaciones por ti.

Durante la presentación, el asistente realiza dos reservaciones con establecimientos reales.  El asistente, la «persona no real» interactúa con una «persona real», que parece no percatarse nunca que está conversando con una inteligencia artificial.

 




Una de las cosas más sorprendentes es la velocidad de respuesta y la entonación bastante natural del asistente.  Es un poco gracioso el momento en que el asistente usa la expresión «Mm hmm», que no es que sea particularmente difícil de «decir», sino que ha escogido el momento preciso y hace la conversación más familiar, cosa que no ocurre regularmente con otras IAs.

Otro aspecto interesante (en la reservación al restaurante), es que aunque parece haber una confusión entre el número de personas que asistirán y la fecha en que debe realizarse la reservación, el dialogo y el arreglo terminan más o menos bien, lo cual no es cualquier cosa para una IA.

Google ha dicho que la función se lanzará como un experimento en las próximas semanas.


Linus Torvals, la mente detrás de Linux

Linus Torvalds transformó la tecnología dos veces: primero con el núcleo de Linux, que es uno de los soportes fundamentales de Internet, y lo hizo nuevamente con Git, el sistema de administración de código fuente utilizado por desarrolladores de todo el mundo. En una rara entrevista con el Curador de TED, Chris Anderson, Torvalds discute con gran apertura los rasgos de personalidad que impulsaron su filosofía de trabajo, su ingeniería y su vida.

Puedes activar los subtítulos en español.

 

 



NetBeans – Accesos directos

En NetBeans existen algunos atajos que facilitan la escritura de codigo, aquí te mencionamos algunos.

Para dar formato o manipular código están las siguientes combinaciones:

Alt-Shift-F Da formato al código seleccionado o a todo el código si no hay selección.

Ctrl-Shift-Up/Down Copia lineas de código hacía arriba o hacia abajo.



Alt-Insert Genera código dependiendo de las posibilidades desplegando un menú de opciones.


Ctrl-Shift-I Agrega las sentencias de importación de clases que hagan falta.
Alt-Shift-I Arregla la importación de clases seleccionada.
Alt-Shift Left/Right/Up/Down Mueve la línea de código en la dirección de las teclas.
Ctrl-Shift-R Selecciona código de forma rectangular.

Ctrl-Shift-C Agrega dobles diagonales para comentarios de una sola línea.

Ctrl-E Borra la línea en la que está posicionada el cursor.

Prueba escribiendo de forma suscesiva los siguientes caracteres:

ifelse y a continuación la tecla Tab, NetBeans completará un bloque if con su else:

        if (true) {
            
        } else {
        }

trycatch y a continuación la tecla Tab, NetBeans completará un bloque try-catch:

        try {
            
        } catch (Exception e) {
        }

for y a continuación la tecla Tab obtienes un bloque de código para for listo para usarse:

        for (int i = 0; i < 10; i++) {
            
        }

Con el ciclo for hay más sopresas:

forst y a continuación Tab, crea el ciclo sobre un StringTokenizer:

        for (StringTokenizer stringTokenizer = new StringTokenizer(STRING); stringTokenizer.hasMoreTokens();) {
            String token = stringTokenizer.nextToken();
            
        }

forc y a continuación Tab, crea el ciclo sobre un Iterator:

        for (Iterator iterator = col.iterator(); iterator.hasNext();) {
            Object next = iterator.next();
            
        }

fore y a continuación Tab, crea el ciclo sobre un arreglo sin uso de índices:

        for (String arg : args) {
            
        }

fori y a continuación Tab, crea el ciclo sobre un arreglo con índice:

        for (int i = 0; i < arr.length; i++) {
            Object object = arr[i];
            
        }

forl y a continuación Tab, crea el ciclo sobre un objeto Array:

        for (int i = 0; i < lst.size(); i++) {
            Object get = lst.get(i);
            
        }

forv y a continuación Tab, crea el ciclo sobre un objeto Vector:

        for (int i = 0; i < vct.size(); i++) {
            Object elementAt = vct.elementAt(i);
            
        }

Para while, prueba con «whileit«, «whilen«, and «whilexp»

Si no conocías estos atajos esperamos que te sean de utilidad.


Un diagrama casi completo de las Redes Neuronales

Existe una amplia variedad de tipos de redes neuronales y a veces es necesario un mapa para navegar entre muchas arquitecturas y enfoques emergentes.  Fjodor Van Veen del instituto Asimov compiló una maravillosa variedad de topologías de redes neuronales.

Mas info:www.asimovinstitute.org