miércoles, julio 29, 2009

Nuevas opciones en la web para mejorar tu trabajo

Cada día se desarrollan nuevas herramientas para facilitar el trabajo del diseñador y desarrollador web. Sin embargo, aveces el tiempo de investigación de estas herramientas es escaso y no sabemos como encontrarlas. Es por ello que este tipo de listas nunca están de más para quienes tienen deseos de aprender y facilitar su trabajo.

En otras ocasiones les he compartido útiles herramientas para diseñadores y desarrolladores web, también hemos hablado de cómo mejorar nuestro trabajo con el uso de servicios en línea y aunque muchos ya tienen sus herramientas favoritas, estoy segura que alguna de estás no las conocían.

Descubre estás 6 herramientas

Las herramientas que te presento a continuación son muy variadas, encontrarás recursos para diferentes actividades en el proceso de un desarrollo y diseño web. Pero si estás opciones no son suficientes para ti, también te invito a revisar los demás recursos que hemos investigado para ti.

  • Toufee: una herramienta que facilita la creación de animación en flash, funciona como un pequeño editor de imagen, sonido y texto.
  • Ajaxload.info: en este sitio encontraras una útil herramienta para generar imágenes de pre carga, realmente muy sencilla.
  • Csstypeset: es una herramienta que te permite generar el código CSS de diferentes tipografías para aplicarlas a tu sitio web.
  • Stripe Generator: para muchos es una herramienta útil para generar combinación de colores y diseños de fondo.
  • Buttonator: tienes necesidad de crear un botón estándar con determinadas características de forma rápido, está es la herramienta que te ayudará a lograrlo.
  • Dotemplate: es una herramienta que te permite construir templates de forma muy sencilla.

¿Quieres más recursos?

Para ti que siempre andas en busca de más opciones en recursos, te recomiendo los siguientes artículos que aglutinan una inmensa cantidad de recursos y herramientas para seguir aprendiendo, mejorando tu trabajo como diseñador y desarrollador web.

  • Framework para Wordpress: si deseas crear tu propio theme está es una lista de 20 frameworks para que te diviertas.
  • Optimiza tus imágenes: encuentra una lista de 8 herramientas para optimizar tus imágenes en la web.
  • Realiza combinación de colores: nunca están de más estás opciones, ya que nos facilitan la búsqueda de colores y combinaciones, descubre las 6 opciones disponibles en línea.
  • Crea tus logos: si buscas inpiración en crear un nuevo logo, conoce esta recopilación de opciones para tomar como referencia.
  • 10 opciones de CMS: andas en busca de una nueva opción en CMS te comparto una lista con 10 opciones para que tomes la mejor decisión y te animes a probar algo diferente.

Hay quienes odian las listas de recursos a mi me encanta descubrirlas porque en ellas logro encontrar por lo menos una o dos opciones que me servirán en mi trabajo. Si conoces más recursos te invito a compartirlos en los comentarios o compartir las nuevas herramientas que has descubierto que han mejorado tus actividades.

Artículo Original: Maestros del Web

lunes, julio 27, 2009

Jugando con PreparedStatement

Hace tiempo que he oido que los PreparedStatement de java son más eficientes que los Statement, así que me he puesto a jugar con el tema y verlo por mi mismo.

Mi primera prueba un pequeño fracaso. Cogí una base de datos MySQL e hice 1000 inserciones seguidas con Statement, componiendo la SQL y luego otras 1000 con PreparedStatement. Por igualdad de condiciones, en ambos casos partía de la base de datos vacía. Pues bien, no solo no había diferencia apreciable, sino que además en ocasiones las Statement tardaban menos.

Me puse a investigar y descubro que hay dos requisitos indispensables para que los PreparedStatement sean más efectivos:

  1. El servidor de base de datos debe soportar los Prepared Statement, que realmente no son cosa de java, sino del servidor de base de datos.
  2. El conector/driver que se use también debe soportarlos.

Así que a ver si mi versión de driver y de servidor MySQL lo soportan … pues sí, lo soportan. Sigo investigando y descubro que al conector de MySQL hay que decirle en la configuración que use PreparedStatement del lado del servidor, cosa que por defecto no hace. Esto se consigue poniendo en la cadena de conexión algo como

conexion = DriverManager.getConnection(
"jdbc:mysql://localhost/basedatos?useServerPrepStmts=true", "usuario", "password");

Pues nada, pruebo otra vez y esta vez sí que es ligeramente más rápido el PreparedStatement, pero no tanto. El tiempo que tarda cada vez el programa en correr es distinto y aunque el PreparedStatement suele tardar algo menos que el Statement, a veces no ocurre así. Estamos hablando de entre 15 y 18 segundos, en el que el PreparedStatement apenas le saca un segundo al Statement y no siempre.

No puede ser que eso sea así. Algo debo estar haciendo mal. Sigo leyendo y encuentro un sitio (no recuerdo cual) que dice que algunas bases de datos no mantienen los PreparedStatement después del commit. No veo nada en MySQL que indique esto, pero me decido a hacer la prueba. Hago que la conexión no sea auto-commit y pongo el commit fuera del bucle de inserción. Las mil inserciones en cada caso quedan "en el aire" hasta que se hace un commit al finalizar cada bucle.

