Translate

miércoles, 4 de enero de 2012

Rusia ahorrará 55.300 millones de dólares en software gracias a GNU/Linux


La necesidad de afianzar una industria informática nacional, escapar de la dependencia tecnológica de la infraestructura informática pública, especialmente de los sistemas de Microsoft va a permitir ahorros milmillonarios a las arcas públicas.

Según el analista Román Dórojov en principio se han previsto 4 distribuciones principales cuyo desarrollo principal será a cargo de la empresa PingWin Software. El derroche y la insostenibilidad de la dependencia tecnológica en el área informática fue denunciado por el Programa Estatal “Comunidad de Información” aprobado en octubre de 2010 y concebido para el período 2011-2020. El plan va cumpliendo plazos y el prototipo de la plataforma del software nacional (PSN), que sustituirá a Windows en los ordenadores de las Administraciones Púlicas y escuelas de enseñanza media obligatoria, ya ha sido aprobado por el Ministerio de Comunicación. Las inversiones durante los primeros dos años de funcionamiento del programa en empresas locales alcanzará los 490 millones de rublos.

Argentina y todos los países deberías seguir por el mismo camino!!

Dejo la fuente:

http://www.hispalinux.es/node/747

Bio4j


Bio4j seria como grafo bioinformatico basado en base de dato que incluye la mayor cantidad de datos de UniProt KB(SwissProt + Trembl), Gene Ontology (GO), UniRef (50,90,100), RefSeq, and NCBI taxonomy. (Manuscript in preparation). La verdad es que esto es chino básico para mi pero creo que mi hermano que es bioinformatico le va interesar.

Bio4j  usa neo4j para representar la información.

Lo interesante es que utiliza licencia AGPL 3 .

Dejo links:

http://www.bio4j.com/
http://blog.bio4j.com/

martes, 3 de enero de 2012

Spring Data Neo4j

Neo4j es una base de datos basada en grafos. De la cual ya hablamos:

http://emanuelpeg.blogspot.com/2009/09/neo4j.html

Neo4j permite acceder a un nodo mediante una clave la cual contiene un valor. También tenemos una API para acceder a los datos y un lenguaje de consulta llamado Cypher.

Una de las características de Neo4j es que es una base transaccional y por lo tanto soporta ACID. Esto es bastante inusual para una base de datos NoSQL.

Podemos agregar a un estro proyecto Neo4j (si utilizamos maven) con la siguiente entrada en el pom:

  
   org.neo4j
   neo4j
   1.5
  


Trabajar con la Api de Neo4j puede ser un trabajo duro por lo tanto Spring framework nos provee un modulo que nos permite trabajar con Neo4j de forma más fácil y elegante.

Primero agregamos la siguiente entrada al pom:

 
org.springframework.data 
spring-data-neo4j 
2.0.0.RC1 
 
Y ahora vamos a agregar la siguiente entrada al applicationContext.xml :

 
... 
 
... 
 
La idea es hacer una aplicación que mantenga la relación de amistad entre personas. Primero creamos el proyecto con maven:

mvn archetype:generate

Luego configuramos como un proyecto normalito de maven.

Y el pom debería tener las siguientes dependencias:


 4.0.0

 org.assembly
 friend
 1.0-SNAPSHOT
 jar

 friend
 http://maven.apache.org

 
  UTF-8
  3.0.6.RELEASE
 

 
  
   
    maven-compiler-plugin
    
     1.6
     1.6
    
   
   
    org.apache.maven.plugins
    maven-eclipse-plugin
    2.7
    
     2.0
     true
    
   
   
    org.apache.maven.plugins
    maven-javadoc-plugin
   
   
    org.apache.maven.plugins
    maven-project-info-reports-plugin
   
  
 

 
  
   spring-snapshot
   Spring Maven SNAPSHOT Repository
   http://s3.amazonaws.com/maven.springframework.org/snapshot
  
 

 

  
   org.springframework.data
   spring-data-neo4j
   2.0.0.BUILD-SNAPSHOT
  

  
   org.springframework
   spring-core
   ${spring.version}
  

  
   org.springframework
   spring-context
   ${spring.version}
  

  
   org.springframework
   spring-aop
   ${spring.version}
  

  
   org.springframework
   spring-aspects
   ${spring.version}
  

  
   org.springframework
   spring-tx
   ${spring.version}
  

  
   org.neo4j
   neo4j
   1.5
  

  
   junit
   junit
   4.10
   test
  

  
   org.springframework
   spring-test
   ${spring.version}
   test
  


 



