lunes, 30 de mayo de 2011

Linus Torvalds anunció sin más que comienzan los trabajos para publicar la versión 3 del kernel Linux. De hecho, publicó la versión 3.0.0-rc1, o primera versión candidata. Recordemos que cada versión de Linux se distingue por tres números separados por un punto. Como sea, se trata de la versión 3, y de ella colgarán varias “ramas” de código.

¿Qué mejoras hay en la versión 3.0.0-rc1? Salvo agregar soporte para Microsoft Kinect, mejorar el de algunas tarjetas gráficas y el de procesadores Intel, no encontraremos ninguna que pueda ser considerada revolucionaria, ninguna que marque un antes y un después para Linux.

La excusa de Linus para arrancar la versión 3 es sencilla:

Llevamos muchos años publicando versiones en función del tiempo, no de las características. Si quieren una excusa para la renumeración, deberían ver que ya han pasado 20 años.

Sabemos que han pasado muchos años desde la publicación de la rama 2.6.x del kernel Linux —la versión 2 fue publicada en 1996, por decir algo—, con avances gigantescos en términos de soporte de nuevas arquitecturas, funcionalidades, sistemas de archivos, mejoras de desempeño en general, etcétera. Esto es loable pero no está exento de críticas, entre otras, que el kernel está pasado de peso.

Inicialmente Linus Torvalds iniciaría la rama 2.8.x, pero al final del día optó por comenzar 3.0. Desde mi punto de vista, esta es una decisión inteligente pues en sí misma ofrece la idea de un nuevo comienzo, el de uno que avanza hacia la tercera década de Linux. Es muy probable que Linux termine más delgado y limpio en el proceso.

Con la nueva versión, es probable también que aumenten las energías concentradas alrededor del kernel Linux: nuevos programadores, un relevo generacional, nuevas ideas, interés renovado. Desde este punto de vista, la nueva versión de Linux, así como sucedió con HTML5, tiene lo suyo de mercadotécnico.

¡Linux 3 a la vista!

domingo, 22 de mayo de 2011


Pues tal y como anunciaron en Mozilla dentro de poco tendremos la versión final de Firefox 5, cuya versión beta está disponible desde hace unas horas. De este modo vemos como el equipo de desarrolladores está poniendo en ejecución bastante bien los planes de Mozilla para lanzar nuevas versiones cada pocas semanas.

La lista de errores solucionados en esta versión es muy extensa y además se han añadido una serie de mejoras entre las que se encuentran una optimización del rendimiento y del uso de la memoria, mejor soporte para Javascript, cambio de los diferentes canales de desarrollo o una serie de mejoras en la interfaz de usuario.

Como siempre, puedes descargar la beta desde el sitio de Mozilla.

La versión final de Firefox 5 está previsto que se lance para el día 21 de junio, prácticamente dentro de un mes. En este tiempo se esperan poder solucionar más errores que se vayan encontrando y continuar mejorando el navegador de cara a su lanzamiento final.

Si por el contrario no puedes esperar y quieres probar que cosas está preparando Mozilla para futuras versiones te recuerdo que puedes elegir usar el canal nightly, que es menos estable que el canal beta y Aurora pero tiene ya algunas cosas nuevas, centradas en el desarrollo de la alpha 1 de Firefox 6.

La beta de Firefox 5 ya está disponible

martes, 17 de mayo de 2011



Quizás el objetivo más importante al diseñar una aplicación web sea que haga correctamente lo que tiene que hacer en el menor tiempo posible. Esto se logra optimizando el proceso completo que implementa la aplicación; al hacer esta tarea, no sólo se mejora la experiencia del usuario final, sino que se optimizan los recursos de procesamiento utilizados.

Una de las áreas fundamentales para lograr tal objetivo es trabajar minuciosamente en el diseño de la base de datos y en la interacción de ésta con la aplicación.