Esta vez el PreparedStatement sigue sacando su aproximadamente un segundo sobre el Statement … pero el tiempo total se reduce drásticamente, tanto para Statement como para PreparedStatement, a unos 3 ó 4 segundos. El hecho de no hacer commit hasta el final, independientemente del tipo de Statement usado, hace que el tiempo total baje de 15 segundos a 3. Y el segundo a favor de PreparedStatement se convierte ahora sí, en algo apreciable. Seguramente, todo lo que estaba midiendo antes eran los accesos reales a disco duro para realizar realmente las inserciones de una en una con el auto-commit. En el segundo caso, la medida ya sí debe ser mejor comparativa enrtre PreparedStatement y Statement.

Pero … ¿y en una aplicación real?. ¿Podemos permitirnos el lujo de no hacer commit hasta que hayamos hecho un conjunto más o menos grandes de inserciones?. Yo creo que normalmente no, así que ¿realmente merece la pena el uso de PreparedStatement por temas de eficiencia?. Pues supongo que depende entonces de los casos.

Por ejemplo, se me ocurre que si una sola inserción es más compleja que la mia e involucra varias tablas, podemos dejar el commit para cuando se haya hecho la inserción en todas las tablas implicadas. Esto tiene cierta lógica, la inserción se completa totalmente o no se completa en absoluto y el commit confirma varias inserciones, una en cada tabla. La diferencia de velocidad entre PreparedStatement y Statement será mayor cuantas más tablas haya implicadas.

También se me ocurre, aunque sólo sea una tabla, que si tenemos garantía de que van a ir insertándose muchos registros con mucha frecuencia, como para comprometer la velocidad con la que somos capaces de insertarlos en base de datos, podemos usar PreparedStatement y un pequeño Timer que haga commit cada cierto tiempo. Una idea rebuscada, pero sí se de casos donde podemos aplicarla. A veces tenemos equipos hardware "escupiendo" información a toda velocidad, información que necesitamos almacenar en base de datos.

En resumen, PreparedStatement posiblemente sí es más eficiente, pero para sacarle realmente rendimiento, no basta con usarlo sin más. Hay que tener en cuenta más cosas, como si tenemos el auto-commit a true o con qué frecuencia necesitamos hacer los commit. Si se investiga un poco, también ser verá que hay otras variables a tener en cuenta, como temas de caché en la configuración del servidor de base de datos o del conector, pero soy demasiado vago para investigar eso sin necesidad real.

Aparte de todo esto, a favor de los PreparedStatement, también está el tema de seguridad. Con PreparedStatement evitamos tener que chequear y "escapar" los caracteres conflictivos en las cadenas de texto que vamos a insertar en base de datos. Si vamos a insertar un nombre de usuario que pedimos al usuario y a este se le ocurre poner una comilla simple, por ejemplo "O’Donnell", podemos meterla tal cual en un PreparedStatement, pero necesitamos "escapar" la comilla antes de usarla en un Statement.

Fuente

miércoles, julio 22, 2009

¿Qué hace a un gran desarrollador de software?

La industria del desarrollo de software cambia tanto y tan rápido que todos los días nos convertiremos en peores desarrolladores a menos que aprendamos y nos adaptemos de forma continua. Esta verdad tiene tres consecuencias principales.
  1. Si no hacemo nada para evitarlo, sin importar qué tan bueno seamos desarrollando software, eventualmente nos vamos a transformar en malos desarrolladores de software.
  2. Para asegurarnos que en el futuro seamos tan buenos desarrolladores de software como hoy, necesitamos aprender y adaptarnos a los cambios futuros que están directamente relacionados con nuestro entorno profesional.
  3. Para ser un mejor desarrollador de software, necesitamos ir más allá del aprendizaje y la adaptación

Grandes desarrolladores de software

A partir de este escenario apocalíptico donde nada está asegurado, lo que hace a un gran desarrollador de software no es su capacidad de aprender y adaptarse sino también el poder estar un paso más adelante de quienes sólo hacen lo necesario para no quedarse obsoletos.

Aprendizaje

  • El conocimiento técnico se vuelve obsoleto
  • Aparecen nuevas metodologías y los procesos para desarrollar software.

Adaptación

  • El desarrollo de software es un proceso que requiere de adaptación constante. Por ejemplo, vamos a trabajar con el código de otras personas. Necesitamos adaptarnos a su estilo y estructura para comprenderlo y mantenerlo.
  • Los cambios ocurren continuamente durante el desarrollo de software. Requerimientos cambiantes, tecnologías...
  • No siempre tenemos lo que preferimos hacer. Pero tenemos que hacerlo, así que mejor adaptarnos.

Buenos desarrolladores vs. Grandes desarrolladores

Los buenos desarrolladore de software y los grandes desarrolladores de software tienen dos cosas en común: tanto su productividad y como su calidad son altas. La principal diferencia es que los Buenos Desarrolladores de Software que no sigan aprendiendo y adaptándose van a ser un poco peor cada día, mientras que los Grandes Desarrolladores de Software seguirán mejorando.

¿Sos un Gran Desarrollador de Software?

A veces es dificil saber qué tanto estamos aprendiendo y adaptándonos. Estos son algunos indicadores que nos pueden ayudar:

  • Podemos aprender rápidamente nuevas tecnologías.
  • Podemos mantener código legacy.
  • Somos buenos sin importar el proceso utilizado (cascada, CMM, XP, etc.)
  • Podemos cambiar de lenguaje de programación facilmente.
  • ...

