sábado, 28 de abril de 2012

MapReduce, con que se come?



Mucha gente habla de MapReduce, pero que es MapReduce? Porque estan importante?
MapReduce fue introducido por google en 2004 y consiste en una técnica para procesamiento de grandes cantidades de datos ditribuidos. Sigue la filosofía “divide y venceras!”
La implementación de este algoritmo fue escrito en varios lenguajes de programación.
MapReduce es un algoritmo para la resolución de problemas los cuales es necesario procesar  enormes conjuntos de datos utilizando un gran número de equipos (nodos), denominados clusters (si todos los nodos están en la misma red local y el uso de hardware similar) o grid (si los nodos esta distribuidos geográfica   o  no son tan similares). Procesamiento computacional puede ser en cualquiera de los datos almacenados en un sistema de archivos (no estructurada) o en una base de datos(estructurados).

El algoritmo cuenta con 2 pasos Map y Reduce:

  • Map: El nodo maestro toma la entrada, la divide en pequeños sub-problemas, y los distribuye a los nodos. Un nodo puede hacer esto de nuevo a su vez, conduce a una estructura de árbol multi-nivel. El nodo procesa el problema más pequeño, y pasa a la parte posterior respuesta a su nodo maestro. 
  • Reduce: El nodo maestro a continuación recoge las respuestas a todos los sub-problemas y los combina de alguna manera para formar la salida, la respuesta al problema que fue originalmente tratando de resolver.


Parece fácil, y bastante lógico. MapReduce permite el procesamiento distribuido de los nodos hoja y las operaciones de reducción. Siempre que cada operación de asignación es independiente de los demás, todos los mapas se puede realizar en paralelo, aunque en la práctica está limitada por el número de fuentes de datos independientes y / o el número de CPU cerca de cada fuente. De manera similar, un conjunto de 'reductores' puede realizar la fase de reducción, proporcionan todas las salidas de la operación de mapa que se presentan comparten la misma clave para el reductor mismo al mismo tiempo. Si bien este proceso pueden aparecer a menudo ineficientes en comparación con los algoritmos que son más secuencial, MapReduce se puede aplicar a conjuntos de datos significativamente mayores que "commodity" servidores pueden manejar una granja de servidores de gran tamaño se puede utilizar MapReduce para ordenar petabytes de datos en tan sólo unas pocas horas. El paralelismo también ofrece alguna posibilidad de recuperarse de una falla parcial de servidores o almacenamiento durante la operación: si un asignador o reductor falla, el trabajo se puede reprogramar, asumiendo que los datos de entrada aún está disponible.

Los datos de entrada están formadas por una (clave, valor) y a cada dato es aplicada la función map, la cual produce una serie de resultados intermedios (de 0 a N), dichos resultados también están formados por (clave, valor). Luego, una vez finalizado todas las funciones map el proceso de MapReduce agrupa por clave los resultados intermedios, y a cada dato (clave, [resultado1, resultado2, ... resultadoN]) aplica la función reduce. De esta forma obtiene el resultado del problema inicial.

Hadoop es la implementación MapReduce más usada en el mundo del software libre, proveyendo no solo una implementación MapReduce sino toda una infraestructura distribuida.

Dejo links:

http://hadoop.apache.org/mapreduce/


viernes, 27 de abril de 2012

Bibliotecas en PHP


PHP incorpora, sin necesidad de ningún tipo de instalación ni habilitación extras, una gran cantidad de bibliotecas, por lo cual contaremos con múltiples funciones para comenzar a desarrollar sitios profesionales. Entre estas extensiones se encuentran:

Las extensiones se pueden categorizar en estados (estables, obsoletas, y experimentales). Es posible obtener un listado accediendo a http://www.php.net/manual/es/extensions.state.php.

  • Funciones para manejo de matrices
  • Funciones matemáticas
  • BCMath (desde PHP 4.0.4, más funciones matemáticas)
  • Para manejo de clases/objectos
  • Para manejo de variables de tipo de carácter
  • Para tratamiento de fecha y hora
  • Para acceso directo a entrada / salida
  • Funciones de directorio
  • Funciones de gestión de errores y registros
  • Funciones de sistema de archivos
  • Para utilizar el protocolo FTP
  • Para utilizar el protocolo HTTP
  • Funciones de correo
  • Funciones de red
  • Funciones de control de salida
  • Para ejecución de programas
  • Funciones para el manejo de sesiones
  • Funciones de secuencia
  • Funciones de cadenas
  • Funciones URL
  • Funciones para manejo de variables

Para que los cambios (en este caso, la habilitación o deshabilitación de extensiones) tengan efecto, habrá que reiniciar el servidor web.
Podemos ver qué bibliotecas tenemos activas en nuestro sistema si utilizamos la función phpinfo de la siguiente manera:

<?php phpinfo(); ?>


JPOP


jPOP (JavaScript Powered On PHP) es una alternativa ideal para aquellos desarrolladores que quieran implementar Ajax en sus aplicaciones sin sobrecargar las páginas (la librería base pesa alrededor de 16 KB) ni gastar demasiado tiempo en realizar las configuraciones necesarias para que todo funcione. Su uso es libre, y podemos descargar la última versión disponible si visitamos la página que se encuentra en la dirección web http://jpop-framework.sourceforge.net.

Descomprimidos los archivos, copiamos en un directorio accesible por las demás páginas y configuramos el archivo config.php. La variable path indica la ruta hacia el directorio que contiene la raíz de la distribución jPOP el que incluye al archivo jPOP.php:

$path = ‘./jPOP/’;