El uso de bases de datos siempre producirá un enlentecimiento en las aplicaciones web (aunque esta caída en el rendimiento es en favor de los beneficios que se obtienen al utilizar una base de datos). De esta manera, siendo conscientes de la caída de rendimiento intrínseca que produce la conexión y las consultas a la base de datos, asegurémosnos que esta caída de performance sea la menor posible. En este artículo se analizarán varios factores a tener en cuenta al desarrollar aplicaciones ASP con bases de datos Access y SQL Server.

Del lado de la base de datos hay cuatro ítems de mayor importancia. Estos cuatro ítems por sí sólos usualmente hacen la diferencia entre una aplicación de base de datos rápida y otra extremadamente lenta. Cometiendo errores aquí, un proceso que usualmente toma 1 segundo en completarse puede tomar minutos o incluso horas!

(1) Seleccionar el tipo de base de datos apropiado

Seleccione el tipo de base de datos apropiado desde el principio. Con el paso del tiempo muchos sitios web comienzan a volverse populares y a aumentar drásticamente la cantidad de visitas. Después de todo ese es el objetivo de todos los que tenemos un sitio web.

Si posee un sitio web popular o proyecta que va a serlo, planee esto desde el principio o esté atento a realizar las actualizaciones necesarias cuando así lo requiera el caudal de actividad.

Mucha gente utiliza ASP + Microsoft Access. ASP y Access son estupendos para desarrollar rápidamente una aplicación web sin la necesidad de ser un super-programador.

Durante los primeros meses, mientras acceden unos pocos visitantes por día al sitio web, todo funciona bárbaro. Access está diseñado para manejar hasta 256 lecturas y 1 escritura a la vez. Si lee y escribe en su base de datos Access con cientos de personas visitando su sitio web, los accesos a la base de datos comenzarán a competir entre sí. Cuando esto ocurre, Access y ASP toman y bloquean gran cantidad de memoria y recursos del servidor, generando una bola de nieve que termina por hacerlo fallar y detenerlo.

Considere el uso de SQL Server, el cual está diseñado para manejar miles de conexiones concurrentes. Access es una pequeña base de datos de oficina que funciona muy bien para sitios web pequeños con no más de 200 sesiones por día.

(2) Diseñar correctamente la estructura de la base de base de datos

Diseñe su base de datos apropiadamente. Una base de datos normalizada es usualmente un buen comienzo. Cree índices para las columnas que son frecuentemente utilizadas como criterio de selección (WHERE ...) u ordenamiento (ORDER BY ...) en las consultas.

Desde el siguiente enlace podrá acceder a un curso gratuito en castellano que desarrolla la teoría de las bases de datos relacionales, como lo son Access y SQL Server:


(3) Optimizar las consultas SQL

Optimice sus consultas SQL. Especificar la lista de columnas, en contraposición a SELECT *, es una mejor práctica que tiene un impacto notable en el rendimiento. Pero construir una consulta que devuelva sólo las filas necesarias y haga un buen uso de los índices existentes hará una gran diferencia.

Por otro lado, deje que la base de datos haga el trabajo. Construya consultas SQL (o procedimientos almacenados en SQL Server) que devuelvan los datos que necesita directamente desde la base de datos en contraposición a la ejecución de complejas consultas SQL a través de la interfaz de ADO.


(4) No almacenar objetos binarios de gran tamaño

No almacene objetos binarios de gran tamaño (como imágenes) en bases de datos a menos que sea irremediablemente necesario, especialmente si utiliza bases de datos Access.

Al recuperar estos objetos a través de recordsets, los mismos son almacenados en memoria ocupando gran cantidad de espacio. En lugar de almacenar imágenes o archivos en las bases de datos, almacene la URL de la imagen/archivo en un campo de texto así puede luego referenciarlo en las páginas de la aplicación.


(5) Las cadenas de conexión