Y el principal indicador para saber si somos un Gran Desarrollador de Software: los Grandes desarrolladores son mejores desarrolladores que el día anterior.

Fuente: DosIdeas.

miércoles, julio 15, 2009

IEEE, el mundo de la Ingenieria

IEEE y el mundo de la Ingenieria


  • Que es el IEEE

IEEE corresponde a las siglas de The Institute of Electrical and Electronics Engineers, el Instituto de Ingenieros Eléctricos y Electrónicos, una asociación técnico-profesional mundial dedicada a la estandarización, entre otras cosas. Es la mayor asociación internacional sin fines de lucro formada por profesionales de las nuevas tecnologías, como ingenieros eléctricos, ingenieros en electrónica, científicos de la computación, ingenieros en informática e ingenieros en telecomunicación.

Su creación se remonta al año 1884, contando entre sus fundadores a personalidades de la talla de Thomas Alva Edison, Alexander Graham Belly Franklin Leonard Pope. En 1963 adoptó el nombre de IEEE al fusionarse asociaciones como el AIEE (American Institute of Electrical Engineers) y el IRE (Institute of Radio Engineers).

A través de sus miembros, más de 360.000 voluntarios en 175 países, el IEEE es una autoridad líder y de máximo prestigio en las áreas técnicas derivadas de la eléctrica original: desde ingeniería computacional, tecnologías biomédica y aeroespacial, hasta las áreas de energía eléctrica, control, telecomunicaciones y electrónica de consumo, entre otras.

Según el mismo IEEE, su trabajo es promover la creatividad, el desarrollo y la integración, compartir y aplicar los avances en las tecnologías de la información, electrónica y ciencias en general para beneficio de la humanidad y de los mismos profesionales. Algunos de sus estándares son:


Nota Importante : Mediante sus actividades de publicación técnica, conferencias y estándares basados en consenso, el IEEE produce más del 30% de la literatura publicada en el mundo sobre ingeniería eléctrica, en computación, telecomunicaciones y tecnología de control, organiza más de 350 grandes conferencias al año en todo el mundo, y posee cerca de 900 estándares activos, con otros 700 más bajo desarrollo.

  • Donde esta presente el IEEE ?
El IEEE esta dividida por Regiones y estas son:

Region del 1 al 6: Los Estados Unidos
Region 7: Canada
Region 8: Europa y el Medio Oeste
Region 9: Latinoamerica
Regio 10: Asia y el pasifico

Cada una de estas regiones se divide por secciones por cada pais que le corresponde.
para mas informacion pincha aqui http://ewh.ieee.org/reg/9/org_secciones.html

  • Quienes son sus miebros ?
El IEEE es una sociedad técnica profesional que agrupa a personas interesadas en los campos de la electrotecnología y la información en cerca de 150 países.
Todo interesado es bienvenido y puede asociarse al IEEE, asignándosele una 'Categoría' acorde con su formación y trayectoria profesional.
Las posibles categorías son:
Member: graduados universitarios en áreas técnicas afines al IEEE o quienes puedan demostrar una trayectoria profesional equivalente,
Associate: quienes no satisfacen los requisitos para Member
Senior Member: profesionales con una trayectoria destacada. Quien es Member puede postularse para pasar a Senior Member o puede ser postulado por terceros. Las postulaciones son analizadas por el Comité Admission & Advancement en sesiones que realiza a lo largo del año.
Fellow: Los profesionales más destacados a nivel mundiar en sus respectivas áreas técnicas. Deben contar con el aval de una de las Sociedades Técnicas del IEEE y ser propuestos por otros Fellows, en una convocatoria que se realiza anualmente.
Student: Quienes están cursando estudios universitarios en un área afín al IEEE durante al menos 50% de su tiempo
.

  • Como Asociarse ?
Para asociarse al IEEE basta llenar un formulario con datos personales y abonar los aranceles correspondientes, según que el candidato sea 'Estudiante' o 'No-Estudiante'.
En adición a la asociación al IEEE, es posible asociarse también a una o más Sociedades Técnicas del IEEE (a costo adicional).
Hay aranceles preferenciales para los Estudiantes.
Los 'No estudiantes' que califiquen para ciertas 'Circunstancias Especiales' pueden acogerse a descuentos en el arancel a pagar (50% de descuento en el caso de 'ingresos mìnimos').

  • Como esta organizado segun el IEEE Belaw ?

La organización del IEEE refleja sus características técnicas y geográficas, a través de sus 'Sociedades Técnicas', 'entidades organizativas' y 'comités directivos' (Boards).

Hay cerca de 40 Sociedades Técnicas y Consejos Técnicos, relacionadas con diversas áreas temáticas, que funcionan bajo la coordinación del Technical Activities Board (TAB).

El Educational Activities Board (EAB) coordina actividades relacionadas con la enseñanza, desarrollo profesional, participación del IEEE en organizaciones de acreditacion como ABET, etc.

El Publications Board (PUB) es el encargado de coordinar la intensa actividad del IEEE en esa área, incluyendo publicaciones periódicas y aperiódicas, anales de conferencias y libros, tanto en versiones impresas tradicionales como en medios electrónicos. Una parte substancial de los ingresos del IEEE se originan en la venta de publicaciones técnicas a universidades, empresas y otros. Esto permite ofrecerlas a los socios a precios preferenciales (especialmente las revistas de las Sociedades Técnicas).