Para disponer de las funcionalidades de esta librería, debemos ubicar en cada página la siguiente línea, suponiendo que jPOP se encuentra en un directorio llamado jPOP:

<?php require(‘jPOP/jPOP.php’); ?>
Y por último, generar el código JavaScript necesario a través del método init:

<head> <?php jPOP::init(); ?> </head>

jPOP posee tres funciones principales:
  • newAjaxControl
  • newAjaxDiv
  • newAjaxLink
jPOP incluye Prototype en su distribución, permitiendo incluir los efectos y comportamientos disponibles. Prototype es un framework JavaScript de propósito general orientado a objetos, que podemos descargar desde su página oficial: www.prototypejs.org

XAJAX




A diferencia de Sajax, Xajax (www.xajax-project.org) es una librería orientada a objetos. Admite más opciones y conserva la facilidad para implementar Ajax.

Xajax funciona con Apache o IIS (Internet Information Server, para Windows XP o su periores) y precisa de PHP versión 4.3 o superiores. En lo referido a los navegadores, soporta Internet Explorer 5.5 y superiores, Firefox 1.0 y equivalentes, Safari 1.3, y Opera 8.5. De todos modos, no debemos olvidarnos de que el soporte para ésta y las demás librerías se actualiza de manera permanente, por lo que recomendamos acceder a los sitios oficiales para obtener la información de última hora al respecto.

Para disponer de Xajax en una aplicación, primero debemos descargar la distribución, copiarla a un directorio accesible desde las demás páginas, e incluir el archivo xajax.inc.php en cada una de ellas:

require_once(“xajax.inc.php”);

Y luego crear una instancia de la clase xajax:

$xajax = new xajax();

Nuevamente, tendremos que definir las funciones en PHP, registrarlas y generar el código JavaScript necesario para disponer de ellas (mediante el método denominado printJavascript, que se ubica dentro del elemento HEAD de la página). Además, antes de cualquier salida, debemos incluir una llamada al método processRequest, que procesa y maneja las peticiones.

SAJAX



Sajax (Simple Ajax) es una herramienta que nos permite desarrollar aplicaciones web utilizando Ajax. Además de PHP, incluye soporte para ASP, Cold Fusion, Io, Lua, Perl, Python y Ruby. Es software libre y se distribuye bajo la licencia BSD. Podemos encontrar más información en http://absinth.modernmethod.com/sajax. Es compatible con los siguientes navegadores web: Internet Explorer, Mozilla Firefox, Safari y también Opera.

Para trabajar con Sajax, tendremos que definir funciones en PHP, que deberemos registrar previamente para ser aceptadas por la aplicación cliente.

Las funciones en el lado cliente tienen el mismo nombre que las funciones del lado servidor, pero precedidas por x_ (x guión bajo). El último argumento a las funciones x_ es el nombre de la función JavaScript que recogerá el resultado obtenido como respuesta (función callback). A continuación veremos una serie de ejemplos donde presentaremos tanto las funciones del lado del cliente, como las funciones del lado del servidor, y la interacción entre ellas a través de Sajax.

Sajax se encarga de crear el código necesario para que podamos acceder desde el lado cliente a las funciones PHP registradas.

Elementos estructurales y semántica en HTML 5


Sabemos que en nuestra lengua, la semántica se refiere al significado que tienen las estructuras y elementos lingüísticos que la componen; esto se aplica en forma similar a los lenguajes de programación.

Cuando hablamos de un lenguaje de etiquetas, como HTML, la semántica se refiere al significado que tienen los elementos. Veamos un caso concreto para comprenderlo mejor. Si pensamos en la etiqueta <h1>, sabemos que se aplica sobre títulos que tengan la máxima jerarquía en una página web. Su valor predeterminado en la representación de la mayoría de los navegadores está definido por una
tipografía Serif (por lo general, Times New Roman) y un tamaño de 2 em. Ahora bien, para la semántica, lo importante de <h1> es definir un elemento que será el título principal del contenido de esa página; los aspectos de representación son características que pueden (y deben) ser definidos desde los estilos que corresponden a CSS.

Es necesario recordar que este concepto debemos trasladarlo al resto de los elementos de HTML y tener en cuenta que su uso debe estar relacionado con el objetivo para el cual han sido creados en el lenguaje y no, en la manera en que se representan por defecto.

La Web semántica siempre estuvo en la cabeza de Tim Berners-Lee desde los comienzos de sus proyectos. Y es ahora, en esta nueva etapa de la web, con la aparición del lenguaje HTML5 como
estandarte, cuando el sueño del padre de la Web por fin comienza a tomar un papel mucho más relevante.

Con la web semántica se abren nuevos caminos. Por ejemplo, es posible que los agentes informáticos logren reconocer los elementos por su significado semántico y, posteriormente, puedan guardar esa
información para que, en otra etapa, se actúe sobre la base de ella. Esto contribuirá también a la creación de aplicaciones y dispositivos cada vez más robustos e inteligentes, que podrán resolver mayor cantidad de situaciones de manera totalmente automática.

Declaración de página y cabecera del documento
Cuando observamos una página HTML, en primer lugar encontraremos la declaración del tipo de documento. Una de las buenas noticias que nos trae HTML5 es, precisamente, la simplificación
de la declaración del tipo de documento. A partir de ahora, solo debemos indicar: <!DOCTYPE html>. Es importante recordar que esta declaración se ubica antes de escribir la etiqueta <head>.
Dentro de <head>, debemos incluir el título <title> y también las etiquetas <meta> para los metadatos.

