Chiste del día: " Programadores matando un dragón"

Me lo envía un colega (mcapote); la versión original está en portugués, pero aquí se encuentra la traducción al español.

Una pequeña introducción:
Supongamos la siguiente situación, "En lo alto de un castillo, hay una linda princesa, que es custodiada por un terrible y gigante dragón", así se abordaría esa situación según cada lenguaje:

Java - Llega, encuentra al dragón, desarrolla un framework para aniquilación de dragones en múltiples capas, escribe varios artículos sobre el framework... pero al final, se olvida y no mata al dragón...

.NET - Llega, ve la idea del desarrollador de Java y la copia, intenta matar al dragón, pero el bicho se lo come...

C - Llega, mira al dragón con desprecio, tira la espada, degolla al dragón, encuentra a la princesa... y la ignora para ver los últimos checkins del cvs del kernel de linux...

COBOL - Llega, ve al dragón y piensa que es demasiado viejo para conseguir matar un bicho de ese tamaño y quedarse con la princesa, y entonces se va...

Ruby - Llega con muchísima fama, diciendo que es el mejor en hacer cualquier cosa y cuando va a enfrentarse al dragón muestra una peliculita de el caballero matando a un dragón... El dragón se lo come de puro aburrimiento...
Sigue en Rebotación

Frase del día

"Quien se quema con un módem, ve el cable telefónico y llora" - E.P.

Proyecto libre "NotiUY": todas las noticias sobre Uruguay en un solo lugar

NotiUy es un proyecto libre, licenciado con la GPL, y desarrollado por Pablo Hoffman. En la documentación del sitio, tanto en el Acerca de o como en la Ayuda, encuentras toda la información necesaria para comprender como fue concebido y el alcance del mismo:

"Un proyecto destinado a combatir los problemas de accesibilidad que (aún) hoy en día padecen los medios de prensa uruguayos."

La idea es tratar de centralizar todas las noticias uruguayas de los medios más importantes en un único sitio, con una actualización automática, permitiendo ver las noticias según determinados criterios. Podremos ver las "Ultimas noticias", ordenadas por sitio, o por área, o directamente los "Destacados de la semana" (donde entra en juego la cantidad de veces que fue vista la noticia por los lectores). A su vez, no menos importante, nos permite hacer una búsqueda por texto en las noticias que estamos visualizando.

Lo interesante del proyecto, como todo proyecto libre, es que dispones de los fuentes para colaborar con el mismo, o directamente, para conocer sobre cómo se desarrolla un sistema de este estilo. Las grandes novedades, además del uso de PHP, XHTML, CSS, etc, es el uso de Python, lenguaje que es ampliamente utilizado por la famosa empresa Google (donde prefirieron este lenguaje, descartando Java).

Palabras de su autor:

"La aplicación está escrita en php (a excepción de los indexadores que están escritos en python) y fue desarrollada teniendo especialmente en cuenta la modularización y la separación de capas (lógica, control y presentación), así como también el soporte (utilizando las librerías gettext de la GNU)."

El sitio de noticias es www.notiuy.com y el proyecto está registrado en sourceforge.net, y puedes bajar los fuentes desde ahí mismo.

Visita, participa, sugiere, critica, colabora, o directamente, aprende ;-)

Problema: instalas tu PostgreSQL y este no acepta conexiones de los usuarios

Habiendo instalado de cero el recién salido al mercado Fedora Core 5, me encuentro (nuevamente) en la situación que el flamante motor de base de datos Postgresql 8.1.3 no acepta las conexiones de los usuarios.

Para evitarles el problema de perder 1 o más horas tratando de resolverlo, lo documento en este "post":

1) Ingresa como el usuario "postgres" (el administrador de la base). Generalmente este usuario se crea en el sistema y sin clave de acceso. Sin tener que modificar la clave, puedes ingresar como "root" (administrador) y hacer "su - postgresql", y entrarás como ese usuario.

2) Edito el archivo "/var/lib/pgsql/data/pg_hba.conf" y sobre las líneas:
# "local" is for Unix domain socket connections only

local all all ident sameuser

# IPv4 local connections:

host all all 127.0.0.1/32 ident sameuser

Sustituye la palabra "ident" por "trust".

3) Reinicia el servidor (es decir, el servidor Postgres) con:
service postgresql restart

4) Listo, el sistema acepta conexiones.