La Standards Society (evolución del antiguo Standards Board) es responsable del desarrollo de los IEEE Standards a través de sus diversos Comités Técnicos. Los IEEE Standards tienen profunda y creciente influencia en la industria y los socios del IEEE pueden ser parte de esta relevante tarea.

El Regional Activities Board (RAB) refleja los aspectos geográficos del IEEE, a través de sus 10 Regiones Geográficas que abarcan todo el mundo. Cada una cuenta con un Director Regional elegido por los miembros residentes en la misma. La Sección Argentina forma parte de la Región 9 Latinoamérica.

Por cuanto el IEEE nació en los Estados Unidos de Norteamérica, si bien es una organización global la membresía y actividades que allí se realizan aún tienen un peso significativo dentro de la organización, lo que se refleja en la existencia de IEEE-USA entre los comités directivos.

Cabe mencionar que alrededor de 1/3 de la membresía reside actualmente fuera de Estados Unidos y es creciente la participación de miembros de fuera de Estados Unidos en los diversos Comités Directivos, estimulada por la disponibilidad de comunicaciones electrónicas.

Todos los cargos directivos están cubiertos por miembros que actúan con carácter voluntario y ad-honorem.

En adición a ellos hay personal contratado para brindar soporte administrativo y gerencial, principalmente desde la Sede Central del IEEE en Piscataway, New Jersey, bajo la supervisión de un Gerente General.

La máxima autoridad del IEEE es el Presidente, elegido anualmente por voto de los miembros.
Cada uno de los 'Boards' es dirigido por un 'Vicepresidente'.

El máximo organo de conducción del IEEE es el Board or Directors (BOD), que cuenta con cerca de 30 miembros ('Directores'), e incluye al Presidente del IEEE, 10 Directores Regionales, 10 Directores Técnicos (representando las diversas Areas Técnicas del IEEE) y los Vicepresidentes de los Boards.

Los Directores deben ser Senior Member o Fellow

  • Notas de Importancia

  • Cómo conseguir trabajo a través del IEEE?

Se puede conseguir trabajo por medio del servicio para miembros del IEEE llamado e-Recruiter, el cual puede ser accesado en
http://www.ieee.org/jobs

  • Cómo conseguir ayuda de viajes con el IEEE?

IEEE ofrece un programa de ayuda a viajeros del IEEE, el cual puede ser consultado en http://www.ieeetravelonline.org

  • Qué es ser un miembro GOLD del IEEE?

Los grupos GOLD son grupos afines, organizados para desarrollar actividades que cumplan los objetivos del Programa "Graduados de la última década" (Graduates of the last decade - GOLD). Uno de los requisitos es tener como máximo 7 años de graduado. Ser miembro GOLD da grandes ventajas, que pueden ser consultadas visitando la página web
http://www.ieee.org/gold

  • Cómo mantenerte informado sobre las noticias y eventos del IEEE?

Para mantenerte informado, puedes visitar los siguientes sitios web:

IEEE Mundial
http://www.ieee.org
IEEE Latinoamérica
http://www.ieee.org/r9
IEEE Colombia
http://www.ieee.org.co

  • Si ya existe una Rama Estudiantil, pero está inactiva, cómo reactivarla?

En algunos casos, la Rama Estudiantil por graduación de sus directivos por ejemplo, queda inactiva. Es decir, es una Rama Estudiantil aprobada ante IEEE en Estados Unidos, pero que no se encuentra trabajando, que no ha enviado sus informes a tiempo o que tiene menos de 10 miembros, o ha realizado menos de dos actividades en el año. Para reactivarla, pueden contactar a una Rama que esté activa y tome el papel de "Padrino" (Universidad Nacional de Colombia, Universidad Distrital Francisco José de Caldas, Universidad Industrial de Santander, Pontificia Universidad Javeriana, Universidad Santo Tomás, etc.), o también pueden contactar a la Sección Colombia, cuyo encargado en estos casos es el el Ingeniero Carlos Rueda Artunduaga, Coordinador de Actividades Estudiantiles ( calozanog@ieee.org ). La reactivación queda concluida al enviar al IEEE Estados Unidos la documentación necesaria (informes de nuevos directivos, nuevas afiliaciones, plan anual de actividades, etc.)

Para mayor información puede contactarse a la oficina de Servicios Estudiantiles del IEEE en Estados Unidos en el email
student.services@ieee.org


Para mas informacio visita www.ieee.org









jueves, julio 09, 2009

¿Empleado o Emprendedor?

Llamarse emprendedor en la web es un especie de moda en la que te sientes parte de por el hecho de tener un blog, cuentas en redes sociales, escribes sobre ello y promueves el emprendimiento. Pero en la realidad muchos actuamos como empleados devengando un sueldo mensual y dejando nuestro emprendimiento en segundo plano.

Muchas personas en la web me sirven de referencia pero muy pocas me inspiran por lo que escriben desde el “yo pienso”. Está semana fue de gran inspiración leer el artículo de Emplear Empleados, Asociar Emprendedores de Damian Voltes en donde realiza un análisis sobre el perfil del empleado y el emprendedor. Además, el cuchillo en los dientes me hizo reflexionar sobre la probabilidad de éxito de un Startup.

Perfil del empleado