En lo que se refiere a la etiqueta <meta>, en HTML5 soporta los atributos charset (nuevo en HTML5, permite definir la codificación de los caracteres), content, http-equiv y name, deja de soportar scheme.
Entre los atributos <meta>, es importante resaltar los valores que puede recibir name a partir de HTML5 (debemos tener en cuenta que algunos de ellos son heredados de HTML4):

  • author: autor del documento.
  • copyright: información de copyright del documento.
  • description: descripción del documento.
  • distribution: define el nivel de distribución del documento.
  • generator: permite especificar con qué programa se creó el documento.
  • keywords: posibilita introducir las palabras clave relacionadas con el documento (se escriben separadas por comas).
  • progid: este atributo nos permite indicar la id del programa que estamos usando para generar el documento.
  • rating: permite indicar el rating de la página.
  • resource-type: permite indicar el tipo de recurso.
  • revisit-after: permite definir la tasa de actualización de la página.
  • robots: brinda la posibilidad de indicar reglas para los robots.
  • others: se puede utilizar para definir names propios en el esquema.

Estructura semántica de documentos en HTML5
Recordemos que conocer el significado semántico de los elementos que componen los lenguajes que interactúan en la Web, resulta fundamental para crear cimientos sólidos para todas las páginas que conforman la estructura de nuestros sitios Web.

Como ya hemos mencionado, una de las características más valoradas de HTML5 está relacionada con la semántica. En este sentido, HTML5 introduce elementos específicos para poder definir secciones del documento y también características que pretenden hacer de la semántica una capacidad importante para el lenguaje.


En lo que se refiere a la estructura del documento, en HTML4 estábamos acostumbrados a definir las partes del cuerpo mediante el uso de la etiqueta <div>. El problema se planteaba en la imposibilidad de asignarles la semántica correspondiente a las diferentes partes. Por ejemplo, si bien podíamos aplicar una id con el valor nav o footer (barra de navegación y pie), esto no era más que el valor de un atributo y no le daba un significado semántico diferente al elemento.


A partir de HTML5 se definen etiquetas que nos permiten estructurar el cuerpo de una página con una semántica específica para cada elemento. Entre estas etiquetas encontramos:

  • <header>: se utiliza para definir la cabecera de la página. No hay que confundir esta etiqueta con <head>, ya que <header> se emplea para elementos del cuerpo del documento.
  • <hgroup>: brinda la posibilidad de agrupar títulos con subtítulos. Por ejemplo, en el caso de que, luego de un título <h1>, ubiquemos un subtítulo <h2> que se relaciona de manera directa con el primero.
  • <nav>: esta etiqueta está pensada para definir la barra de navegación del sitio web. Aquí podremos definir enlaces internos y también hacia otros sitios. Cabe destacar que no todo conjunto de enlaces es una barra de navegación.
  • <section>: se encarga de definir una sección de contenido que se representa en la página. Vale destacar que no se trata de un contenedor genérico, como puede ser un <div>.
  • <article>: sirve para definir artículos o contenidos que pueden ser individualizados. Por ejemplo, se podría utilizar para contener cada noticia o post en un sitio de noticias o blog. En ese contexto, también podría utilizarse para individualizar comentarios.
  • <aside>: se puede emplear para todo el resto de las cosas que se incluyen en el sitio y no está directamente relacionado con el contenido principal de dicha página (aunque sí puede estar referido de alguna manera). Puede utilizarse como sidebar en un sitio web o blog, aunque esa no es su única aplicación.
  • <footer>: se utiliza para el pie de la página. Más adelante, en este mismo capítulo, veremos cómo realizar una estructura utilizando las etiquetas que analizamos.

También encontramos la etiqueta denominada <figure>, que puede actuar de manera independiente o junto con <figcaption>. A continuación, nos preocuparemos de analizar un ejemplo que agrupa
varias imágenes con un epígrafe descriptivo.

La etiqueta <time> nos permite incluir información de hora (en formato de 24 horas) o fecha del calendario Gregoriano (también podemos incluir opcionalmente la hora).
Con la etiqueta <details>, es posible describir detalles de un documento (o de algunas partes de este). Con <summary>, se puede especificar un sumario que ofrezca detalles del documento.
En lo referido al texto, debemos saber que se incorpora <mark> para indicar que un texto está marcado o destacado.

Como podemos ver, las etiquetas que nos permiten definir una estructura semántica en nuestros documentos HTML nos brindan la posibilidad de dar un paso adelante en un código mucho más
claro de leer, tanto para los desarrolladores como también para los agentes informáticos, por ejemplo, los robots de los buscadores o los dispositivos electrónicos que requieren estas particularidades para facilitar las características de accesibilidad.

Atributos soportados
Entre los atributos que soportan los elementos <header>, <hgroup>, <nav>, <section>, <article>, <footer>, <figure> y <figcaption>, encontramos algunos que se heredan de la versión 4 de HTML:
accesskey, class, dir, id, lang, style, tabindex y title.
Para estos elementos, también podemos aplicar los nuevos atributos de HTML5, entre los que figuran: contenteditable (soporta true o false y permite indicar si un elemento puede ser editado o no
por el usuario), contextmenu (permite especificar el menú contextual para un elemento), draggable (soporta true, false o auto; permite indicar si un elemento puede ser arrastrado), dropzone  (soporta copy, move o link; permite indicar qué hacer cuando un ítem es arrastrado sobre ese
elemento), hidden (se utiliza para indicar cuando un elemento se encuentra oculto) y spellcheck
(tengamos en cuenta que se emplea para la ortografía y gramática de un elemento).
Por parte de <time>, entre los atributos encontramos datetime (se utiliza si la fecha y la
hora no se incluyen en el elemento y deseamos especificarlas por medio de este atributo). El otro
atributo soportado es pubdate (booleano); cuando se coloca, permite especificar si la hora y fecha del elemento son las que corresponden al documento o al elemento antecesor (<article>) que resulta más próximo.