Luego hacen mvn clean install y luego eclipse:eclipse.

Luego importamos el proyecto a eclipse, ahora veamos la clase persona:

/**
 * 
 */
package org.assembly.model;

import java.util.HashSet;
import java.util.Set;

import org.springframework.data.neo4j.annotation.GraphId;
import org.springframework.data.neo4j.annotation.Indexed;
import org.springframework.data.neo4j.annotation.NodeEntity;

/**
 * @author emanuel
 *
 */
@NodeEntity
public class Person {
 
 @GraphId
 private Long id;
 
 @Indexed //nos permite buscar por ejemplo por nombre. 2 personas no deberian llamarse igual
 private String name;
 
 private String lastName;
 
 private Set friends = new HashSet();

 public Person() { }
 
 public Person(String name, String lastName) {
  super();
  this.name = name;
  this.lastName = lastName;
 }

 public Person(String name, String lastName, HashSet friends) {
  super();
  this.name = name;
  this.lastName = lastName;
  this.friends = friends;
 }

 public void makeAFriend(Person friend) {
  this.getFriends().add(friend);
  friend.getFriends().add(this);
 }
 
//geters , seters, hashcode and equal
 

}



Con esas anotaciones le decimos a spring cual es el id de nuestro nodo y que puede usar como indice para buscar. Ahora hagamos un dao:

package org.assembly.dao;
//La interfaz
import org.assembly.model.Person;

public interface PersonDAO {
 
 void save(Person person);

 Person get(Long id);
 
 Person findByName(String name);
 
}



package org.assembly.dao;

import java.util.List;

import org.assembly.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.neo4j.repository.GraphRepository;
import org.springframework.data.neo4j.support.Neo4jTemplate;
//La implementacion
public class PersonDAOImpl implements PersonDAO {
 
 @Autowired
 private Neo4jTemplate template;
 
 public void setTemplate(Neo4jTemplate template) {
  this.template = template;
 }

 @Override
 public void save(Person person) {
  this.template.save(person);
 }

 @Override
 public Person get(Long id) {
  return this.template.findOne(id, Person.class);
 }

 @Override
 public Person findByName(String name) {
  GraphRepository movieRepository =
    template.repositoryFor(Person.class);
  
  return movieRepository.findByPropertyValue("name", name);
 }


}



Vamos a configurar el applicationContext.xml:



 

 
  
  
 

 

 

 
  
  
 





Vamos a probar todo con un test:

package org.assembly.dao;

import static org.junit.Assert.assertEquals;

import javax.annotation.Resource;

import org.assembly.model.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class PersonDAOTest {

 @Resource
 private PersonDAO dao;
 
 public void setDao(PersonDAO dao) {
  this.dao = dao;
 }
 
 @Test 
 @Transactional
 public void save() {
  Person person = new Person("Pablo", "Goette");
  
  dao.save(person);
  
  Person personSaved = dao.get(person.getId());
  
  assertEquals(person, personSaved);
 }
 
 @Test 
 @Transactional
 public void saveFriendly() {
  Person person = new Person("Pablo", "Goette");
  
  person.getFriends().add(new Person("Mercedez","Benz"));
  person.getFriends().add(new Person("Al","Colico"));
  person.getFriends().add(new Person("Barry","Gota"));
  person.getFriends().add(new Person("Mercedez","Benz"));
  dao.save(person);
  
  Person personSaved = dao.get(person.getId());
  
  assertEquals(person, personSaved);
 }

 @Test 
 @Transactional
 public void findByName() {
  Person person = new Person("Aquiles", "Canto");
  
  dao.save(person);
  
  Person personSaved = dao.findByName("Aquiles");
  
  assertEquals(person, personSaved);
 }
}

Y listo, verán por ahí la carpeta data con la base de neo4j.


Si todo salio bien los test terminaron exitosos.

Dejo el repositorio subversion:
svn checkout http://spring-neo4j.googlecode.com/svn/trunk/ spring-neo4j-read-only

Dejo links:

http://www.springsource.org/spring-data/neo4j
http://neo4j.org/
http://video.neo4j.org/YbYN/webinar-introduction-to-spring-data-neo4j/
http://youtu.be/9qVs9vxx8lk
http://www.infoq.com/presentations/Introduction-to-Spring-Data-Neo4j

Y dejo un video:



lunes, 2 de enero de 2012

Libro de Javascript gratuito

Comparto un buen libro de javascript gratuito:

http://eloquentjavascript.net/

Entre los comentarios se encuentra el siguiente:

A concise and balanced mix of principles and pragmatics. I loved the tutorial-style game-like program development. This book rekindled my earliest joys of programming. Plus, JavaScript!
Brendan Eich, the man who gave us JavaScript

Ranking de lenguajes 2011

Estaba leyendo genbetadev y me encontré el ranking de lenguajes que realiza la empresa TIOBE:


Dejo links:


sábado, 31 de diciembre de 2011

Apache Hadoop con Spring Data

 Spring Data provee soporte para Apache Hadoop; que es Hadoop es un proyecto de software libre el cual tiene como objetivo brindar servicios de computacion distribuida de este proyecto ya hablamos:
http://emanuelpeg.blogspot.com/2009/10/apache-hadoop-es-un-proyecto-java-de.html

Spring Data es otro proyecto libre que nos ayuda a interactuar con diferentes tipos de almacenes de datos. Este proyecto implementa un modulo para interactuar con Apache Hadoop.

Entre sus características podemos nombrar:


  • Una extensión para Spring Batch para soportar la comunicación punto a punto
  • Simplifica la lectura y escritura de recursos HDFS
  • Spring Batch Tasklets Map-Reduce para en un Job con streaming
  • Integración con Hbase, Hive y Pig



Para utilizar este proyecto con maven deben agregar el siguiente repositorio:


 spring-snapshot
 Spring Maven SNAPSHOT Repository
 http://s3.amazonaws.com/maven.springframework.org/snapshot



y la siguiente entrada en el pom:


 org.springframework.data
 spring-data-hadoop
 1.0.0.BUILD-SNAPSHOT
 


Dejo links:

http://www.springsource.org/spring-data/hadoop
http://static.springsource.org/spring-hadoop/docs/current/reference/
http://hadoop.apache.org/

Feliz 2012!!


jueves, 29 de diciembre de 2011

Aprendiendo Android



Para el que quiere aprender a programar aplicaciones para Android, dejo algunos recursos:

1.- 9 videotutoriales en español --> http://goo.gl/laZc8

2.- 4 libros digitales gratuitos --> http://goo.gl/pqvUj

3.- 20 horas para aprender a programar en Android -->http://goo.gl/SU7sh

4.- Curso impartido por Google --> http://goo.gl/8utpu

5.- Desarrollo y Programacion Android Fácilmente --> http://goo.gl/HYvbd

6.- Desarrollo en Android en español --> http://goo.gl/r7yu2


Que lo disfruten!

martes, 27 de diciembre de 2011

Libro de Python


Dejo un libro gratuito de Python en castellano :

https://docs.google.com/gview?url=http://books.openlibra.com/pdf/Python%20para%20todos.pdf&chrome=true

Que lo disfruten!!

Manual de Symfony 2

Han publicado un manual en castellano de Symfony 2, framework PHP que esta sumando adeptos; dado su productividad y flexibilidad.

Dejo el link: https://docs.google.com/gview?url=http://books.openlibra.com/pdf/symfony2-es.pdf&chrome=true&pli=1


Apache Lenya - Open Source Content Management (Java/XML)

Apache Lenya es un framewrok open source java/xml; CMS (Common Manager System) con un sistema de control de versiones, un administrador multi-site, scheduling, busquedas y un editor WYSIWYG (What You See Is What You Get) y workflow. Completito, completito!

 La actual versión es la 2.0.4 y se distribuye con licencia Apache. Por el momento no se distribuye de forma binaria y corre sobre un jetty o tomcat.

Dejo links:

http://lenya.apache.org/
http://lenya.apache.org/docu20/installation20/install20.html
http://lenya.apache.org/docu20/installation20/download20.html
http://lenya.apache.org/index/screenshots.html


sábado, 24 de diciembre de 2011

Nueva iniciativa de Codecademy para que programar sea fácil y entretenido



Codecademy se planteaba como una propuesta interesante  y amena al momento de aprender programación en línea, ya sea JavaScrip, Ruby o Python.