Dialogando con el artículo de Damian saco algunos puntos para definir el perfil del empleado en este medio. Dejo claro que faltarán muchos aspectos para crear un perfil completo porque depende mucho de la empresa y el trabajo.

  • Personas que buscan trabajar para una empresa y desarrollar su carrera profesional.
  • Establecen una relación de dependencia que garantice un sueldo mensual.
  • Buscan aumentos salariales a través de bonos y crear carrera profesional para su curriculum.
  • Les gusta tener horarios establecidos y que les den instrucciones específicas de cómo hacer las cosas.
  • Puede demostrar lealtad por años siempre y cuando se sienta cómodo con el sueldo, ambiente de trabajo e incentivos.

Perfil del emprendedor

Hemos hablado que trabajar en una Startup requiere un cambio de actitud y que existen diferencias entre los trabajos normales y el emprendimiento de crear tu propia empresa. Para comprenderlo mejor también debemos reflexionar en el perfil del emprendedor que crea la empresa y el emprendedor que se asocia a ella.

  • Personas que desean tener su propia empresa.

  • Amantes de la libertad, lo flexible y obsesionados por dar a conocer sus ideas.
  • Les interesa el incremento del valor de sus acciones si forman parte de una empresa.
  • Buscan reconocimiento social y que sus ideas sean respetadas.
  • Toman riesgos todo el tiempo y se lanzan a lo incierto.
  • No les importa integrar personas a su equipo y compartir sus ideas con ellas si eso ayuda en sus propósitos de alcanzar sus metas y desarrollo de proyectos.
  • Si trabaja en una empresa en cualquier momento se puede ir porque no le importa cambiar de dinámica. Necesitan cambiar el rumbo hasta sentirse satisfechos.

Las aspiraciones personales

Considero que todos tenemos aspiraciones personales y que trabajamos en pos de ellas, sin embargo aveces perdemos el rumbo o simplemente no somos congruentes con lo que deseamos y hacemos. En lo personal tengo muchas cosas para mejorar, soy una persona que necesita cambios constantes y desarrollarme en el campo creativo.

Pero debemos aceptar que el emprendimiento requiere mucho valor, empuje, positivismo, dinamismo y disponibilidad. Es por ello que es fácil dejarse seducir por la estabilidad financiera que nos brinda una empresa. Sin embargo, lo que les recomiendo a los emprendedores que trabajan en una empresa es revisar las posibilidades de ser parte de ella y seguir trabajando en lo que les gusta. ¿empleado o emprendedor?

Original: MaestrosDelWeb

miércoles, julio 08, 2009

Gmail no es más beta

Después de más de cinco años en versión Beta, GMail de Google dejó de ser Beta.

Google afirma que su servicio de mail y otras tres aplicaciones de la suite de Google Apps, ahora son productos oficialmente terminados. En tanto, eso no significa que Google va a parar de perfeccionar las herramientas, ni que las actualizó en esta fecha.

En verdad salir de Beta significa poco en la práctica. ¿Por qué el cambio entonces? Para Google la novedad es más para atraer nuevos usuarios corporativos mas que una evolución de los aplicativos. La versión principal de Google Apps cuesta U$S 50 por usuario para clientes corporativos, los cuales tienen derecho a herramientas como acceso offline y soporte de 24horas los siete días de la semana.

"Muchas empresas que analizaron las aplicaciones las consideraron terminadas", dice Rajen Sheth, gerente de produto del gigante de las búsquedas. "Aunque había un factor abstracto de percepción en relación a la versión Beta que hacía que algunos clientes corporativos quedaran afuera".

Google Calendar, Google Docs y Google Talk no son mas programas en versión beta. Otras aplicaciones no incluidas en la suite de Apps - como o Google Scholars -va a permanecer en beta.

Original: DosIdeas

Google anuncia su propio sistema operativo

Ayer Google anunció que está desarrollando un sistema operativo para PC, fuertemente ligado a su navegador web Chrome. Con el nombre "Google Chrome Operating System", el sistema está pensando para computadoras portables pequeñas (las llamadas "netbooks"), que se están vendiendo cada vez más. Google dice que su software también podría servir para PC de escritorio completas.

El anuncio oficial de Google

Han pasado nueve meses desde el lanzamiento del navegador web Google Chrome. Ya hay más de 30 millones de personas que lo usan a diario. Diseñamos Google Chrome para las personas que viven en la web - buscando información, bajando emails, leyendo noticias, realizando compras o manteniéndose en contacto con amigos. Sin embargo, el sistema operativo sobre el que funcionan los navegadores fueron diseñados en una época donde no existía la web. Entonces hoy estamos anunciando un nuevo proyecto que es una extensión natural a Google Chrome - el Sistema Operativo Google Chrome. Es nuestro intento de re-pensar cómo deberían ser los sistemas operativos.

Google Chrome OS es un sistema de código abierto liviano que inicialmente estará enfocado a las netbooks. Más tarde este año estaremos liberando el código, y ya en la segunda mitad del 2010 habrá netbooks en el mercado funcionando con Google Chrome OS. Como ya estamos hablando con socios sobre este proyecto, y pronto estaremos trabajando con la comunidad de código abierto, queríamos compartir nueva visión hoy, para que todos comprendan lo que intentamos lograr.