Para cada artículo (<article>) no debería haber más de un elemento de tiempo (<time>) con el atributo pubdate definido. Por otro lado, <details> soporta el atributo open, que permite indicar si está abierto el detalle, es decir, si es visible; <summary> solo soporta los atributos globales de HTML5.

El atributo rel
En las versiones anteriores de HTML/XHTML, conocimos la importancia del atributo rel para agregarles información a los enlaces. En el caso de usar este atributo con <link>, le brindamos
más información al navegador; si lo usamos con <a>, le estaremos incluyendo datos que podrán ser útiles para los buscadores. También puede utilizarse con la etiqueta <area>.
Básicamente, el atributo rel nos permite establecer la relación entre el documento actual y el que se está vinculando.

Entre los valores que puede adquirir este atributo en el lenguaje HTML5 encontramos los que vemos en el siguiente listado:
  • alternate: vincula a una versión alternativa del documento.
  • archives: enlace a información histórica.
  • author: enlace a información relativa al autor del documento.
  • bookmark: vínculo a dirección permanente del documento.
  • external: enlace a un documento externo.
  • first: vínculo al primer documento de una selección.
  • help: enlace a un documento de ayuda.
  • icon: vínculo al icono del documento.
  • index: vínculo al índice del documento.
  • last: vínculo al último documento de una selección.
  • licence: vínculo a la información de licencia del documento.
  • next: vínculo al siguiente enlace de una selección.
  • nofollow: comúnmente se utiliza para indicar que los robots de los
  • buscadores no sigan el link correspondiente.
  • noreferrer: se trata de un valor que permite especificar que el navegador no debe enviar referrer en las cabeceras HTTP, es decir, que no indique desde qué página se llega a la siguiente.
  • pingback: la URL para hacer pingback.
  • prefetch: permite indicar que el documento debe ser cacheado.
  • prev: vínculo al documento previo de una selección.
  • search: se encarga de establecer un vínculo a la herramienta de búsqueda del documento correspondiente.
  • sidebar: se utiliza para el vínculo de los elementos secundarios del documento, los que se ubican en la sidebar.
  • stylesheet: vínculo a la hoja de estilos que se importa en el documento.
  • tag: etiqueta del documento actual.
  • up: permite indicar que el enlace está por encima del actual en un árbol jerárquico de documentos.
Vale aclarar que, en esta lista, se incluyen tanto los valores heredados que siguen vigentes así como también los que se incorporaron a partir de la versión 5 de HTML.

Los valores bookmark, external, nofollow y noreferrer no son soportados por <link>. Por su parte, icon, pingback, prefetch y stylesheet no pueden utilizarse con <a> ni con <area>.

Estructurar una página en HTML5
Con lo que ya hemos visto en este capítulo, tenemos suficientes datos para poder enfrentar la creación de nuestra estructura de página utilizando la semántica de HTML5, aunque aún debemos
revisar muchos conceptos importantes.





miércoles, 25 de abril de 2012

AQuery, jQuery para Android


JQuery es el famoso framework javascript que ahora tiene un sabor para Android. El objetivo es facilitarnos el desarrollo en esta plataforma también.

Dejo link:
http://code.google.com/p/android-query/

martes, 24 de abril de 2012

Podes ganar cerveza si contestas la encuesta de Zend!!

Zend empresa que ha hecho sus cimientos a partir de PHP, con su framework, ide, etc.  Nos propone que contestemos su encuesta y a cambio podemos ganar cerveza!!

A completar la encuesta!!

Dejo el link:
http://www.zoomerang.com/Survey/WEB22FH4GRXA3R

Prueba Ruby en 15 minutos


Todos conocemos el lenguaje Ruby, la comunidad tuvo una gran idea hacer una pagina para probar el lenguaje; en 15 minutos!

Dejo el Link:
http://tryruby.org

domingo, 22 de abril de 2012

Jasper en jsf

Antes que nada hagamos nuestro reporte con el ireport y lo guardamos por hay...


  Tienen que poner como lenguaje Java; por defecto trae Groovy.


Primero crear el proyecto con maven:
mvn archetype:generate

Yo voy a usar un archetype que se llama:
194: remote -> org.apache.myfaces.buildtools:myfaces-archetype-helloworld20 (Archetype to create a new webapp based on MyFaces 2.0) Ojo pueden usar cualquier implementación de jsf.
Bueno luego importamos el proyecto a eclipse, como siempre...

Agregamos la siguiente dependencia al pom


 net.sf.jasperreports
 jasperreports
 4.5.1

            

 javax.servlet
 servlet-api
 2.4
 provided




        mysql
        mysql-connector-java
        5.1.6


Ahora a integrar jasper a nuestra aplicación jsf.

Vamos a escribir el siguiente controller:

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

public class ReportGeneratorController {
 