5) De regalo, el siguiente detalle. Instala el administrador gráfico para PostgreSQL llamado pgadmin3 desde el "yum", de la siguiente forma:
yum -y install pgadmin3

Salut!

El 24 de Abril inicia el curso: "Programación PHP5"

Luego de muchos preparativos se abre en la Universidad ORT el período de inscripción para el curso que dictaré sobre "Programación PHP5" en el marco del "Ciclo de Especialización dirigido a profesionales de Sistemas y Electrónica".

Por las características del temario del curso, este el primero y el único del mercado que contempla los últimos avances en la programación web con el lenguaje de programación PHP en su versión 5.

Cualquier duda o consulta, pueden enviarme un correo que ampliaré toda la información que soliciten.

Este es el detalle completo:

Programación Web con PHP5, Framework Pear y Template Smarty

Objetivos

-El curso capacita programadores en el diseño y desarrollo de aplicaciones dinámicas para Internet con la última versión del lenguaje PHP que se orienta fuertemente al Desarrolo Web Orientado a Objetos. El conocimiento del lenguaje se verá enriquecido con el uso de las herramientas más avanzadas: el Framework Pear, diseñado para ser un conjunto de componentes reutilizable y el sistema de Templates Smarty, para implementar una capa de abstracción que separa la lógica y la presentación de la información.

- La versión 5 tiene como novedad un nuevo corazón para PHP, Zend Engine 2, que incorpora un nuevo modelo de objetos, mucho más cercano a lenguajes totalmente orientados a objetos usados en plataformas de desarrollo como Java o .Net.



Herramientas

-El curso utilizará ambientes Open Source para el desarrollo de páginas dinámicas, aplicables en entornos Windows y Linux: Entorno de desarrollo Eclipse, PHPEclipse y XAMPP.

Contenido Avanzado

-Cubre aspectos vinculados a la Programación Orientada a Objetos, UML, Principios de Diseño, Patrones de Diseño, Refactoring y creación de sitios web modulares.

Dirigido a:

Profesionales del área de sistemas con fuerte perfil orientado al desarrollo web con la intención de introducirse a la nueva versión del lenguaje Open Source que más expectativas a generado en Internet.

El curso fue diseñado para implementar sitios con la visión orientada en el desarrollo de sistemas de mediano y gran porte, donde la prioridad no es únicamente el componente gráfico y estético.

Temario

- Introducción a la Programación Orientada a Objetos
- Diseño Orientado a Objetos con UML
- Programación en 3 capas
- Diseño HTML/XHTML/CSS
- Framework Pear
- Templates Smarty
- Persistencia y Bases de Datos
- Manejo de Errores
- Refactoring
- Principios de Diseño
- Patrones de Diseño
- Versionado de Software (SCM)
- Web Services / XML
- Introducción a Ajax

Evaluación

El curso se evalúa mediante el desarrollo de una aplicación.

Duración
4 meses, los días martes y jueves, 3 horas teóricas y 3 horas prácticas por semana.

Requisitos de ingreso

Conocimientos base de programación

Aprobación

Trabajo obligatorio.

Comienzo: 24 de abril de 2006

¿Esto nos salvará de Windows Vista?

Es el proyecto de Novell (si, todavía existe y están tratando de reinventarse hacia GNU/Linux) para crear un nuevo escritorio gráfico que de un "salto tecnológico". Está basado en la tecnología Xgl y el producto se llama SUSE Linux Enterprise Desktop.


Más información en:

La era de Linux ya pasó...

La era GNU/Linux ya fue. Y si no te diste cuenta, eso sucedió durante el año 2004. Ya en el 2005 yo comentaba que hacer una charla sobre Linux era "repetirse", era hablar de temas que el promedio ya conocía. Era imposible sorprender a tu auditorio.

No había nada nuevo para contar.

En 1997, cuando me inicié en el tema, tuve que ayudar a preparar y a dictar una charla sobre "Unix en General" para nivelar los conocimientos de un grupo de personas que terminarían formando parte de un grupo de usuarios de Linux.

Han pasado muchos años, y se sigue escuchando el mismo diálogo monotemático: "Linux esto, Linux aquello, Linux para todo, sin Linux nada, etc".

"Linux ya fue"

Linux es un sistema operativo. Nada más. Es parte de la infraestructura, donde tu montas los proyectos de todos los tamaños y colores. Pero nada más. Es solo "infraestructura".