Velocidad, simplicidad y seguridad son aspectos clave en Google Chrome OS. Estamos diseñando el OS para que sea rápido y liviando, que inicie y deje disponible la web en unos segundos. La interfaz de usuario es mínima para que no interfiera, y la mayor parte de la experiencia del usuario ocurre en la web. Como hicimos con el navegador Google Chrome, estamos volviendo a las bases y rediseñando completamente la arquitectura subyacente de seguridad del OS, para que los usuarios no tengan que preocuparse por los virus, malware y actualizaciones de seguridad. Simplemente debería funcionar.

Google Chrome OS funcionará tanto en chips x86 y ARM, y estamos trabajando con múltiples OEMs para que el año próximo ya estén disponibles varias netbooks en el mercado. La arquitectura de software es simple - Google Chrome funcionará con un nuevo sistema de ventanas sobre un kernel Linux. Para los desarrolladores de aplicaciones, la web es la plataforma. Todas las aplicaciones basadas en la web funcionarán automáticamente, y se pueden escribir nuevas aplicaciones usando las tecnologías web favoritas. Y por supuesto, estas aplicaciones no sólo funcionarán en Google Chrome OS, sino también en cualquier navegador basado en estándares sobre Windows, Mac y Linux, dándole a los desarrolladores la mayor base de usuarios de cualquier plataforma.

Google Chrome OS es un proyecto nuevo, independiente de Android. Android fue diseñado para funcionar sobre varios dispositivos, desde teléfonos a netbooks. Google Chrome OS está siendo creado para personas que pasan la mayor parte de su tiempo en la web, y está diseñado para funcionar en distintas computadoras, desde pequeñas netbooks hasta sistemas de escritorio completos. Aunque hay algunas áreas en donde Google Chrome OS y Android se solapan, creemos que la posibilidad de elegir generará innovación con beneficios para todos, incluyendo a Google.

Escuchamos mucho a nuestros usuarios y su mensaje es claro - las computadoras necesitan mejorar. La gente quiere recibir instantáneamente sus emails, sin perder tiempo esperando que sus computadoras inicien y luego lanzar el navegador web. Quieren que sus computadoras siempre funcionen igual de rápido que cuando las compraron. Quieren que sus datos estén accesibles sin importar si pierden la computadoras o se olvidan de hacer copias de seguridad. Más importante aún, no quieren gastar varias horas configurando sus computadoras para que funcionen con cada nueva pieza de hardware, o preocuparse por las constantes actualizaciones de seguridad. Y cada vez que nuestros usuarios tienen una mejor experiencia con sus computadoras, Google se beneficia por tener usuarios más contentos que están más dispuestos a pasar tiempo en la Internet.

Tenemos mucho trabajo por hacer, y definitivamente vamos a necesitar mucha ayuda de la comunidad de código abierto para lograr esta visión. Estamos entusiasmados por lo que viene y esperamos que también lo estén ustedes. Estén atentos a más novedades en el invierno, y pasen un excelente verano.

Original: DosIdeas

martes, julio 07, 2009

Ágil expone los problemas para escalar

Uno de los primeros temas que suele aparecer en cualquier discusión sobre Ágil es "¿Qué tanto se puede escalar Ágil?". A veces se pregunta de forma explícita, pero a menudo se parte del supuesto de que Ágil no puede escalar muy bien. Cuando me encontré con Ágil por primera vez, mi primera impresión fue que Ágil no escalaba más allá de equipos chicos, digamos de 12 personas.

Intentaba resolver este tema desde el principio, pero luego me di cuenta que había algo más detrás. Veamos el escenario completo. ¿Qué estamos asumiendo del desarrollo tradicional? Creo que todos llegamos a esta discusión pensando en equipos de 100 ingenieros, 500 ingenieros, incluso 2000 ingenieros trabajando con desarrollo tradicional, y que por lo tanto el desarrollo tradicional funciona de manera probada en cuanto a poder escalar. Pero primero respondamos esta pregunta: "¿Qué tan bien escala el desarrollo tradicional?".

Para responder a este pregunta primero deberemos definir el término "escalar". Una buena definición es que al agregar nuevos recursos, ocurrirá un incremento lineal en la salida efectiva, si casi ninguna disminución de la eficiencia. Para el software, la salida y la eficiencia se traducen en nueva funcionalidad y en productividad. Esto significa que si tenemos un equipo de 50 ingenieros y añadimos 50 ingenieros más obtendremos el doble de la salida. ¿Pero cuándo fue la última vez que vieron ocurrir eso? ¿Lo vieron ocurrir alguna vez? En mi experiencia, después de hablar con cientos de organizaciones que usaban un desarrollo tradicional de software, al agregar nuevos recursos cae la productividad y por lo tanto la salida no tiene un incremento lineal. De hecho, en muchos casos la salida disminuye al agregar más recursos.

¿Qué hacés para "escalar" tu organización de desarrollo? ¿Actualizás meticulosamente los Gantt y las estimaciones? ¿Planificás montones de reuniones? ¿Pasás mucho tiempo asegurándote que los requerimientos y los diseños sean los adecuados? ¿Reservás el 30% de desarrollo para testing (y arreglo de errores)?

En mi experiencia, después de hablar con cientos de organizaciones, la respuesta a la pregunta "¿Qué tan bien escala el proceso de desarrollo tradicional?" es un "No muy bien". Hace rato que sufrimos este problema, en gran medida porque aunque teníamos el problema, las causas raíces eran dificil de encontrar, y más aún solucionar.