 public void generateReport(ActionEvent actionEvent)
   throws ClassNotFoundException, SQLException, IOException,
   JRException {
  Connection connection;
  
  //Buscamos el contexto de jsf
  FacesContext facesContext = FacesContext.getCurrentInstance();
  HttpServletResponse response = (HttpServletResponse) facesContext
    .getExternalContext().getResponse();
  //Con el contexto buscamos el jasper
  // Ojo / es webapp
  InputStream reportStream = facesContext.getExternalContext()
    .getResourceAsStream("/reports/DbReport.jasper");
  ServletOutputStream servletOutputStream = response.getOutputStream();
  
  //Nos conectamos a la base de datos (creamos una coneccion)
  Class.forName("com.mysql.jdbc.Driver");
  //Ojo mybase es el nombre de la base, user y password.
  connection = DriverManager
    .getConnection("jdbc:mysql://localhost:3306/mybase?"
      + "user=user&password=secret");
  facesContext.responseComplete();
  //seteamos el contentType
  response.setContentType("application/pdf");
  
  //ejecutamos el reporte
  JasperRunManager.runReportToPdfStream(reportStream,
    servletOutputStream, new HashMap(), connection);
  // Cerramos la coneccion a la Base
  connection.close();
  // flush y close del reporte
  servletOutputStream.flush();
  servletOutputStream.close();
 }
}

Ojo copien el reporte al proyecto yo lo copie en /webapp/resources
Ahora escribimos un link en una pagina para acceder.


 
       
 
 

Tenemos que registrar nuestro controller en el face-config.xml:

  
  reportGenerator
  org.assembly.tyr.reports.ReportGeneratorController
  request
 


A probarlo!


Dejo el código:

http://code.google.com/p/jaspertyr/source/browse/

Para bajarlo pueden hacer:


git clone https://code.google.com/p/jaspertyr/

sábado, 21 de abril de 2012

Simplificando Ldap con Apache Directory



LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.
Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres (personas u organizaciones) que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos.

Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio (DNS por sus siglas en inglés) para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol (o múltiples entradas).

Apache tiene una sere de productos los cuales nos permiten utilizar esta base jerárquica y una IDE muy completa que nos ayuda con el acceso al LDAP. Estas soluciones están escritas en java. Y tenemos el servidor de directorios el cual certifico LDAP v3 compliant; y además tenemos una IDE basada en eclipse, la cual facilita el acceso al LDAP.


ApacheDS es un servidor de directorios extensible e integrable escrito enteramente en Java, que ha sido certificado LDAPv3 compatible por el Open Group. Además es compatible con LDAP de Kerberos 5 .




Apache Directorio Studio es una IDE diseñado para ser utilizado con cualquier servidor LDAP sin embargo, está particularmente diseñado para ser usado con ApacheDS. Se trata de una aplicación Eclipse RCP, compuesto de varios plugins, que puede ser fácilmente actualizado y además se pueden agregar adicionales. Estos plug-ins, incluso puede ejecutar dentro de Eclipse en sí.


Todo bajo Licencia Apache 2.

Dejo links:
http://directory.apache.org/
http://directory.apache.org/studio/
http://directory.apache.org/apacheds/1.5/

jueves, 19 de abril de 2012

Ignorar archivos en GIT


No les das bola y listo! jeje
Muchas veces no queremos subir ciertos archivos por ejemplo el .classpath si usamos maven, o alguno otro no se. Para ignorar archivos con git es más facil que con svn por lo menos a mi modo de ver las cosas. Solo debemos crear el archivo .gitignore el cual va a contener los archivos que queremos ignorar por ejemplo:


target
.project
.classpath
.settings
.factorypath

Y todos las carpetas hijas van a tener la misma lista de archivos a ignorar. Se pueden escribir cosas muy complejas como expresiones regulares, etc.

Dejo link: 



miércoles, 18 de abril de 2012

Herramientas de administración de MongoDB


Si usamos MongoDB necesitamos inspeccionar la base datos, corregir datos, cambiar la estructura para lo que tenemos que utiliza una herramienta de acceso a la Base NoSQL. Para hacer esto se encuentran los siguientes front-end:


Seguro que no te imaginaste que había tantas. Es cuestión de ir probando la que mejor te sientas cómodo.


Y de yapa, un video del uso de un IDE web

martes, 17 de abril de 2012

¿Qué es el software libre?

El software libre es, principalmente, una modalidad de desarrollo y distribución de programas de computadoras. Aunque, si hacemos un análisis un poco más minucioso del concepto, nos encontramos con que se trata de algo mucho más amplio, mucho más trascendental.

El software libre es un suceso social, que está cambiando la forma en que el mundo informático se mueve.  El software libre es aquel que se puede utilizar y distribuir libremente. También puede ser modificado y vuelto a distribuir (para estas ultimas dos opciones, requiere código abierto).

Y para que el programa sea considerado software libre, deben garantizarse esas cuatro libertades. Si la licencia de uso y distribución de un programa no garantiza una de esas cuatro libertades, entonces estamos frente a un programa que no es libre.

Cuando hablamos de libertad, lo hacemos en el sentido más completo de la palabra. La libertad de usarlo para que lo queramos es la libertad de no tener que pedir permiso a nadie para ejecutar cualquier acción con el programa. Esto incluye utilizarlo para realizar tareas que quizás no estaban contempladas cuando se desarrolló el programa. La libertad de distribuirlo libremente es la libertad de realizar cuantas copias queramos del programa. Es la libertad de tener una única licencia de uso para diez, cien o mil instalaciones del programa. Es la libertad que permite copiar el programa a los amigos si ellos lo piden. La libertad de modificar el programa encierra en sí misma otra libertad, que es la de disponer del código fuente del programa. Para aquellos que no lo saben, el código fuente es el texto, escrito por un programador, mediante el cual fue desarrollado el programa. Entonces, el software libre permite ver cómo está hecho el programa y autoriza su modificación. Podemos modificarlo para adecuarlo a nuestras necesidades, para agregarle o sacarle características funcionales, etc.

