Translate

sábado, 8 de septiembre de 2012

Cloud 9 una IDE en la nube


Cloud 9 es una IDE online para Javascript y Node.js además de HTML, CSS, PHP, Java, Ruby y  otros 23 lenguajes. Lo que permite es programar en cualquier lugar donde haya internet y acceder a servicios en la nube más fácilmente. Es una interesante propuesta, existe una versión free y otra de pago que vale 12 dolares al mes. 

Dejo un video:



Dejo link:
https://c9.io/

Crea Aplicaciones Desktop en HTML5, CSS3 y JavaScript

Interesante framework que nos permite crear aplicaciones multiplataforma con HTML 5, CSS 3 y Javascript. La verdad todavía no lo he probado pero pinta lindo.

Dejo link:
http://www.tidesdk.org/

viernes, 7 de septiembre de 2012

SolusOS, una distribución Linux que brinda elegancia y comodidad.

SolusOS esta ganando mucho mercado, porque? Por su interfaz, SolusOS trabaja sobre Gnome 3 pero brinda las mismas comodidades que Gnome 2. Con la llegada de Gnome shell; Gnome perdio algunos adictos, los cuales eligieron este gran sistema operativo basado en Debian.



Dejo link:
http://solusos.com/

jueves, 6 de septiembre de 2012

Entrevista con Angel "Java" Lopez

Muy interesante la entrevista a Angel Java Lopez; dejo el link:

http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html

JBoss Developer Framework


Recientemente Jboss ha liberado JBoss Developer Framework o JDF para los amigos.  El Framework en realidad es un centro de documentación central para todas las tecnologías relacionadas con JBoss y JBoss AS. Este esfuerzo de consolidación permite a los desarrolladores centrarse en un recurso único de documentos en lugar de tomar varias guías individuales de las diferentes tecnologías de JBoss (por ejemplo, una guía de Hibernate y otra para Seam).

JDF incluye más de 50 quickstarts  que son proyectos Maven que se generan con archetypes. Lo interesante es que la mayoría de los quickstarts generan los proyectos con varias capas,  Estos pueden servir ya sea como tutoriales o como la base para las aplicaciones más complicadas. Algunas de las tecnologías que incluyen: EJB, JAX-RS, JPA, JSF, CDI, HTML5, JTA, Apache Wicket...

Dejo links:
http://in.relation.to/Bloggers/AnnouncingJdfJBossDeveloperFramework
http://www.jboss.org/jdf/news/2012/06/05/welcome/

miércoles, 5 de septiembre de 2012

Queres aprender Neo4j?

Si queres aprender sobre la base orientada a grafos más popular te dejo unos link del sitio oficial:

http://neo4j.org/learn/
http://neo4j.org/resources/

Oracle habla de BigData

Oracle nos regala esta revista virtual donde habla de BigData.

Dejo link:
http://oracle.com.edgesuite.net/ebook/bigdata/

select * from Dual en Oracle



En Oracle existe una tabla llamada DUAL, normalmente se usa para referenciar consultas que no tienen una tabla sino que son resultado de una función; por ejemplo:

Select SYSDATE from dual;

De esta forma podemos saber la fecha del servidor. Pero que pasa si queremos saber que tiene dual podemos hacer lo siguiente:

desc dual


Name                    Null?    Type
 ----------------------- -------- ----------------
 DUMMY                            VARCHAR2(1)

Claro en realidad DUAL es una table con un solo registro, de esta forma siempre nos devuelve un valor las consultas a dual: Vamoa a hacer un select * from Dual para ver que nos devuelve:

select * from Dual

Y nos retornara una sola fila con un único valor X para la tabla Dual. Supongamos que migramos de oracle a otra base y hacemos uso de la tabla dual o estamos acostumbrados a usarla. Por ejemplo en Postgres no existe esta tabla solo debemos hacer el select si From:


SELECT SYSDATE
o como deberia ser en PostgreSQL
SELECT now()
o
SELECT current_date


Otra solución es crear la tabla DUAL de la siguiente manera:

 CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)

Luego insertamos el único valor: 

INSERT INTO DUAL (DUMMY)
VALUES ('X')

Eso es todo amiguitos...

Dejo link:

martes, 4 de septiembre de 2012

¡Aprende Haskell por el bien de todos!



Bienvenido a ¡Aprende Haskell por el bien de todos! Si estás leyendo esto probablemente quieras aprender Haskell. Pues bien, has venido al sitio adecuado, pero primero vamos a hablar un poco sobre esta guía.