El punto es que si estás implementando Ágil en una organización grande, no te desalientes cuando encuentres problemas para escalar. Los problemas siempre estuvieron ahí, sólo que no eran obvios. Ahora, en vez de preguntarnos porqué las cosas no están funcionando como esperábamos al final de un proyecto, podemos darnos cuenta de problemas concretos, como por ejemplo que nuestra organización no tiene una política para coordinar los cambios en las API que usan múltiples equipos. Como Ágil expone estos problemas, podemos comenzar a tomar medidas para resolver y así crear un proceso de desarrollo más escalable, que también forma parte del desarrollo Ágil.

Original: DosIdeas

viernes, julio 03, 2009

NoSQL

Una reunión en San Francisco fue la inauguración de la comunidad de NoSQL, un grupo de personas que comparten la idea de destronar la tiranía de las bases de datos relaciones, costosas y lentas, en favor de una alternativa mucho más eficiente y barata para manipular datos.

"Las bases de datos relaciones nos ofrecen demasiado. Nos fuerzan a adaptar nuestros objetos para adaptarlos a una RDBMS (sistema de gestión de bases de datos relacional)", dice Jon Travis, uno de los principales ingenieros en SpringSource, y uno de los 10 presentadores en la reunión de NoSQL.

Las alternativas basadas en NoSQL "te ofrecen sólo lo que necesitás", dice Travis.
Surge el código abierto

Los primeros precursores son desarrolladores Web y Java, muchos de los cuales aprendieron a llevar adelante sus iniciativas (ajustadas en presupuesto) sin usar Oracle. Para esto construyeron sus propias soluciones para almacenar datos (emulando lo que hicieron Google y Amazon), y luego las publicaron como código abierto.

Hoy estas soluciones gestionan terabytes e incluso petabytes de datos para la Web 2.0, y ya no es factible volver atrás, por motivos técnicos, económicos e incluso ideológicos.

"Las empresas Web 2.0 pueden tomar riesgos y necesitan escalabilidad", dice Johan Oskarsson, el organizador de la reunión NoSQL y, como la mayoría de los participantes, un desarrollador Web (del sitio Last.fm). "Cuando se combinan estas dos cosas, hace que NoSQL sea una muy buena alternativa".

Muchos, dice Oskarsson, dejaron de usar la base de datos MySQL, una favorita de la Web 2.0 por mucho tiempo, en favor de una alternativa NoSQL porque las ventajas eran demasiado grandes para ignorar.

Por ejemplo, Facebok creó su almacen de datos Cassandra para soportar una nueva búsqueda en su sitio web, en vez de usar su base de datos MySQL existente. De acuerdo a la presentación del ingeniero de Facebook Avinash Lakshman, Casandra puede escribir hasta 50GB de datos en disco en tan sólo 0.12 milisegundos, más de 2500 veces más rápido que MySQL.
¿Y qué es NoSQL? (técnicamente hablando)

Los nombres de los proyectos son tan diversos como extraños: Hadoop, Voldemort, Dynomite, y otros. Pero suelen estar unificados por algunos puntos en común, incluyendo:

No llamarlos "bases de datos". Werner Vogels, CTO de Amazon, se refiere a su sistema Dynamo como "un almacenamiento de clave-valor de alta disponibilidad". Google llama a su BigTable, otro de los modelos para muchos simpatizantes de NoSQL, "un sistema de almacenamiento distribuido para gestionar datos estructurados".

Pueden manejar enormes cantidades de datos. Hypertable, una implementación de código abierto basada en BigTable, se usa dentro del motor de búsqueda Zvents para escribir 1000 millones de celdas de datos por día, según cuenta el ingeniero Doug Judd en su presentación.

A su vez, BigTable, en conjunto con su tecnología hermana MapReduce, procesa hasta 20 petabytes de datos por día.

"Definitivamente la cantidad de datos es tan grande que las personas están buscando otras tecnologías", dice Travis de SpringSource, que con su tecnología VPork ayuda a los usuarios de NoSQL a realizar benchmarks de rendimiento de sus bases de datos alternativas.

Se ejecutan en clusters de servidores de PC baratas. Los clusters de PC se pueden expandir de forma facil y barata sin la complejidad y el costo del "data sharding", que involucra recortar una base de datos en múltiples tablas para ejecutarse en grandes clusters o grillas.

Google cuenta que uno de sus clusters de BigTable más grande gestiona 6 petabytes de datos sobre miles de servidores.

"Oracle te va a decir que con el hardware y la configuración adecuada de Oracle RAC (Real Application Clusters) y algún otro software mágico pueden lograr la misma escalabilidad. ¿Pero a qué costo?", pregunta Javier Soltero, CTO de SpringSource.

Superan los cuellos de botella de rendimiento. Al no tener que realizar la traducción de datos hacia un formato amigable para SQL, las arquitecturas NoSQL son mucho más rápidas.

"SQL es un enfoque extraño para el código procedural, y casi todo el código es procedural", dice Curt Monash, un analista independiente de bases de datos y blogger. "El costo de mapear los datos a SQL puede valer la pena para los casos en que estos datos tengan que manipularse extensivamente... pero cuando la estructura de la base de datos es muy simple, SQL no parece ayudar".

Raffaele Sena, de Adobe Systems, dice que Adobe relanzó su servicio colaborativo ConnectNow Web hace un año y medio, y decidió no usar una base de datos por los motivos explicados por Monash.