Finalmente, si modificamos un programa, tenemos libertad de distribuir la versión modificada, siempre y cuando lo hagamos por medio de la misma licencia, que garantiza las cuatro libertades antes mencionadas.

Libre no significa gratis! muchas veces, las personas confunden la palabra libre con gratis. Y entonces piensan cosas erróneas como que Linux es gratis. El software libre, no necesariamente es gratis. Y para entender esto, vamos a ver un ejemplo. Yo tengo una conexión de banda ancha, y descargué en mi computadora la última versión de Ubuntu Linux (una versión muy popular ). Entonces, cuando termino de descargarlo, viene un amigo a mi casa y me pide que le haga una copia de esta versión de Linux. En primer lugar, hay que aclarar que hacer una copia de un programa de software libre es totalmente legal ya que, recordemos, la segunda libertad del software libre tiene que ver con la libre distribución de un programa. De hecho, en la Licencia Pública General (que es la licencia oficial del software libre) se anima de manera entusiasta a programadores y usuarios a que distribuyan sus programas de software libre. De todos modos, continuando con el ejemplo, yo tengo varias opciones garantizadas por la libertad de distribuir el programa. Una de ellas es decirle “sí, te lo copio ya mismo” y tomar cuatro CDs de mi cajonera, y grabárselo de manera totalmente gratuita. Otra opción es decirle “sí, pero me tenés que pagar por los CDs”, lo cual es totalmente válido y legal también. Y otra opción, es decirle “sí, te lo copio, pero me tenés que pagar por los CDs y también por el servicio de haber tenido la computadora toda la semana encendida para bajar esa distribución”. Esta última opción, es totalmente válida y legal: todos tenemos derecho a pedir una remuneración por el trabajo que realizamos.

Ahora bien, como se trata de software libre, mi amigo tiene varias opciones. Una de ellas es pagarme para obtener la última versión de Ubuntu Linux. Pero, también puede decirme: “Lo que me pedís me parece muy caro, se lo voy a pedir a mi primo que me lo dará gratis.”
Espero haber sido claro con el ejemplo de que el software libre, si bien generalmente es gratis porque casi todo el mundo se lo descarga de Internet (recordemos: en un acto totalmente legal), en ciertas ocasiones no lo es.

Es por eso que hay versiones de Linux que tienen un costo muy diferente. Porque las empresas que las compilan (esto es convertir el código fuente en un programa funcional), ofrecen servicios alrededor de esa compilación que consideran que valen lo que nos están pidiendo por su versión de Linux.



Top 10 Apache Top Level Projects

Voy a publicar nuevamente los 10 proyectos que fueron coronados como top leve:


1. httpd

2. Hadoop

3. Mahout

4. Tika

5. Solr

6. Nutch

7. Spamassassin

8. Subversion

9. Apache JMeter

10. Apache Traffic Server


Varios no conozco, me voy a tener que poner a estudiar!!


domingo, 15 de abril de 2012

Ember.js

Ember.js es un framework javascript para creación de aplicaciones web que elimina trabajo repetitivo y provee una arquitectura estándar.

Pero que como elimina el trabajo repetitivo? 

Hay algunas tareas que son comunes a todas las aplicaciones web. Por ejemplo, tomando los datos desde el servidor y que se actualice dicha información.

Dado que las herramientas proporcionadas para hacer esto por el navegador son bastante primitivas, se escribe el mismo código una y otra vez. Ember.js proporciona herramientas que le permiten centrarse en su aplicación en lugar de escribir el mismo código que has escrito cien veces.

Para ayudar a administrar los cambios en el punto de vista, Ember.js viene con un motor de plantillas que se actualizará automáticamente cuando el DOM a los objetos subyacentes cambiar.

Se especifica la plantilla una vez, y Ember.js asegura de que siempre este actualizado.

Y también provee una arquitectura...


Ember hace que sea fácil de dividir su aplicación en modelos, vistas y controladores, lo que mejora la capacidad de prueba, hace que el código sea más modular, y ayuda a los nuevos desarrolladores en el proyecto a entender rápidamente cómo encaja todo.

Ember también proporciona soporte integrado para la gestión del Estado, por lo que tendrá una forma de describir cómo se mueve su aplicación a través de varios estados.

Pinta lindo, dejo el link: http://emberjs.com/




viernes, 13 de abril de 2012

El futuro de JBoss Seam y Apache DeltaSpike

Leyendo infoQ me encuentro con la noticia, de que los desarrolladores de Seam van a dedicar esfuerzo a Apache DeltaSpike. Apache DeltaSpike es un framework de Apache que todavía esta en la incubadora.

Apache DeltaSpike es un Java CDI (Contexts and Dependency Injection). Es decir que implementa el jrs-299; este jsr describe la funcionalidad de un motor de inyección de dependencia.

Parece ser que Seam no tiene la intención de liberar la versión 4 but van a continuar el desarrollo en Apache DeltaSpike. Apache DeltaSpike consistirá en una serie de extensiones portátiles CDI que ofrecen funciones útiles para los desarrolladores de aplicaciones Java. El objetivo de ApacheDeltaSpike es crear un estándar de-facto de las extensiones que es desarrollado y mantenido por la comunidad Java, y para actuar como una incubadora para las características que pueden llegar a formar parte de las diversas especificaciones deJava SE y EE-relacionados.

Apache DeltaSpike esta en el incubador pero recibió código de proyectos grosos como JBoss Seam, Apache MyFaces CODI y CDISource. Además va a ser liberado con licencia Apache.