Ya superamos la revolución; pero parece que en la actualidad no tenemos nada nuevo que ofrecer y tenemos que seguir insistiendo sobre algo del pasado.

Lo que importa ahora, o mejor dicho, lo que siempre importó fueron los proyectos, los nuevos desarrollos, los nuevos paradigmas, los nuevos desafíos, las nuevas herramientas para enfrentar esos nuevos desafíos. Puedes tener un muy buen sistema operativo, pero si no tienes nada para correr sobre él... de qué sirve? ¿si tienes la aplicación que corre sobre el sistema operativo, pero no tienes clientes para ella?

¿No fue eso lo que sucedió con OS/2 de IBM? El mejor sistema operativo derrotado por el peor sistema operativo, técnicamente hablando.

No puedes vivir y sobrevivir repitiendo el mismo "verso"

Los artículos sobre Linux ya no venden como antes. Nadie se le ocurre publicar en una revista como se instala Linux.

¿O me dirás que no te has llevado la sorpresa de que alguien cercano que no tiene nada que ver con la informática te ha preguntado si estabas al tanto de algo llamado Linux?

Unix, Linux ... Linux, el Unix Moderno. Trajimos del cajón del olvido a Unix, y le lavamos la cara. Sí, pero tu me dirás que ahora es "libre"...

Ok, listo. Ya está.

Linux no es "disruptivo"

Entre los "consultores charlatanes" (no me incluyo ;-) está de moda decir que "esto" o "aquello" es disruptivo ("Que produce ruptura brusca"). "Esta" tecnología es disruptiva, la "forma de pensar" es disruptiva, es una "idea" disruptiva.

Linux, fue una tecnología que produjo en su momento una ruptura brusca, pero ya dejó de hacerlo.

¿Qué estamos esperando entonces?

Demos vuelta la hoja.

Estamos perdiendo la "carrera" y todo por quedarnos a observar nuestros propios "espejos de colores".

¿Cual es el nuevo desafío que tenemos por delante? ¿qué es lo que necesita el mercado? ¿estás escuchando a tus clientes? ¿has descubierto las nuevas necesidades y has logrado satisfacerlas con éxito? ¿se te han ocurrido formas de forzar las necesidades en tus clientes?

¿Antes podía vivir sin el teléfono, porqué ahora no puedo vivir sin mi celular? ¿realmente lo necesito? ¿o me obligaron a necesitarlo?

Google usa Linux

¿Eso hace la diferencia? ¿El éxito de Google se debe a Linux?

No nos dimos cuenta que estamos perdiendo la carrera. En el año 2000 dijimos que Linux desbancaría a Windows, y hasta el día de hoy escucho técnicos que lo repiten.

El viejo perdedor a retomado su camino y está dando pelea. Apple, la famosa empresa de productos como Mac, iPod, etc, está siendo el verdadero competidor y se está volviendo a ganar un espacio entre los consumidores.

¿Importa que sistema operativo usa el iPod?

¿Verdaderamente corre el sistema operativo OS X o corre Linux? No hace a la discusión, lo que importa es el producto en su conjunto: infraestructura + software + servicios + calidad + modelo de negocio...

No podemos estar toda la vida repitiendo el mismo mensaje... con el tiempo perderá fuerza.

La era de Linux ya pasó... ya es hora de que hablemos de otra cosa.

PHP6, Framework, Ruby On Rails, Ajax, Videojuegos, Usabilidad, eGovernment, Patrones de Diseño, Desarrollo Agil, Estándares, Web 1.0, Web 2.0, Celulares, Podcast, Webcast, Weblogs...

¿Usaré Linux? Si, donde pueda, pero no siempre ... no me sirve para todas las situaciones.

Pero por favor, no me vuelvan a decir que "compilar el kernel" es fundamental para los negocios de mi cliente.

Cambiar la hora de los servidores GNU/Linux

En mi país, You are Gay, habíamos cambiado la hora para aprovechar la luz solar y ahorrar energía eléctrica. Lo cómico del asunto es que mientras toda la región tenía la misma hora, si tu entrabas a nuestro país debías ajustar tu reloj como si hubieras cambiado de huso horario (aunque es coherente, vivimos a contramano del mundo ;-).