Adobe usa Terracotta, un software Java para clustering, para gestionar los datos en formato Java. Sena explica que este enfoque es la clave por la cual el rendimiento de ConnectNow es dos a tres veces superior a la versión anterior. "El sistema hubiera sido mucho más complejo y dificil de desarrollar con una base de datos", dice.

Otro proyecto, MongoDB, se llama a si mismo "base de datos orientada a documentos" por su almacenamiento nativo de datos de tipo objeto.

Sólo lo necesario. Quienes impulsan NoSQL admiten que las bases de datos tienen características únicas y una reputación sólida para la integridad de datos, pero explican que todo esto puede resultar demasiado para sus necesidades.

Tomemos por ejemplo a ConnectNow que, incluso sin una base de datos, hace tres copias de los datos de la sesión del usuario mientras está online - datos que luego son borrados cuando el usuario se desconecta, dice Sena. "No necesitamos una base de datos, ya que la mejor representación de los datos ya están en memoria", dice.
Soporte de la comunidad

Por ser de código abierto, las alternativas de NoSQL no suelen tener el mismo soporte que otros proveedores tradicionales. Para la mayoría de los entusiastas de NoSQL esto no es un problema, ya que están acostumbrados a trabajar con enfoques alternativos.

Pero algunos admiten que puede causar miedo trabajar sin "un cuello para ahorcar" cuando las cosas salen mal, especialmente para los gerentes.

"Tuvimos que salir a vender la propuesta", admite Sena de Adobe. "Pero básicamente, después de ver que nuestro primer prototipo funcionaba, pudimos convencer a la alta gerencia que este era el camino correcto".

A pesar de todo el potencial, la mayoría de las organizaciones todavía no necesitan preocuparse por lo que se pierden, dice Monash.

"La mayoría de las organizaciones grandes ya tienen una forma de hacer OLTP (procesamiento de transacciones online), probablemente a través de sistemas de bases de datos. ¿Por qué cambiar?", dice. MapReduce y otros proyectos "puede ayudar a las organizaciones. Pero probablemente debería integrarse a una DBMS analítica".

Incluso Orkarsson, el organizador de NoSQL, admite que su compania, Last.fm, todavía no migró a una alternativa NoSQL, y en cambio usa bases de datos de código abierto. Por ahora, la revolución está esperando.

"Es verdad que hoy NoSQL no es muy relevante para la mayoría de las organizaciones", dice Orkarsson. "Pero esto podría cambiar en los próximos dos años".

Original: DosIdeas

miércoles, julio 01, 2009

La magia del "Ritmo Sustentable"

¿Qué es un ritmo sustentable? Significa trabajar a un ritmo que podamos sostener con comodidad y ocasionalmente acelerar cuando sea necesario. El Ritmo Sustentable es fácil de definir y difícil de lograr en la práctica.

Básicamente, detrás del Ritmo Sustentable está la pregunta "¿Qué tan bueno soy cuando estoy cansado?".

Y no soy nada bueno cuando estoy cansado. Aunque puedo terminar cosas cuando estoy cansado, no trabajo ni con eficiencia ni con eficacia. Pierdo el tiempo. Hago las cosas con desgano, y mi trabajo no tiene mucha calidad.

Si me acostumbro a trabajar consistentemente a un ritmo no-sustentable, gasto varias horas no-productivas por día haciendo poquito. Mi atención se va hacia páginas web, la ventana del chat, el teléfono, el e-mail, alguna revista. Y sin embargo este tiempo perdido no es lo que Tom DeMarco llama "Holgazanear". Holgazanear, distraerse, es saludable, es algo bueno. Cuando trabajo demasiadas horas, el tiempo que gasto alejándome de mi trabajo es el resultado de mi mente y mi cuerpo que se rebelan en contra de un ritmo no sustentable.

La eficiencia es el enemigo de la efectividad - Tom DeMarco en Slack.

Jerry Weinberg dejó algo muy en claro en su charla en una conferencia Ágil: para ser un profesional debemos cuidarnos a nosotros mismos. "Cuidarse a uno mismo", dijo jerry, "significa cuidarse de forma completa - cuerpo y mente".

Quizás eso necesite de coraje. Si tu organización valora a las personas que definitivamente no trabajan a un ritmo sustentable, podrías necesitar coraje para trabajar a un ritmo sustentable. Podrías perder el trabajo. O, podrías ser tan productivo que nadie cuestione tu dedicación o tus logros.

Cuando trabajo a un ritmo sustentable tengo energías para trabajar de forma eficiente y efectiva, tengo tiempo para pasarlo con mis amigos y familia, tiempo para ejercitarme, incluso tengo tiempo para reflexionar sobre mi trabajo y logro una genuina satisfacción por mi productividad.

Cuando me comprometo a trabajar a un ritmo sustentable, soy consciente que no voy a divagar durante las horas de trabajo, ya que no voy a tener más horas a la tarde para compensar el tiempo perdido. Comprometerse a esta práctica significa enfocarse durante las horas de trabajo, y para mi (y muchos otros) la forma más fácil de enfocarse es trabajar en parejas con otra persona. Después de varias horas de trabajar de a pares, generalmente termino contento con mi productividad y me voy contento a casa, a tiempo.

Se necesita tiempo y práctica para dominar al Ritmo Sustentable. Dense tiempo para aprender este práctica. Observense mientras experimentan. Seguramente encontrarán que son mejores profesionales cuando su ritmo es sustentable.

Original: sustainablePace