Decidí escribir esta guía porque quería arraigar mi propio conocimiento de Haskell y porque pensé que podía ayudar a la gente que empezaba con Haskell. Existen bastantes manuales y guías sobre Haskell por la red. Cuando empecé con Haskell no lo leí un único documento. La forma en la que aprendí Haskell fue leyendo varios artículos y guías, porque explicaban el mismo concepto de diferentes formas. Así, yendo a través de varios documentos, fui capaz de juntar todas las piezas y entonces todo encajó. De modo que, esto es un intento más de añadir otro útil documento para aprender Haskell de forma que tengas más oportunidades de encontrar uno que te guste.

Así comienza el sitio que tiene como objetivo enseñarnos haskell, es muy recomendable.

Dejo el link:
http://aprendehaskell.es/

Yahoo! Hadoop Tutorial


Un excelente tutorial de hadoop hecho por la gente de yahoo!

Dejo link:
http://developer.yahoo.com/hadoop/tutorial/

domingo, 2 de septiembre de 2012

Como instalar oracle 11g en fedora y no morir en el intento


Pruebas muy difíciles me ha dado la vida pero nada tan difícil como instalar Oracle. Es imposible!! Vamos a intentar instalar oracle en fedora 17 64 bits. Para esto vamos a bajar los instaladores de el siguiente link:

 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

Hay que registrarse y deben compran la licencia.

Luego de bajar los zip hay que descomprimirlo:

unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip

Si todo salio bien se creo una carpeta llamada database
Ahora tenemos que modificar el archivo /etc/hosts porque tiene que tener todo el nombre del servidor. Para esto nos logeamos como root. El archivo debe quedar con la siguiente forma:
<IP-address>  <fully-qualified-machine-name>  <machine-name>

Ahora vamos a agregar unos parametros a /etc/sysctl.conf (como root)

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
Ahora corremos el siguiente comando para aplicar los nuevos parametros:
/sbin/sysctl -p

Ahora debemos agregar la siguientes lineas en el "/etc/security/limits.conf"
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536

Y ahora debemos modificar "/etc/pam.d/login" y agregar la siguiente linea si no existe:

session    required     pam_limits.so