Utilice cadenas de conexión DSN-Less siempre que sea posible. Utilice ADO y OLEDB, no DAO u ODBC. Si necesita utilizar sí o sí un ODBC DSN, utilice un DSN de Sistema (System DNS).

También use exactamente la misma cadena de conexión en toda la aplicación con el objetivo de aprovechar al máximo el uso de agrupación de las conexiones (pooling).

En el caso de utilizar bases de datos SQL Server utilice la directiva Network Library=DBMSSOCN en la cadena de conexión para forzar el uso de TCP/IP en la conexión a la base de datos.

Desde el siguiente enlace podrá obtener una lista de las cadenas de conexión ADO de prácticamente todos los tipos de bases de datos:

http://www.connectionstrings.com


(6) Abrir/Cerrar conexiones en los momentos apropiados

Abra las conexiones justo antes de utilizarlas y ciérrelas tan pronto como deje de necesitarlas. El modo de trabajo debe ser el siguiente: Conectar - Obtener/Guardar Datos - Desconectar. Siempre cierre los objetos de ADO y asígnelos a "nothing". Por ejemplo:


<%
Dim Conexion, RS
Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.ConnectionString = [Cadena de Conexión ADO]
Conexion.Open

Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Conexion
RS.Source = "SELECT ..."
RS.Open

'...
'Utilizar los datos existentes en el recordset RS
'...

RS.Close
Set RS = Nothing
Conexion.Close
Set Conexion = Nothing
%>



(7) Evitar el uso del archivo "adovbs.inc"

Evite el uso del archivo "adovbs.inc". Si necesariamente debe utilizar constantes para las propiedades, defina el subconjunto que necesite. Este archivo define muchísimas constantes, la mayoría de las cuales seguramente nunca utilizará (pero serán cargadas en memoria...).


(8) No almacenar conexiones y recordsets en objetos Session o Application

Muchos programadores se ven tentados a almacenar conexiones y recordsets en objetos Session/Application, así no deben crear instancias en cada página ASP.

En tales casos asumen que esto es más eficiente, pero no lo es. Este es uno de los peores errores que se pueden cometer.

Siempre cree y destruya los objetos de ADO en la misma página. Nunca los mantenga entre sesiones.

Detalles técnicos desde (en inglés):

http://www.learnasp.com/advice/dbsessionapp.asp


(9) Extraer de la base de datos sólo la información necesaria

Sólo extraiga de la base de datos la información que necesita; evite traer columnas innecesarias. Por ejemplo, si posee una tabla con los datos personales de los estudiantes de un colegio y necesita mostrar una lista con los nombres de los mismos no utilice la siguiente consulta:


SELECT * FROM estudiantes


Será más rápida y consumirá menos recursos una consulta como la siguiente:


SELECT Apellido, Nombre FROM estudiantes




(10) Utilizar cursores y modos de bloqueo apropiados

Utilice cursores y modos de bloqueo apropiados. Si todo lo que necesita es leer datos de un recordset y mostrarlo en la pantalla (creando una tabla HTML por ejemplo), entonces utilice la configuración por defecto (forward-only, read-only). Comprenda y experimente con las diferentes combinaciones para analizar cómo varía el rendimiento del acceso a datos.

Tipos de cursores para la propiedad RecordSet.CursorType

Tipo

Valor

Descripción

adOpenForwardOnly

0

Cursor por defecto; permite recorrer el recordset en forma secuencial.

adOpenKeySet

1

Permite moverse hacia delante y atrás en el recordset. Permite observar las modificaciones en los datos, pero no si existen ingresos de nuevos registros.

adOpenDynamic

2

Permite moverse en cualquier sentido, viendo cualquier ingreso, modificación, eliminación de datos en el recordset.

adOpenStatic

3

Permite moverse en cualquier sentido, pero no se verá ningún cambio ocurrido en la tabla.


Tipos de bloqueo para la propiedad RecordSet.LockType

Tipo

Valor

Descripción

adLockReadOnly

1