Se ha abierto Codecademy Labs, tu espacio para que puedas practicar todo lo que aprendes en tus clases virtuales . Una de los detalles más interesantes es que no necesitas descargar ningún editor a tu escritorio, sino que puedes hacerlo desde la misma interfaz, desde el navegador. Otro aspecto interesante es que puedes ejecutar o descargar archivos.


A estudiar!!!


Dejo el link: http://labs.codecademy.com/

miércoles, 21 de diciembre de 2011

CHOMSKY



Uno de los genios que a dado este ultimo siglo (a mi parecer) y personaje muy influyente tanto en política como lingüística y en informática. Si, si este tipo nos ha ayudado mucho a nosotros.

En la década de 1950, Noam Chomsky desarrolló la Jerarquía de Chomsky en el campo de la lingüística; un descubrimiento que impactó directamente a la teoría de lenguajes de programación y otras ramas de la informática. Si leemos en la wikipedia sobre la Jerarquia de Chomsky:


La jerarquía de Chomsky consiste en los niveles siguientes:
  • Gramáticas Type-0 (gramáticas sin restricción) incluya todas las gramáticas formales. Generan exactamente todas las idiomas que se puedan reconocer por a Máquina de Turing. Estas idiomas también se conocen como idiomas recurrentemente enumerable. Observe que esto es diferente de idiomas recurrentes cuál puede ser decidido por máquina de Turing siempre-que para.
  • Gramáticas del tipo 1 (gramáticas sensibles al contexto) genere idiomas sensibles al contexto. Estas gramáticas tienen reglas de la forma conA un no terminal y α, β y γ cadenas de terminales y de nonterminals. Las secuencias α y β puede ser vacío, pero γ debe ser no vacío. La regla se permite si S no aparece en el derecho de ninguna regla. Las idiomas descritas por estas gramáticas son exactamente todas las idiomas que se pueden reconocer por a autómata limitado linear (una máquina no determinista de Turing que cinta es limitada por las épocas constantes la longitud de la entrada.)
  • Gramáticas Type-2 (gramáticas independientes del contexto) genere idiomas context-free. Éstos son definidos por las reglas de la forma con Aun no terminal y γ una cadena de terminales y de nonterminals. Estas idiomas son exactamente todas las idiomas que se pueden reconocer por un no determinista autómata del pushdown. Las idiomas libres del contexto son la base teórica para el sintaxis de la mayoría lenguajes de programación.
  • Gramáticas Type-3 (gramáticas regulares) genere idiomas regulares. Tal gramática restringe sus reglas a un solo no terminal en el lado izquierdo y un lado derecho que consisten en un solo terminal, seguido (o precedido posiblemente, pero no ambos en la misma gramática) por un solo no terminal. La regla también se permite aquí si S no aparece en el derecho de ninguna regla. Estas idiomas son exactamente todas las idiomas que se pueden decidir por a autómata finito del estado. Además, esta familia de lenguajes formales se puede obtener cerca expresiones regulares. Las idiomas regulares son de uso general definir los patrones de la búsqueda y la estructura léxica de lenguajes de programación.”
No solo nos ayudo a nosotros si no que fue un activista político que hoy día lucha por mejorar el mundo. Es muy aconsejable que lean el siguiente link, en el cual el describe las 10 estrategias de manipulación mediática. 

Una frase: 

"El país se fundó sobre el principio de que el rol primario del gobierno es proteger de la mayoría a la propiedad, y así sigue."
                                                                                         Noam Chomsky
 
Y por ultimo para darle un poco de humor compartir este resumen que saque de la frikipedia: 

De la serie grandes personajes:
Avram Noam Chomsky
Chomsky pensativo.jpg
"Otro estudiente del MIT con una duda de etica compleja... ¿Por qué no estudie medicina?"
NacimientoPoquito después del comunismo
MuerteSi Bush se reelige... y si Chávez no lo declara muerto antes.
OcupaciónMolestar al gobierno (Con justa razón)
NacionalidadMade in America (¡Hombre hasta yo me avergonzaria!)
Malo o BuenoDepende de como consdieres a Bush
Atentados contra la humanidadEscribir libros sobre una teoría ininteligible
ReligiónAnarquismo
NotasEscribir libros contra el capitalismo es excelente negocio