Despues tenemos que desactivar el firewall eso lo podemos hacer con la aplicaci{on propia para firewall

Ahora a desactivar SELINUX para esto editamos "/etc/selinux/config" y editamos la linea

SELINUX y ponemos:
SELINUX=disabled

Ahora a Instalar librerias:

yum install binutils
yum install compat-libstdc++-33
yum install compat-libstdc++-33.i686
yum install elfutils-libelf
yum install elfutils-libelf-devel
yum install gcc
yum install gcc-c++
yum install glibc
yum install glibc.i686
yum install glibc-common
yum install glibc-devel
yum install glibc-devel.i686
yum install glibc-headers
yum install ksh
yum install libaio
yum install libaio.i686
yum install libaio-devel
yum install libaio-devel.i686
yum install libgcc
yum install libgcc.i686
yum install libstdc++
yum install libstdc++.i686
yum install libstdc++-devel
yum install make
yum install numactl-devel
yum install sysstat
yum install unixODBC
yum install unixODBC.i686
yum install unixODBC-devel
yum install unixODBC-devel.i686

 Ahora debemos crear los siguientes grupos:

groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin

useradd -g oinstall -G dba,oper,asmadmin oracle
passwd oracle

Ahora creamos el directorio donde oracle va a ser instalado:

mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

Vamos a editar el archivo  "/etc/redhat-release" y simulamos que es un red-hat borrando lo que tiene y escribiendo:

redhat release 5

por ultimo tenemos que ir al .bash_profile logeados como usuario oracle y agregamos

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=fedora14.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB11G; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=DB11G; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

Ahora salimos de la session y nos logeamos como oracle y ejecutamos
./runInstaller y seguimos el wizard...

















Y tuvimos éxito!!

Viste que fácil que era...

Dejo link:


jueves, 30 de agosto de 2012

Descent|OS 3.0

Descent OS wallpaper submission 

Que onda si mezclamos el sistema operativo más usado con el escritorio más elegante? Obtenemos Descent|OS que es un linux basado en Ubuntu pero con escritorio MATE, para el que no sabe MATE es un fork de Gnome 2 muy elegante y fácil de usar.

La misión del proyecto es proporcionar un entorno de escritorio intuitivo y  moderno.

Dejo link:
http://www.descentos.org/




miércoles, 29 de agosto de 2012

Pattern Matching


Se acuerdan cuando iban al jardín de infantes que había una actividad en la cual de una fila de patitos había que encontrar el que miraba en la dirección contraria. Bueno en programación Pattern Matching no tiene nada que ver con los patitos.

Pattern Matching nace del paradigma funcional aunque hoy en día lenguaje multiparadigma lo implementan como Scala. Pattern Matching permite definir funciones por medio de macheo de parámetros y resultados. Veamos un ejemplo en Haskell de definición de factorial:

factorial 0 = 1
factorial n = n * factorial (n - 1)

A primera vista parece recursividad, pero esto viene del paradigma funcional por lo tanto no existe secuencia. Para ver la diferencia entre la forma de resolver el problema voy a resolver lo mismo en C++

int factorial(int n) {
      if (n == 0) {
             return 1;
      } else {
            return factorial(n-1);
      }
}

Si comparamos nos ahorramos 5 lineas; pero el tema no es solo escribir menos; sino que cual les parece más legible? cual es más simple?

Muchos lenguajes implementan pattern matching, al venir del paradigma funcional normalmente los lenguajes funcionales como Erlang; vamos a hacer la función de factorial en Erlang.

fac(0) -> 1;
fac(N) when N > 0, is_integer(N) -> N * fac(N-1).

Se puede ver que en este caso se indica que debe ser positivo el numero; si se ingresa un valor negativo lanza un error. Ojo esta restricciones también la podíamos hacer en Haskell.

Factorial con ML:

fun fac 0 = 1
     | fac n = n * fac (n - 1)

Otros lenguajes multiparadigma nos permiten jugar con Patter Matching como Scala:

def fact(n: Int): Int = n match {
    case 0 => 1
    case n => n * fact(n - 1)
  }

En este caso se define fact que devolverá un entero, y que el parámetro n debe matchear con 0 y devuelve 1 o con cualquier otro valor y devolverá n * fact(n - 1).

Por ejemplo Kotlin permite hacer pattern Maching por el tipo de la siguiente manera:

when (x) {
  is Int -> print(x)
  is List<Int> -> print(x.sum())
  !is Number -> print("Not even a number")
  else -> print("can't do anything")
}

Donde x es una variable que llega de parámetro.

Por ejemplo con F# una función de figonacci nos queda de la siguiente manera:

let rec fib n =
    match n with
    | 0 -> 0
    | 1 -> 1
    | _ -> fib (n - 1) + fib (n - 2)

Si lo comparamos con Haskell:

fib[0|1]:=1
fib[n_]:= fib[n-1] + fib[n-2]

En Haskell podemos utilizar el | para decir esto o aquello y el _ para decir cualquier cosa que venga.

Las implementaciones son muchas pero la idea en general es la misma; Pattern Matching permite mayor legibilidad y comodidad a programar y va ganando terreno entre los lenguajes más modernos.



sábado, 25 de agosto de 2012

Performance en Postgres





Al parecer cuando instalamos una base de datos Postgres; se instala una base de datos de juguete; es decir que se debe trabajar mucho para dejarla a punto para producción. Los parametros por defecto son muy inferiores a lo que puede soportar realmente Postgres.

El primer paso para entender como mejorar la performance de su base de datos es entender el ciclo de vida de una query:
  • La transmisión de la consulta a la base de datos back-end
  • Análisis de cadena de consulta
  • Planificación de consulta para optimizar la recuperación de datos
  • Recuperación de datos de hardware
  • Transmisión de resultados a cliente
Primero paso la transmisión de la consulta a la base de dato en este caso no se puede hacer mucho; solo en el caso de que la query sea muy grande se puede crear un store procedure para mejorar la trasmición de esta forma no viaja la query completa sino el nombre del store.

El segundo paso es el analisis de cadena que tambien se puede mejorar haciendo un store procedure.

La planificación de la consulta es donde realmente comienza PostgreSQL hacer algún trabajo. En esta etapa se comprueba si la consulta está bien para la versión de PostgreSQL. También se analiza el SQL para determinar cuál es la forma más eficaz de recuperar sus datos. ¿Debemos utilizar un índice? y si es así ¿cuál? Estas son algunas de las decisiones de la base de datos hace que en este punto del proceso. Este paso puede ser eliminado si la consulta se prepara previamente.

Ahora que PostgreSQL tiene un plan de lo que cree que es la mejor manera de recuperar los datos, es el momento de ejecutar el plan. Si bien hay algunas opciones de optimización que ayudarían, este paso se optimiza principalmente por la configuración de hardware.

Y, finalmente, el último paso es la transmisión de los resultados al cliente. Si bien no hay ninguna opción de optimización real de este paso, se debe tener en cuenta que todos los datos que están estrayendo desde el disco y se envía a través del cable al cliente. Reducir al mínimo el número de filas y columnas para sólo aquello que es necesario a menudo puede aumentar el rendimiento.

Vamos a ver los parametros que hay que tocar para mejorar la performance de nuestra base. Se pueden cambiar los parametros de postgres de diferente formas pero la más facil es modificar el archivo postgresql.conf ejecutando SHOW config_file  podremos saber donde se encuentra este archivo.

max_connections = <num> esta opción establece el número máximo de backend de base de datos para tener en un momento dado. Utilice esta función para asegurarse que no tenga tanto clientes y puedan matar la base.

shared_buffers = <num> La edición de esta opción es la forma más sencilla de mejorar el rendimiento de su servidor de base de datos. El valor por defecto es bastante bajo para la mayoría del hardware moderno. General se dice que esto se debe establecer en aproximadamente el 25% de la memoria RAM disponible en el sistema. Como la mayoría de las opciones que se describen aquí, simplemente tendrá que probar en diferentes niveles (tanto hacia arriba como hacia abajo) y ver lo bien que funciona en su sistema particular.

effective_cache_size = <num> Este valor es la cache de postgres. Esto se debe establecer la cantidad de memoria asignada a shared_buffers más la cantidad de caché del sistema operativo disponible. A menudo esto es más de 50% de la memoria total del sistema.

work_mem = <num> Esta opción se utiliza para controlar la cantidad de memoria utilizando en las operaciones de ordenación y tablas hash. Si bien es posible que necesite aumentar la cantidad de memoria se debe tener cuidado de no aumentarlo demasiado.

max_fsm_pages = <num> Esta opción ayuda a controlar el mapa de espacio libre. Cuando algo se elimina de una tabla no se elimina del disco inmediatamente, simplemente se marca como "libre" en el mapa de espacio libre. El espacio se puede volver a utilizar para cualquier inserción en la tabla. Si su configuración tiene una alta tasa de eliminaciones e inserta puede ser necesario aumento de este valor.

commit_delay = <num> y commit_siblings = <num> Estas opciones se utilizan en conjunto para ayudar a mejorar el rendimiento de escritura múltiples transacciones que están comitiando al mismo tiempo. Si hay una serie de backends commit_siblings activos en el instante en que la transacción se comitea, el servidor espera microsegundos commit_delay para tratar de confirmar las transacciones a la vez.

random_page_cost = <num>controla la forma en PostgreSQL considera las lecturas no secuenciales. Un valor más alto hace que sea más probable que un recorrido secuencial.

Dejo link:
http://wiki.postgresql.org/wiki/Performance_Optimization

Rosa una distro linux que se las trae...



 ROSA Marathon 2012 sistema operativo es una distribución de Linux con ampliación de los 5 años de soporte técnico con un enfoque en los clientes empresariales.

El producto incluye un sistema de escritorio hasta al día de funcionamiento con una interfaz fácil de usar y un conjunto de aplicaciones de software cuidadosamente seleccionados por nuestros desarrolladores. Después de instalar ROSA usuario de Escritorio consigue listo lugar de trabajo sin necesidad de instalar suite ofimática, editor gráfico, el software anti-virus, reproductores multimedia, los clientes de ICQ tipo, diccionarios y software básico como una adición.


ROSA Marathon 2012 estará disponible en dos ediciones: Free (incluye software libre solamente) y Extended Edition (con componentes que no son libres y software propietario, como codecs multimedia), permitiendo a los usuarios seguir ya sea el espíritu del Software Libre, o llegar a tanta funcionalidad como sea posible "fuera de la caja".

ROSA Marathon 2012 sistema operativo es el primer producto de la empresa ROSA creados utilizando el software de desarrollo propio y entorno de compilación - ROSA ABF - que nos da un control completo de la base de paquetes y herramientas de desarrollo, garantizando la independencia tecnológica y la alta calidad de la distribución. Esto también permite a la empresa ROSA garantía de 5 años de soporte técnico que implica mucho tiempo las actualizaciones de software de seguridad, correcciones de errores para los componentes del sistema y las actualizaciones de software de aplicación a las nuevas versiones reconocidas como estable.


ROSA Marathon 2012 está disponible en los principales idiomas europeos: Inglés, francés, alemán, italiano, portugués, rumano, ruso, español, ucraniano.

Dejo link:

http://www.rosalab.com/