El viernes a última hora recibo el fatídico recordatorio de que habría que actualizar la hora de los servidores el día domingo para que al día siguiente no se generara el problema de que todo registro de horas quedara con 1 hora de atraso (logs, bases de datos, aplicaciones, etc).

Fatídica orden para hacerte perder unos minutos y tratar de recordar "¿cómo era que se cambiaba la hora de los servidores?", más aún si te quieren obligar a venir muy temprano solo para esa tarea... y piensas: "¿y cómo lo puedo hacer a distancia, desde casa, a través de una conexión remota y usando la línea de comandos?"

Y bueno, dicen que "la necesidad es la madre de las invenciones", o debería ser "¿la haraganería nos hace muy creativos?" ;-)

El comando para saber la fecha de nuestro servidor es "date", y el resultado sería:
bd:~ # date
Tue Mar 14 11:22:57 ART 2006
Y el cambio sería con el mismo comando, pasando una cadena de texto:
date --set="10:22:57"
Y si justo haces el cambio de hora cuando cambió de día, simplemente repites la cadena desde la parte que quieres modificar:
date --set="Mar 13 10:22:57"
Otra forma más eficiente es tener sincronizado el reloj del servidor con otro que se encargue de brindar el servicio de NTP:
/usr/sbin/ntpdate time.nist.gov
Si la hora de tu servidor se atrasa, tomará como referencia un servidor externo y será sincronizado cada vez que ejecutemos ese comando.

Se puede agregar al "planificador de tareas" (a.k.a. crontab) para que corra cada una hora:
0 */1 * * * /usr/sbin/ntpdate time.nist.gov > /dev/null
Esperemos que hasta el año que viene no necesite cambiar otra vez la hora de los servidores ;-)

PostgreSQL: crear tablas temporales a partir de una consulta SQL

Siguiendo con mi trabajo de DBA Part Time, tuve que resolver el siguiente problema: en nuestra base de datos existe información de una "compra de mercadería" de muchos ítems que podía ser utilizada como plantilla para otro caso muy similar. Esto permitiría ahorrarles tiempo y trabajo a los usuarios que no tendrían que volver a ingresar toda la información manualmente, solo modificar los datos que cambian.

Esta información se encuentra desperdigada en varias tablas. Mi estrategia es crearme una o varias tablas temporales, obtener los datos requeridos, modificarlos a gusto, y finalmente, integrarlos a la tabla original. Este procedimiento me permite trabajar de forma segura, limpia, ordenada, sin arriesgarme a cometer errores en la tabla original.

Descarto que este tipo de situaciones se deben hacer primero en una base de datos de prueba, documentarlo y armar scripts automatizados (que no dependen de un dato que pueda ingresar de forma errónea), y cuando todo está correctamente verificado, se aplica en la base de producción.

No sería la primera vez que he estado obligado (por las circunstancias ;-) a trabajar directamente en la base de datos de producción, y tampoco la última vez que cometeré errores con pérdidas de datos (quién no escribió alguna vez un UPDATE sin WHERE ;-).

1) Leyendo el manual de Postgres me encuentro que puedo crear una copia de la estructura de una tabla con los datos que yo quiera, de la siguiente forma:


CREATE TABLE compras_tmp AS
SELECT * FROM compras WHERE id = '12345';


A partir de la tabla "compras" creo una tabla temporal llamada "compras_tmp" con los datos de la consulta que se extrajo de la tabla original.

2) Luego, modifico en la tabla temporal el valor clave y todos los datos que se requieran.


UPDATE compras_tmp SET id = '999999' where id = '12345';


3) Luego de que los datos fueron modificados, hay que incorporar la tupla a la tabla de producción, ejecutando el siguiente comando:


INSERT INTO compras SELECT * FROM compras_tmp;


Insertando en la tabla "compras" todos los datos que se encuentran en la tabla temporal.

4) Y lo que hacemos siempre los programadores "con aires de DBA", es olvidarnos de borrar las tablas temporales que luego nunca más se usarán:


DROP TABLE compras_tmp;


Espero que les pueda ser útil si alguna vez tiene que hacer algo similar en PostgreSQL.

La definición del día: "Win-dows"

"Win·dows Sustantivo. Una extensión y entorno gráfico de 32 bits diseñado para un patch de 16 bits para un sistema operativo de 8 bits, originalmente creado para un procesador de 4 bits, por una empresa de 2 bits que no tolera ni 1 bit de competencia".
Extraido de BootLog

Entradas populares