Translate
miércoles, 8 de mayo de 2013
The Structure of Spring (Core)
Les dejo un link que es una joyita, muestra la evolución de spring y su estructura; muy bueno!
Dejo link:
http://java.dzone.com/articles/structure-spring-core
Try Objective-C
Dejo link:
http://www.codeschool.com/courses/try-objective-c
Que tiene que tener el lenguaje de programación perfecto?
Esta es una pregunta que se me ocurrió mientras leía sobre modularidad de Ceylon y me parece una gran idea. Que más se les ocurre?
Anoto mi lista y después voy agregando:
Modularidad similar a Ceylon
Funcional y objetos similar a Scala
Actores similar a Erlang o Scala
Closures, Objetos, Reflexion similar a SmallTalk, Ruby, Scala, etc...
Inyección como noop
Recolector de basura
Interpolación de String: "Hello ${foo}"
Doctest de python
Bytecode como Java o SmallTalk o ...
Comprehensiones como Python
Contratos como Eiffel
Sintaxis muy limpia como python
Código se pueda leer y entender fácil y rápido
Fácil de aprender
Generador de documentación automático
Que más? que más? Me ayudan a organizar las características del mejor lenguaje?
Anoto mi lista y después voy agregando:
Modularidad similar a Ceylon
Funcional y objetos similar a Scala
Actores similar a Erlang o Scala
Closures, Objetos, Reflexion similar a SmallTalk, Ruby, Scala, etc...
Inyección como noop
Recolector de basura
Interpolación de String: "Hello ${foo}"
Doctest de python
Bytecode como Java o SmallTalk o ...
Comprehensiones como Python
Contratos como Eiffel
Sintaxis muy limpia como python
Código se pueda leer y entender fácil y rápido
Fácil de aprender
Generador de documentación automático
Que más? que más? Me ayudan a organizar las características del mejor lenguaje?
Módulos en Ceylon
Ya hablamos bastante de Ceylon, para los que no se acuerdan; es un lenguaje creado por la empresa Red Hat que corre en la plataforma Java.
Porque puede ser tan especial este lenguaje? Por muchas razones, hoy vamos a ver una que me parece que es una de las mejores ideas de los Lenguajes que corren en la plataforma Java. Y es la módularidad, esto lo tenemos en java por medio de herramientas o frameworks, nosotros en java podemos indicar con maven o Ivy por ejemplo la versión de la librería que vamos a utilizar.
Ceylon en cambio nos permite hacer esto a nivel lenguaje por medio de los módulos El código es organizado dentro de paquetes y módulos. Con Ceylon obtenemos una módularidad real independiente de la herramienta que utilicemos para construir nuestra aplicación.
Veamos un ejemplo de modulo:
module com.osintegrators.example.ceylon.hello '1.0.0' {
import ceylon.net '0.5';
import ceylon.dbc '0.5';
import java.jdbc '7';
import java.base '7';
}
Dejo link:
http://ceylon-lang.org/features/
http://m.infoworld.com/d/application-development/first-look-gavin-kings-ceylon-217197
Porque puede ser tan especial este lenguaje? Por muchas razones, hoy vamos a ver una que me parece que es una de las mejores ideas de los Lenguajes que corren en la plataforma Java. Y es la módularidad, esto lo tenemos en java por medio de herramientas o frameworks, nosotros en java podemos indicar con maven o Ivy por ejemplo la versión de la librería que vamos a utilizar.
Ceylon en cambio nos permite hacer esto a nivel lenguaje por medio de los módulos El código es organizado dentro de paquetes y módulos. Con Ceylon obtenemos una módularidad real independiente de la herramienta que utilicemos para construir nuestra aplicación.
Veamos un ejemplo de modulo:
module com.osintegrators.example.ceylon.hello '1.0.0' {
import ceylon.net '0.5';
import ceylon.dbc '0.5';
import java.jdbc '7';
import java.base '7';
}
Dejo link:
http://ceylon-lang.org/features/
http://m.infoworld.com/d/application-development/first-look-gavin-kings-ceylon-217197
Libro gratuito de PHP
Para la gente que comienza con php un libro gratuito que los puede ayudar:
http://ocapunay.blogspot.com.ar/2013/04/libro-de-php.html
martes, 7 de mayo de 2013
Objects and functions, conflict without a cause?
Quiero compartir con ustedes este video que esta muy bueno. Martin Odersky nos explica como podemos llevar de la mano dos paradigmas que son totalmente distintos el funcional y el orientado a Objetos.
Dejo el link:
http://parleys.com/play/51704efce4b095cc56d8d4b5/chapter0/about
Dejo el link:
http://parleys.com/play/51704efce4b095cc56d8d4b5/chapter0/about
domingo, 5 de mayo de 2013
Llego Debian 7!
No estoy siendo muy original con la noticia, ya todos se hicieron eco de que Debian 7 fue liberado. Si bien esta versión no trae grandes sorpresas, si trae novedades muy buenas. Por ahí la que me pareció importante es que ahora permite instalar paquetes de diferentes arquitecturas, esto permite instalar software de 32 y 64 bits en la misma máquina, sin problemas de dependencias. Esto entre otras novedades, dejo las nuevas versiones:
- Apache 2.2.22
- Asterisk 1.8.13.1
- GIMP 2.8.2
- el entorno de escritorio GNOME 3.4
- la colección de compiladores GNU 4.7.2
- Icedove 10 (una versión sin marca de Mozilla Thunderbird)
- Iceweasel 10 (una versión sin marca de Mozilla Firefox)
- el entorno de escritorio KDE Plasma y las aplicaciones de KDE 4.8.4
- Los núcleos kFreeBSD 8.3 y 9.0
- LibreOffice 3.5.4
- Linux 3.2
- MySQL 5.5.30
- Nagios 3.4.1
- OpenJDK 6b27 y 7u3
- Perl 5.14.2
- PHP 5.4.4
- PostgreSQL 9.1
- Python 2.7.3 y 3.2.3
- Samba 3.6.6
- Tomcat 6.0.35 y 7.0.28
- Hipervisor Xen 4.1.4
- El entorno de escritorio Xfce 4.8
- X.Org 7.7
A Descargar:
Migration Manager for Scala
Seguimos recorriendo el stack tecnológico de typesafe, ahora le toca a Mima (Migration Manager for Scala) esta es una herramienta que nos permite verificar la compatibilidad entre librerías.
Mima analiza todos los archivos .class en el proyecto, detectar incompatibilidades. Con esta herramienta los programadores de librerías y frameworks pueden estar seguros de que las nuevas características se pueden integrar rápida y fácilmente en sus proyectos sin romper la compatibilidad con versiones anteriores. Además Mima puede trabajar como un plugin de SBT.
Migration Manager está actualmente bajo desarrollo, y ha sido publicado por Typesafe bajo la licencia Apache 2.0.
Dejo links:
http://typesafe.com/platform/tools/scala/mima
https://github.com/typesafehub/migration-manager#migration-manager-for-scala
jueves, 2 de mayo de 2013
Cambiamos a linux?
Si te preocupan tus aplicaciones windows, no te preocupes vas a encontrar mejores:
miércoles, 1 de mayo de 2013
FoundationDB. NoSQL. YesACID.
Leyendo InfoQ me encuentro con esta base NoSQL llamada FoundationDB, que tiene de especial? es que nos promete transacciones! Es decir cumple con el conjunto de características ACID (Atomicity, Consistency, Isolation and Durability). Como sabemos NoSQL normalmente no soporta ACID pero como beneficio nos brinda la posibilidad de escalar a muchos datos.
Como trabaja FoundationDB para ser NoSQL y ACID? Es por medio de lo que ellos llaman Layers (capas) Una capa puede proporcionar un modelo de datos nuevo, la compatibilidad con los sistemas existentes, o incluso servir como un marco completo.
Varias capas se pueden utilizar al mismo tiempo, lo que permite una base de datos única para consolidar varios almacenes de datos. FoundationDB soporta diferentes maneras de guardar datos o modelo de datos, pero todo termina siendo objetos clave valor.
Luego de buscar como una hora el licenciamiento, porque es su pagina no esta muy claro. Les dejo el link: http://foundationdb.com/BetaLicenseAgreement.pdf pero lejos de ser open source.
Dejo link:
http://www.infoq.com/news/2013/04/foundationdb-nosql-database
http://www.foundationdb.com/
Javascript y java un solo corazón
Leyendo InfoQ me tope con una interesante noticia, sobre javascript y java. Se ha anunciado una nueva implementación de javascript a la plataforma Java que utiliza la potencia de InvokeDynamic. Esta implementación se llama Dynjs.
Mientras tanto Oracle anuncio otra implementación llamada Nashorn y con la implementación ya conocida Rhino suman 3 y como se puede ver javascript se viene con todo y la plataforma java no quiere quedarse afuera. InvokeDynamic permite que se ejecute javascript con mayor performance utilizando closures de forma nativa.
Dejo links:
http://www.infoq.com/news/2011/10/dynjs
http://openjdk.java.net/projects/nashorn/
https://developer.mozilla.org/es/docs/Rhino
http://dynjs.org/
SLICK, accediendo a almacenes de datos con scala
Seguimos recorriendo el stack tecnológico de typesafe, y es hora de presentarles a Slick. Que es Slick? The Scala Language Integrated Connection Kit (Slick). Queda clarisimo, y para que sirve? Bueno Slick sirve para conectarnos a bases de datos relacionales o NoSQL de forma fácil desde scala. Slick integra bases de datos en Scala, lo que permite almacenar, datos remotos consultados y procesados de la misma manera que los datos en memoria.
Esto da la sensación de que trabajamos con colecciones, pero en realidad estamos trabajando con base de datos. Por lo tanto tenemos un mayor control de lo que sucede en la base de datos y no necesitamos escribir sql, sino que todo lo hacemos en scala.
Como Slick genera sql debe generarlo para una base en particular, es similar a lo que sucede en hibernate con los dialectos. Slick soporta actualmente las siguientes bases de datos:
- DB/2
- Derby/JavaDB
- H2
- HSQLDB/HyperSQL
- Microsoft Access
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- SQLite
Debido Slick proporciona una capa frontal que integra las consultas de manera transparente utilizando tipos Scala ordinarias, las consultas pueden ser procesadas y validadas en tiempo de compilación. Usando Slick, los programadores pueden escribir directamente las consultas de base de datos en Scala, beneficiándose de la comprobación estática, seguridad en tiempo de compilación y composicionalidad de Scala. Slick también permite escribir consultas SQL y ejecutarlas con un API optimizado para Scala en lugar de utilizar JDBC.
Veamos un pequeño ejemplo:
object Coffees extends Table[(String, Int, Double)]("COFFEES") {
def name = column[String]("COF_NAME", O.PrimaryKey)
def supID = column[Int]("SUP_ID")
def price = column[Double]("PRICE")
def * = name ~ supID ~ price
}
Coffees.insertAll(
("Colombian", 101, 7.99),
("Colombian_Decaf", 101, 8.99),
("French_Roast_Decaf", 49, 9.99)
)
val q = for {
c <- Coffees if c.supID === 101
// ^ comparing Rep[Int] to Rep[Int]!
} yield (c.name, c.price)
println(q.selectStatement)
q.foreach { case (n, p) => println(n + ": " + p) }
Se ve genial!!
Dejo link:
SBT, haciendo fácil la construcción de proyectos en scala
SBT es Simple Build Tool, una herramienta que permite crear proyectos Scala o java. Seria como el querido Maven. Es necesario para utilizarlo java 1.6 o superior entre sus características podemos destacar:
- Creación fácil de proyectos simples
- .sbt que es como el pom.xml de maven, es el archivo de definición del proyecto y esta basado en DSL
- Compilación continua y testing con triggered execution
- Genera documentación con scaladoc
- Genera y publica jars
- Soporta proyectos que mezclan java y scala
- Soporta subproyectos
- Soporta correr tareas en diferentes hilos al mismo tiempo. Esto es genial!
- Soporta diferentes administradores de librerías, se puede configurar con Apache Ivy o maven, etc.
Si hicieron el curso de programación funcional en scala seguro lo utilizaron. Y se puede ver que es muy fácil de usar.
Dejo link:
http://www.scala-sbt.org/#
sábado, 27 de abril de 2013
OpenIndiana, la evolución de open Solaris
Cuando Open solaris murió en manos de Oracle, la comunidad no se quedo de brazos cruzados y creo Open Indiana con el código de Open Solaris. Open Indiana es un sistema operativo robusto que utiliza gnome 2 para su interfaz gráfica A la vez utiliza un núcleo open source llamado Illumos que también es producto de la muerte de Open Solaris.
Se ve bien! Es una buena opción para que usa Solaris.
Dejo link:
http://openindiana.org/
http://wiki.illumos.org/
viernes, 26 de abril de 2013
Codeskulptor, programando python en la nube.
Este editor en la nube nos permite correr código Python y ver el resultado, se ve muy bien!
Dejo link:
http://www.codeskulptor.org/
jueves, 25 de abril de 2013
Tutorial de Python en Español Por Python Argentina
Python Argentina nos regala un tutorial de python totalmente en castellano y para python 3.0 y 2.7.3. Esta un kilo y 3 pancitos!
Dejo link:
http://docs.python.org.ar/tutorial/index.html
Dejo link:
http://docs.python.org.ar/tutorial/index.html
domingo, 21 de abril de 2013
Pude probar OpenSusse 12.3
Me saque las ganas y probé OpenSusse 12.3 y quede muy contento, se ve genial! Instalación limpia, muy intuitiva y un escritorio muy solido. Yo instale KDE y me pareció muy bien integrado, tendría que probar con gnome.Dejo las novedades de esta versión:
Ya que este ha sido un ciclo más corto de lo normal, se ha prestado gran atención a los detalles.
Toques finales
openSUSE 12.3 completa la integración de systemd y proporciona una mejor experiencia para los registros del sistema con journald. Se ha trabajado en la gestión de paquetes para hacer que las interfaces gráficas funcionen de un modo más fiable y un nuevo tema que aporta consistencia desde el arranque hasta el escritorio. openSUSE ha cambiado a imágenes autoejecutables (Live) de 1 GB y el equipo ARM espera ser capaz de proporcionar un openSUSE 12.3 estable para esta arquitectura en pocas semanas.
openSUSE 12.3 completa la integración de systemd y proporciona una mejor experiencia para los registros del sistema con journald. Se ha trabajado en la gestión de paquetes para hacer que las interfaces gráficas funcionen de un modo más fiable y un nuevo tema que aporta consistencia desde el arranque hasta el escritorio. openSUSE ha cambiado a imágenes autoejecutables (Live) de 1 GB y el equipo ARM espera ser capaz de proporcionar un openSUSE 12.3 estable para esta arquitectura en pocas semanas.
Refinamiento
Lo último en escritorios llega con un refinado adicional para los usuarios con un manejo de metadatos mucho más rápido, un nuevo gestor de impresión y una integración mejor de bluetooth en el escritorio Plasma de KDE. GNOME Shell ha mejorado las notificaciones, la gestión de archivos y la integración con cuentas de MS Exchange y Windows Live.
Lo último en escritorios llega con un refinado adicional para los usuarios con un manejo de metadatos mucho más rápido, un nuevo gestor de impresión y una integración mejor de bluetooth en el escritorio Plasma de KDE. GNOME Shell ha mejorado las notificaciones, la gestión de archivos y la integración con cuentas de MS Exchange y Windows Live.
Novedades
openSUSE 12.3 incorpora nuevas tecnologías para usuarios con la inclusión de PostgreSQL 9.2, que tiene soporte nativo para JSON (estilo noSQL). Hemos pasado a usar MariaDB por defecto en vez de MySQL. Ésta será la primera publicación de openSUSE con OpenStack "Folsom" completo para los amantes de la nube, y también debuta el escritorio E17 y los gestores de ventana awesome y Sawfish.
openSUSE 12.3 incorpora nuevas tecnologías para usuarios con la inclusión de PostgreSQL 9.2, que tiene soporte nativo para JSON (estilo noSQL). Hemos pasado a usar MariaDB por defecto en vez de MySQL. Ésta será la primera publicación de openSUSE con OpenStack "Folsom" completo para los amantes de la nube, y también debuta el escritorio E17 y los gestores de ventana awesome y Sawfish.
Nos movemos hacia delante
openSUSE avanza incluyendo aplicaciones actualizadas. DigiKam 3.0 llega con unas capacidades muy ampliadas para el procesamiento en lote de imágenes además de filtros y complementos tanto nuevos como actualizados. Las principales aplicaciones de gestión de información personal han recibido actualizaciones. Ahora Evolution tiene búsquedas en carpetas actualizadas automáticamente y corrección ortográfica completa, mientras que el filtro rápido de Kontact busca en el cuerpo entero de los correos y tiene una composición mejorada. Herramientas de desarrollo como KDevelop, monodevelop y valgrind han adquirido soporte preliminar para Android. Las bibliotecas de desarrollo como GTK3 y la plataforma de desarrollo de KDE se han incluido con nuevas versiones.
openSUSE avanza incluyendo aplicaciones actualizadas. DigiKam 3.0 llega con unas capacidades muy ampliadas para el procesamiento en lote de imágenes además de filtros y complementos tanto nuevos como actualizados. Las principales aplicaciones de gestión de información personal han recibido actualizaciones. Ahora Evolution tiene búsquedas en carpetas actualizadas automáticamente y corrección ortográfica completa, mientras que el filtro rápido de Kontact busca en el cuerpo entero de los correos y tiene una composición mejorada. Herramientas de desarrollo como KDevelop, monodevelop y valgrind han adquirido soporte preliminar para Android. Las bibliotecas de desarrollo como GTK3 y la plataforma de desarrollo de KDE se han incluido con nuevas versiones.
Dejo links:
https://es.opensuse.org/openSUSE:Anuncio_de_la_publicaci%C3%B3n_de_la_versi%C3%B3n_12.3
https://es.opensuse.org/Bienvenidos_a_openSUSE.org
Cual es tu escritorio favorito?
Interesante iniciativa de hacer una encuesta general de que escritorio es el que más nos gusta, si preguntan por el ganador parcial, Unity, me parece increíble. El escritorio que me sugirió abandonar Ubuntu, luego viene KDE y esto es entendible dado que no tiene tanta fragmentación como gnome.
Si preguntan mi opinión sin lugar a duda fui muy feliz con Mate, luego pondría a KDE que me estoy acostumbrando y la verdad viene bien y en tercer puesto pondría a Cinnamon.
Cual sería su voto? Si tienen que hacer un top 3?
Dejo links:
https://docs.google.com/forms/d/1okkJ82jEhdIJ4P8vghf2kdAkkRWHrov5cbFoR570Nz0/viewform?usp=sharing&edit_requested=true
https://docs.google.com/forms/d/1okkJ82jEhdIJ4P8vghf2kdAkkRWHrov5cbFoR570Nz0/viewanalytics
viernes, 19 de abril de 2013
jueves, 18 de abril de 2013
miércoles, 17 de abril de 2013
The Python Profilers
Hace muy poco tiempo me encontré con cProfile de python, es una herramienta para hacer profiling. Pero que es Profile? Un profile es un conjunto de estadísticas que nos indican cuanto demora un método o proceso y como se esta ejecutando. El objetivo es saber porque tarda mi código lo que tarda, para así poder mejorarlo y mejorar la performans del programa.
Las librerías estándares de Python proveen 3 formas de generar profiles:
- cProfile: es el recomendado por la mayoría de los programadores; es una extensión de C y provee un overhead razonable.
- Profile: esta totalmente hecho en python y tiene mayor overhead que cProfile
- hotshot: es una extensión de C experimental, con el objetivo de minimizar el overhead, esta herramienta no tiene mantenimiento y esta pensado eliminarla en nuevas versiones.
import cProfile
import re
cProfile.run('re.compile("foo|bar")')
Esto nos dará como resultado la siguiente tabla:
197 function calls (192 primitive calls) in 0.002 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 <string>:1(<module>)
1 0.000 0.000 0.001 0.001 re.py:212(compile)
1 0.000 0.000 0.001 0.001 re.py:268(_compile)
1 0.000 0.000 0.000 0.000 sre_compile.py:172(_compile_charset)
1 0.000 0.000 0.000 0.000 sre_compile.py:201(_optimize_charset)
4 0.000 0.000 0.000 0.000 sre_compile.py:25(_identityfunction)
3/1 0.000 0.000 0.000 0.000 sre_compile.py:33(_compile)
En el cual podemos ver el método que más se corre y el método que más tiempo ocupa. Simple todos los datos que necesito.
La idea del post no era hacer una guía exhaustiva de cProfile pero si mostrar lo fácil del uso y practico.
Dejo link:
http://docs.python.org/2/library/profile.html
lunes, 15 de abril de 2013
Gnome 3, cinnamon y otras yerbas
Este post es a raíz de la siguiente noticia, dado que yo soy muy fanático de Mate y Mint. Y para no quedarme cómodo con Mate decidí probar Cinnamon y no me fue muy bien. Por lo que dicen es que es culpa de Gnome 3 y por ahí entiendo que la gente de Gnome no puede prohibirse dejar de romper su plataforma y reestructurarla. Pero gente ya basta!!
Por favor dejemos de hacer tan complicado Linux, busquemos de combatir la fragmentación. No estoy en contra que existan opiniones o formas de ver las cosas diferentes, creo que Linux es un lugar donde se puede mezclar todo. Pero cuando entramos a mezclar y rompemos todo. Es porque salta a la vista que falta respeto a los estándares o faltan estándares.
Tenía muchas ganas de probar cinnarch, pero ya no lo voy a poder hacer por lo menos con cinnamon. Por favor cuidemos las bases así podemos crecer.
sábado, 13 de abril de 2013
NoSQL Benchmark!!!
Estuve viendo este benchmark entre Aerospike, Cassandra, Couchbase and MongoDB que realizo la gente de infoQ, muy bueno.
Dejo el link:
http://www.infoq.com/news/2013/04/NoSQL-Benchmark
Dejo el link:
http://www.infoq.com/news/2013/04/NoSQL-Benchmark
USB claro en linux
Estoy sin internet, porque se corto el teléfono, más allá de eso se me ocurrió comprar un modem claro para salir del paso, en fin fui a comprarlo y le pregunte al vendedor que sistemas operativos soportaba, y me contesto Windows, ha y mac también pero nunca lo probé. Digamos que Linux ni hablar pensé, y pensé bien; no funciona en Linux. Por lo menos no sin bajar nada; en fin posteo esto desde el windows que tuve que instalar.
Solo tengo que decirle algo a claro:
Programadores con experiencia.
Hace ya tiempo ley un artículo en java hispano sobre si es mejor un programador con más experiencia; en este articulo se demuestra que no es mejor una persona con más experiencia que un novato programando y al principio pensé que había algo mal, no puede ser que un programador que tiene 3 años en el mercado programe igual que uno que tiene 4 años de experiencia o 2. Me parecía muy raro, pero luego me di cuenta que en realidad alguien con menos conceptos programa igual que los experimentados, con la diferencia de que el desarrollo de software no todo es programar. Es decir nosotros estamos todo el tiempo topándonos con problemas, problemas que puede ser la base de datos o hibernate o algúna otra herramienta y sin embargo se nota a simple vista que alguien que tiene más tiempo programando maneja mejor estas herramientas. Sin hablar de que si hay que diseñar algo con algún patrón; es innegable que el manejo de patrones lleva su tiempo.
Es decir el tiempo te llena de conocimiento y esto vale. Y si no se usa o quedo viejo hay que hacer el esfuerzo de extrapolar el conocimiento, es muy difícil generalizar por ejemplo como se utiliza una herramienta; pero los conceptos siempre quedan; un ejemplo podría ser la gente que sabe flash y diseñar con flash, si bien hubo cambio si una persona que utilizo flash le toca diseñar en html 5 va ser mucho más rápido que alguien que nunca diseño. Por este motivo, hay que esforzarse para entender los conceptos y no solo las herramientas, para que nuestro conocimiento pueda durar en el tiempo.
Es decir el tiempo te llena de conocimiento y esto vale. Y si no se usa o quedo viejo hay que hacer el esfuerzo de extrapolar el conocimiento, es muy difícil generalizar por ejemplo como se utiliza una herramienta; pero los conceptos siempre quedan; un ejemplo podría ser la gente que sabe flash y diseñar con flash, si bien hubo cambio si una persona que utilizo flash le toca diseñar en html 5 va ser mucho más rápido que alguien que nunca diseño. Por este motivo, hay que esforzarse para entender los conceptos y no solo las herramientas, para que nuestro conocimiento pueda durar en el tiempo.
jueves, 11 de abril de 2013
MoSQL, de mongoDb a postgres!!
Con el crecimiento de NoSQL, las herramientas que permiten convivir NoSQL cn base de datos relacionales estan tomando mayor importancia. Por lo tanto les quiero presentar MoSQL, que permite hacer? Replicar datos desde una base de datos MongoDB a una postgres.
Con MoSQL, se puede ejecutar aplicaciones contra una base de datos MongoDB, pero también mantener una actualización de sus datos en PostgreSQL, listo para realizar consultas con toda la potencia de SQL.
Dejo link:
https://stripe.com/blog/announcing-mosql
https://github.com/stripe/mosql
lunes, 8 de abril de 2013
Libertad y educación
Quiero recomendar el blog Libertad y educación, muy bueno y interesante. Y mi pensamiento es que en todas las entidades educativas se debería enseñar software libre. Por que? Porque el software libre te brinda mayor libertad de aprendizaje, podemos aprender más.
Dejo link:
http://libertadygnu.blogspot.mx/
sábado, 6 de abril de 2013
Rust, un nuevo lenguaje de Mozilla
Mozilla anuncia un nuevo motor de renderizado de paginas Servo, lo que me llamo la atención es que servo va ser escrito en un lenguaje nuevo llamado Rust.
Rust a simple vista se ve como c++, pero es bastante más evolucionado. Veamos un poco de código:
use core::rand::RngUtil;
fn main() {
for ["Alice", "Bob", "Carol"].each |&name| {
do spawn {
let v = rand::Rng().shuffle([1, 2, 3]);
for v.each |&num| {
print(fmt!("%s says: '%d'\n", name, num))
}
}
}
}
Que nos ofrece este lenguaje:
- Inferencia de tipos
- Tareas concurrentes seguras
- Closures
- Pattern matching
- Polimorfismo.
Vamos a ver como va evolucionando su uso, por ahora voy mirando su documentación:
http://www.rust-lang.org/
http://doc.rust-lang.org/doc/tutorial.html
http://doc.rust-lang.org/doc/rust.html
Preguntas y respuestas de mi base datos Oracle
Siempre tenemos que mirar nuestra base para cuidar que su crecimiento no sea abrupto, lo peor que nos puede pasar es que las entidades más grandes, sean las que más se consultan y esto suele pasar seguido. Para llevar un control respondamos 3 preguntas:
Cual son los 40 objetos más grande de mi base de datos?
select * from (
select owner, segment_name, bytes/1024/1024 Size_Mb from dba_segments order by
bytes/1024/1024 DESC )
where rownum <= 40
Cual son las 40 tablas más grande de mi base de datos?
select *
from (select segment_name "Table Name",
round(sum(bytes)/1024/1024, 2) "Size MB"
from dba_extents
where segment_type = 'TABLE'
group by segment_name
order by 2 desc)
Cuales son los objetos más accedidos?
SELECT ROWNUM AS RANK, Seg_Lio.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'LIO' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'logical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seg_Lio
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_r.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Reads' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_r
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_w.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Writes' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical writes'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_w
WHERE ROWNUM <= 15
Con el resultado de estas consultas podemos tomar decisiones antes que la base se vuelva lenta.
Cual son los 40 objetos más grande de mi base de datos?
select * from (
select owner, segment_name, bytes/1024/1024 Size_Mb from dba_segments order by
bytes/1024/1024 DESC )
where rownum <= 40
Cual son las 40 tablas más grande de mi base de datos?
select *
from (select segment_name "Table Name",
round(sum(bytes)/1024/1024, 2) "Size MB"
from dba_extents
where segment_type = 'TABLE'
group by segment_name
order by 2 desc)
Cuales son los objetos más accedidos?
SELECT ROWNUM AS RANK, Seg_Lio.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'LIO' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'logical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seg_Lio
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_r.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Reads' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical reads'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_r
WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_w.*
FROM ( SELECT St.Owner,
St.Obj#,
St.Object_Type,
St.Object_Name,
St.VALUE,
'PIO Writes' AS Unit
FROM V$segment_Statistics St
WHERE St.Statistic_Name = 'physical writes'
AND St.Owner='TN32_UAT'
ORDER BY St.VALUE DESC) Seq_Pio_w
WHERE ROWNUM <= 15
Con el resultado de estas consultas podemos tomar decisiones antes que la base se vuelva lenta.
Aprender Python con Pythonmonk
De los creadores de rubymonk llega pythonmonk, es un manual online para aprender python. Una gran idea , y si no hicieron el de ruby se los aconsejo.
A ponerse a estudiar pequeños saltamontes.
Dejo link:
http://pythonmonk.com
jueves, 4 de abril de 2013
Mi nuevo linux Fedora!!
Por cuestiones de la vida me he movido a fedora, la verdad es que extraño un poco a Mint pero hay que seguir adelante en el camino me encontré con Yum extender, que me parece que va ser mi mejor amigo. Me encontré con gnome-shell y me divorcie a los pocos días, y ahora estoy conviviendo con KDE que me esta tratando bien.
Dejo una foto de mi escritorio:
Dejo links:
http://gomix.fedorapeople.org/software-management-guide/f18/html-single/
Dejo una foto de mi escritorio:
Dejo links:
http://gomix.fedorapeople.org/software-management-guide/f18/html-single/
martes, 2 de abril de 2013
Libros de programación gratuitos
Un montón de libros sobre programación y lenguajes lo encontraran en el siguiente link:
http://www.onlineprogrammingbooks.com/
http://www.onlineprogrammingbooks.com/
Getting Started with DB2 Express-C
DB2 Universal Database es el sistema de administración de bases de datos que brinda una plataforma de base de datos flexible y efectiva en costos para construir aplicaciones robustas de negocios on demand.
Esto es lo que nos indica IBM en su pagina, tambien existe una versión express de la base de datos llamada DB2 Express-C, esta buena, lo que quiero compartir es un libro gratuito sobre esta base.
Dejo link:
http://www.ibm.com/developerworks/wikis/display/DB2/FREE+Book-+Getting+Started+with+DB2+Express-C
lunes, 1 de abril de 2013
Visualizador de código Python online
Los que están aprendiendo a programar y los que estamos aprendiendo python, es de mucha ayuda ver que esta sucediendo cuando corremos el código. Les dejo un vizualisador en el que se puede ver los valores de las variables y como ejecuta el programa linea por linea.
Dejo una pantalla de ejemplo:
Dejo link:
http://pythontutor.com/visualize.html
Dejo una pantalla de ejemplo:
Dejo link:
http://pythontutor.com/visualize.html
doctest, Usando la documentación para testear.
Me encontré con este framework de python y la verdad que quede sorprendido, su facilidad de uso y pragmatismo. La idea es que cuando realizamos funciones debemos documentarlas, que no mejor que luego de documentarla dejar un ejemplo de como funciona y el resultado que devuelve la función. Bueno la idea de este framework es utilizar esta documentación para testear nuestra función.
Veamos un ejemplo:
"""
This is the "example" module.
The example module supplies one function, factorial(). For example,
>>> factorial(5)
120
"""
def factorial(n):
"""Return the factorial of n, an exact integer >= 0.
>>> [factorial(n) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> factorial(30)
265252859812191058636308480000000
>>> factorial(-1)
Traceback (most recent call last):
...
ValueError: n must be >= 0
Factorials of floats are OK, but the float must be an exact integer:
>>> factorial(30.1)
Traceback (most recent call last):
...
ValueError: n must be exact integer
>>> factorial(30.0)
265252859812191058636308480000000
It must also not be ridiculously large:
>>> factorial(1e100)
Traceback (most recent call last):
...
OverflowError: n too large
"""
import math
if not n >= 0:
raise ValueError("n must be >= 0")
if math.floor(n) != n:
raise ValueError("n must be exact integer")
if n+1 == n: # catch a value like 1e300
raise OverflowError("n too large")
result = 1
factor = 2
while factor <= n:
result *= factor
factor += 1
return result
if __name__ == "__main__":
import doctest
doctest.testmod()
Como vemos en el ejemplo se creo una funcion factorial y se la documento con ejemplos de uso, luego al final de la función se indico que si se corre este modulo como programa principal, se corran los test. Por lo tanto si hacemos:python example.py -v
La "-v" es para que doctest devuelva una salida. Con la ejecución de esta linea de código se correrán los ejemplos de la documentación devolviendo los siguientes valores:
Trying:
factorial(5)
Expecting:
120
ok
Trying:
[factorial(n) for n in range(6)]
Expecting:
[1, 1, 2, 6, 24, 120]
ok
Es genial!! Me parece una gran idea, que mal que no lo haya conocido antes. Existe un port para java que se llama doctestj; tendremos que probarlo.
Dejo link:
http://docs.python.org/3.3/library/doctest.html
https://code.google.com/p/doctestj/
sábado, 30 de marzo de 2013
Taller gratuito de introducción a Python
Este taller gratuito te servirá para dar los primeros pasos en Python, un lenguaje de programación multiplataforma y de propósito general que tiene diversas particularidades que lo hacen especial. Python es interpretado y está pensado para que tenga una sintaxis ligera y limpia, lo que lo hace sencillo de aprender.
Así comienza a describir el curso gratuito realizado por escuela It. Vamos a tener que inscribirnos, ojo comienza el 1 de abril.
Dejo link:
http://escuela.it/cursos/taller-python/
Así comienza a describir el curso gratuito realizado por escuela It. Vamos a tener que inscribirnos, ojo comienza el 1 de abril.
Dejo link:
http://escuela.it/cursos/taller-python/
Suscribirse a:
Entradas (Atom)





