Es el bloqueo por defecto y no permite modificar los registros de la tabla.

adLockPessimistic

2

Una vez que la tabla es abierta, la misma queda bloqueada para los demás usuarios.

adLockOptimistic

3

La tabla sólo será bloqueada a los demás usuarios mientras se ejecute una operación de actualización (update). De esta forma la tabla se bloqueará durante menos tiempo que con el método anterior.

adBatchOptimistic

4

Los registros serán actualizados por lotes (batch).



(11) Utilizar variables objeto

Una forma garantizada de mejorar el rendimiento mientras se recorre un recordset es utilizar variables objeto apuntando a miembros de las colecciones. Por ejemplo, considere el siguiente recorrido a través del recordset mostrando los campos Nombre y Apellido:


While Not RS.EOF
Response.Write (RS("Nombre") & " " & RS("Apellido") & "
")
RS.MoveNext
WEnd


Puede hacer que este código se ejecute más rápido reemplazándolo por el siguiente:


Set Nombre = RS("Nombre")
Set Apellido = RS("Apellido")

While Not RS.EOF
Response.Write (Nombre & " " & Apellido & "
")
RS.MoveNext
WEnd


En este último caso se utilizan dos variables asignadas a campos particulares de la colección Fields del recordset (recuerde que la colección Fields es la colección por defecto). Esta forma de trabajo insume menos recursos y funciona más rápido.


(12) La propiedad CacheSize del objeto RecordSet

El tamaño del caché de un recordset es el número de filas que ADO lee a la vez desde la base de datos. Por defecto este valor es 1. Esto significa que, cuando se utilizan cursores, cada vez que se mueve de un registro a otro, el mismo debe ser traído desde la base de datos.

Aumentando el tamaño del caché a 10, por ejemplo, se colocarán en el buffer de ADO de a 10 registros a la vez. Acceder un registro que se encuentra dentro del caché de ADO es más rápido que traerlo desde la base de datos.

Una vez abierto el recodset, puede modificar el tamaño del caché de ADO utilizando la propiedad CacheSize:


RS.CacheSize = 10


No hay un tamaño ideal para asignarle al caché, ya que esto dependerá de la tarea a realizar; pero incrementando su tamaño por encima de 1 invariablemente mejorará el rendimiento.


(13) Una conexión por página

Establecer una conexión a una base de datos consume tiempo. El siguiente es un ejemplo de código mal realizado, ya que abre conexiones a una misma base de datos más de una vez en una misma página:


<%
Dim Conexion, RS, ID

Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexión]"
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.Open "SELECT ID FROM tabla1 ORDER BY id DESC", Conexion
ID = RS("id")
RS.Close
Set RS = Nothing
Conexion.Close
Set Conexion = Nothing

Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexión]"
Conexion.Execute "INSERT INTO tabla1 (id) VALUES(" & id + 1 & ")"
Conexion.Close
Set Conexion = Nothing
%>


El código anterior obtiene el valor del campo "id" de la tabla "tabla1" de la base de datos. Luego crea un nuevo registro con el valor de "id" incrementado en 1. El error de este código es cerrar la conexión a la base de datos entre la ejecución de las consultas SQL.

Ese código puede ser reescrito más apropiadamente de la siguiente manera:


<%
Dim Conexion, RS, ID

Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexión]"

Set RS = Server.CreateObject("ADODB.RecordSet")
RS.Open "SELECT id FROM tabla1 ORDER BY id DESC", Conexion
ID = RS("id")
RS.Close
Set RS = Nothing

Conexion.Execute "INSERT INTO tabla1 (id) VALUES(" & id + 1 & ")"

Conexion.Close
Set Conexion = Nothing
%>


La diferencia es que en este caso la conexión a la base de datos sólo se abre una vez, ahorrándose el tiempo de cierre y reapertura.


Fuente : http://www.argentina-hosting.com

13 Tips para optimización de acceso a bases de datos