Dejo link de la noticia y links interesantes:
http://www.infoq.com/news/2012/04/seam-deltaspike
http://wiki.apache.org/incubator/DeltaSpikeProposal
https://cwiki.apache.org/DeltaSpike/

jueves, 12 de abril de 2012

“Community managers”: Las redes sociales crearon un nuevo oficio que es muy buscado

Leyendo clarin encuentro la siguiente noticia: 

"Internet tiene una influencia viral en las actividades comerciales. Le ha dado a los ingeniosos la oportunidad de producir ingresos, a veces millonarios, desde un simple garage. Ahora es el turno de las redes sociales. Las empresas ven la necesidad de incorporar un nuevo actor en su plantilla de empleados y así ya se generó una nueva salida laboral: los community managers , o administradores de comunidad.

Las universidades ya respondieron a la demanda con posgrados, cursos a distancia y programas ejecutivos. Los dictan en la UTN y en las universidades de Palermo (UP) y Belgrano (UB). Si bien la formación es muy reciente, ya casi 300 personas pasaron por sus aulas.

Hugo Brunetta, director del posgrado de la UB y autor del libro “ Community Managment ”, destaca que este nuevo rol no es sólo “usar Twitter o Facebook, sino pensar de modo estratégico. El mundo no es el que era. La mayoría de la gente que compra bienes y servicios hace consultas previas por la red. Esas consultas generan conversaciones que son leídas por otros clientes potenciales que, a su vez, ven lo que se está diciendo de la marca”. Fernando Cuscuela, director del programa ejecutivo de Community Management de la UP, agrega que el administrador “tiene la responsabilidad de generar el vínculo directo entre la empresa y el usuario final”. El aspirante al puesto, explica, “generalmente, debe estar asociado a la comunicación social y estar muy involucrado en las nuevas tecnologías”. Daniel Geisler, del Centro de Formación, Investigación y Desarrollo de Soluciones de e-Learning de la UTN, agrega que los egresados del curso online que dicta la institución “están capacitados para informar, comunicar, dinamizar y gestionar las comunidades. El empresariado de hoy sabe que la presencia en la Web es de gran importancia y es necesario contar con personas capacitadas que generen contenidos concisos, claros e interesantes para alcanzar a los potenciales clientes”.

Geisler indica que “según la Oficina de Estadísticas Laborales de EE.UU., en la próxima década seis de los diez trabajos mejor remunerados se enmarcarán en el ámbito de las tecnologías, la información y la comunicación. Uno de ellos será el de community manager ”. El crecimiento de la demanda ya se verifica acá: según el sitio de búsqueda Clarín Empleos, durante el último año se triplicaron los avisos publicados por empresas que buscan incorporar administradores de comunidades virtuales. Una tendencia que se puede explicar fácilmente si se considera que la radio tardó 38 años en alcanzar una audiencia de 50 millones de oyentes, la TV demoró 13 años en conquistar el mismo número, y Facebook lo alcanzó en sólo dos.

Carlos Rivero y Juan Korman, de la agencia Universal McCann, a cargo la gestión en las redes de Quilmes (ver Velocidad única), destacan que esta área de trabajo tiene mucho potencial, pero que no es tan glamorosa como se ve. “Es una caja de Pandora, donde uno no sabe qué va a ocurrir y donde todo cambia radicalmente en muy poco tiempo”, sentencian, y aclaran que un community manager tiene que “hacer funcionar la cabeza al nivel de la nueva generación de usuarios”. El mercado educativo y laboral ya tomaron nota de la rapidez de estos cambios."

Es interesante como la informatica se va diversificando y creando nuevos puestos de trabajo.

Dejo el link:



Infografia sobre linux

Infografía de la historia del Software Libre/Open Source

miércoles, 11 de abril de 2012

Elgg

Elgg es un motor de redes sociales, utilizado por empresas, universidades y asociaciones para crear comunidades entorno a ellas. Además es open source.

Entre las características podemos nombrar:


Modelo de datos de gran alcance: Elgg proporciona un potente modelo de datos permitiendo la creación de entidades diferentes sencillos, pero flexible.

flujos de actividad: La API de flujo de actividad granular asegura que sus plugins puede soportar el contenido necesario para los usuarios.

Plugin API: El uso de la API plug-in de gran alcance de Elgg para crear y añadir sus características requeridas.

Gestión de usuarios: Elgg se encarga de la administración de usuarios y los requisitos de la relación.

Los controles de acceso: Todos los objetos de Elgg pueden tener un nivel de control de acceso, que da los permisos de acceso granular posible.

API de servicios Web: Exponer funcionalidad a través de la API de REST a su red de Elgg.



Elgg fue votado en el 208 como la mejor aplicación social open source.

Dejo linK:

http://blog.elgg.org/
http://www.elgg.org/features.php
http://www.wowebook.im/book/elgg-1-8-social-networking/
https://twitter.com/#!/elgg

lunes, 9 de abril de 2012

Google Developers

"Inspiring developers everywhere" es la frase que nos da la bienvenida al nuevo sitio para desarrolladores de google. En esta web google nos deja un montón de recursos para utilizar sus servicios y desarrollar con sus tecnologías.


Y las siguientes herramientas:

viernes, 6 de abril de 2012

Juega a crear tu distro Linux con Linux Tycoon


Que buen Juego, estaba viendo las noticias y mira lo que encontré:

Railroad Tycoon, Rollercoaster Tycoon, Transport Tycoon... no han sido pocos los juegos con la palabra “Tycoon” al final, de la misma forma que no han sido pocas las horas que hemos invertido en ellos. Y ahora, encontramos a Linux Tycoon. ¿Qué tiene que ver el kernel Linux con el género de administración y comercio? En realidad, lo que debes hacer en Linux Tycoon es crear y administrar tu propia distro Linux. Si controlas bien a tus recursos, mantienes el tamaño de la distro en un nivel razonable, eliminas bugs y coordinas el esfuerzo entre voluntarios y personal contratado, tu éxito en el mundo open source estará asegurado.

De momento, Linux Tycoon se encuentra en fase beta, y posee versiones compatibles con Linux y OS X, aunque la versión para Windows se encuentra en camino. Ahora, Linux Tycoon no es gratuito (inusual para una versión beta), pero su precio tampoco es algo escandaloso: Apenas cuatro dólares. El desarrollador espera todo el “feedback” posible de los jugadores para crear una experiencia más balanceada, porque siendo honestos, no debe ser tan sencillo llevar la creación y administración de una distro Linux a un juego. Aún así, la idea es interesante. El desarrollo de software se ha convertido en una industria multimillonaria, y aunque ya existe un juego llamado “Software Tycoon”, no está mal que se exploren otros aspectos.

Que grande!!

Dejo la fuente de la noticia y el link:
http://www.neoteo.com/linux-tycoon-juega-a-crear-tu-distro-linux
http://lunduke.com/?page_id=2646

Apache ESME

Apache ESME (Enterprise Social Messaging Environment) es un plataforma segura y escalable para compartir conocimiento y generar comunidad; es un microsharing y micromessaging. Esta plataforma permite compartir conocimiento y relacionarse con otras personas  y obtener acceso controlado a otras fuentes de información, todo ello en un contexto de procesos de negocio 


Difícilmente se puede dar vuelta una página web en estos días sin ver una historia que describe cómo las personas usan las redes sociales, ya sea Twitter, Facebook o algún otro servicio para desarrollar y construir sus comunidades personales. En los negocios, se ven cada vez más los blogs y los wikis públicos demostrando en la resolución de problemas y de las comunicaciones, pero la naturaleza en tiempo real de la solución de problemas de procesos de negocio en gran medida sigue siendo afectado por las herramientas de redes sociales. Los servicios existentes, aunque atractivo, no se adaptan bien y han demostrado ser poco fiables. Esto es inaceptable para los negocios que debe ser 'Always On' y capaz de apoyar a las personas en su trabajo cotidiano. Estas aplicaciones por lo tanto, debe ser escalable y confiable, sino también ofrecer mucho más. 


Ante un problemas, lo bueno que podría ser si un usuario fuera capaz de aprovechar el conocimiento colectivo de sus compañeros o grupos. ¿Cuánto más rápido y con mayor precisión que podría ser capaz de resolver los problemas cotidianos? ¿Y si hubiera un mecanismo de comunicación que toma lo mejor de lo que servicios como Twitter y ofertas co-mezclados que con los procesos de negocio fácilmente identificables? La solución es  Apache ESME.


Apache ESME esta hecho en scala y obviamente su licencia es Apache 2. 


Dejo link:
http://esme.apache.org/
http://esme.apache.org/getting-started.html

jueves, 5 de abril de 2012

Apache Derby

Apache Derby es una base de datos relacional de código abierto implementado completamente en Java. Su mayor característica es que hace que sea fácil de integrar en cualquier aplicación basada en Java, pero también es compatible con arquitecturas cliente/servidor y otras tecnologías. Se basa en Java, JDBC y estándares SQL, es open source, es portátil y cumplen con los estándares de bases de datos. Que más queres?


Por si queres más te digo algunas características:

  • APIs para JDBC y SQL. Soporta todas las características de SQL92 y la mayoría de SQL99. La sintaxis SQL usada proviene de IBM DB2.
  • Su código mide alrededor de 2000KB comprimido.
  • Soporta cifrado completo, roles y permisos. Además posee SQL SCHEMAS para separar la información en un única base de datos y control completo de usuarios.
  • Soporta internamente procedures, cifrado y compresión.
  • Trae soporte multilenguaje y localizaciones específicas.
  • A partir de la versión 10.4 trae un sistema simple de replicación maestro-esclavo.
  • Transacciones y recuperación ante errores ACID.
  • Posee tres productos asociados a la marca:
    • Derby Embedded Database Engine: El motor propiamente dicho.
    • Derby Network Server: Permite convertir Derby en una base de datos que sigue el modelo cliente-servidor tradicional.
    • Database Utilities: Un paquete de utilidades


Usa licencia Apache 2.

Dejo link:
http://db.apache.org/

Firefox le dice adiós a los plugins antiguos de Java


Hace ya varios años, Mozilla implementó un mecanismo para bloquear los plugins de Firefox que puedan considerarse inseguros, en base a los parches que publican periódicamente sus desarrolladores, obligándonos a instalar las actualizaciones correspondientes para continuar utilizándolos. Esta semana, Java volvió a sumarse a la lista, ya que fueron bloqueadas las versiones anteriores a las lanzadas durante febrero de este año.

Esto es debido a que los parches críticos correspondientes al Java Development Kit y Java Runtime Environment, publicados en dicha ocasión, corrigen vulnerabilidades que pueden permitir la ejecución de código arbitrario en el ordenador del usuario. Como ya ocurrieron ataques que sacan provecho de esos fallos, el fabricante del navegador decidió tomar esta medida para mitigar las consecuencias de no actualizarse.

Sera este el fin de los applets??