sábado, 7 de mayo de 2011

La popularización de Twitter ha superado esferas de early adopters, de geeks y de los entusiastas del internet y las plataformas sociales. Estos días Twitter es usado por casi cualquier persona. Con tal masificación, el argumento de “cada día Twitter se vuelve más inaguantable” o “cada día leo más tonterías” es más recurrente.

Twitter, como cualquier otra red social no debería, nunca, ser una mala experiencia, ni causar malos momentos. Como en la vida real, no es necesario acercarte a espacios que no te hacen sentir cómodo, no es necesario escuchar (o en este caso, leer) a personas que no te agradan, discutir de temas que no te interesan o entrar en un pelea.

Dicho eso, estos son mis cinco consejos para mejorar tu experiencia en Twitter:

  1. El seguir a alguien no es un contrato de amistad, por mucho que algunos quieran hacerte creer que así es. Si una amistad se basa en el follow de Twitter, simplemente no es amistad. Dejar de seguir a alguien no debería ser tomado como “algo personal”.

  2. Teniendo el primer punto claro, sigue a las personas que te llamen la atención por las cosas que escriben, porque te interesa por su profesión o por sus opiniones y por sus puntos de vista. Seguir personas para “quedar bien”, porque es “políticamente correcto” en tu círculo social, o dejar de seguir alguien que te llama mucho la atención por las mismas razones hará que tu timeline sea extremadamente aburrido y lleno de mensajes que no te interesan.

  3. Evita a toda costa todo movimiento relacionado con la reciprocidad. como el #follow1x1 — Twitter es una plataforma de comunicación basada en intereses y no en amistades (como Facebook). Las relaciones, por lo tanto, son asincrónicas.

  4. Sigue la cantidad de gente que puedes seguir, ni más ni menos. Algunos se sienten cómodos con 100, otros con 1.000 y algunos con 10.000; no hay regla, pero tampoco debería haberla. Así mismo, nadie debería reclamarte el número de seguidores que tienes. Y si se te cruza por la cabeza reclamarle eso a alguien, por favor recuerda, cada uno puede hacer lo que quiera con su cuenta de Twitter y nadie tiene derecho a reclamar. Si no te gusta lo que alguien en particular está haciendo, simplemente deja de seguirlo.

  5. El botón de bloquear es tu amigo. No tienes por qué leer o aguantar las tonterías de personas que usan Twitter para molestar o acosar a otros. No tengas miedo en usarlo. Entra al perfil de la persona que te está molestando y bloquéalo. No volverás a saber más de él o de ella. En caso que estés recibiendo spam, puedes reportarlo.

Cinco consejos para mejorar tu experiencia en Twitter

martes, 3 de mayo de 2011


Una estadística bastante llamativa mencionada por Mike Lazaridis durante el BlackBerry World mencionada hace apenas unos minutos: la compañía ha vendido 150 millones de smartphones en los últimos 12 años, de los cuales aproximadamente 15 millones se vendieron en el último trimestre. En comparación con los otros dos grandes fabricantes competidores:

  • Apple ha vendido 100 millones de iPhones desde su lanzamiento en junio 2007.
  • Nokia ha vendido 108 millones de dispositivos móviles tan solo en el primer trimestre de 2011.

RIM parece estar contento con la dirección que están tomando con sus dispositivos, con las nuevas versiones de su sistema operativo y con su nueva Playbook, los acuerdos con Microsoft y demás anuncios que hacen estos días, pero la pregunta a largo plazo debe ser: cómo pasar de una compañía que hace unos años ofrecía servicios propietarios y únicos (léase: push mail) a ser uno más del montón en una época en que la recepción de información en tiempo cuasi-real es algo que ofrecen todos los sistemas operativos.

BlackBerry vendió 150 millones de smartphones en los últimos 12 años

 
Bienvenidos a la Jungla © 2015 - Blogger Templates Designed by Templateism.com