Pensamientos ágiles
Betanzos en la red
Diciembre 31st, 2006 - [Enlace local]
Cuando comencé este blog como continuación de mi viejo blog uno de mis propósitos era poner muchas más entradas sobre mi ciudad natal, Betanzos. Pero la verdad es que con el cambio de ciudad, ahora estoy mucho más alejado de mi ciudad (sÃ, desde el 1467) de lo que me gustarÃa.
Por suerte hay una serie de recursos en Internet que ya hacen el trabajo por mi, y me mantienen actualizado. el pasatiempo es probablemente uno de los más actualizados, con posts bastante frecuentes. A partir de ahÃ, hay otra serie de blogs con diferentes contenidos. PodrÃa recopilarlos aquÃ, pero ya lo han hecho por mi.
El caso es que no deja de ser curioso como el movimiento de los blogs, reciente donde los haya, ha hecho aumentar exponencialmente el número de páginas relacionadas con Betanzos, cuando hace varios años se contaban con los dedos de una mano. Aún más curioso es ver como muchos de los blogs tienen una clara tonalidad polÃtica, para un lado, para el otro, o para el medio. No es algo que me moleste especialmente, aunque sà que confieso que no leo ese tipo de posts.
En fin, de cualquier modo aprovecho para desearos a todos los que os pasáis por aquà un Feliz Año 2007. Por mi parte toca ir a cenar ya, tomarse las uvas, y un año más salir por una de las mejores ciudades (sÃ, desde el 1467) españolas para celebrar el fin de año.
¡Feliz 2007!
» Leer más, comentarios, etc...
ZingZang.org
¿Comienza el proselitismo?
Diciembre 31st, 2006 - [Enlace local]
Es medio casualidad, en serio. Yo no quería. No voy a quiero empezar una campaña de proselitismo de Opera, pero el caso es que encontré una página interesante donde se «compara» una lista de 150 extensiones de Firefox con configuraciones o información sobre cómo conseguir una funcionalidad similar en Opera. Algunas veces simplemente viene de serie, otras veces hay una configuración o «extensión» similar, y otras veces no hay nada equivalente.
Pos-eso, miren las 150 extensiones de Firefox más populares y Opera, y descubran extensiones nuevas de Firefox, o prueben Opera, o ambas cosas... Los que me conocen ya saben que me da igual que la gente use Firefox (o Konqueror, o Safari, o el que sea). De hecho, la diversidad en la web me gusta y es algo que me preocupa. El único problema que tengo es que se use una patera para «navegar» por Internet...
» Leer más, comentarios, etc...
Buayacorp
Nuevo año, nuevas espectativas
Diciembre 31st, 2006 - [Enlace local]
Empiezo a escribir esta entrada con una ligera sensación de decepción y tristeza...
- Decepción: porque este año que acaba, a pesar de que aprendà bastante en algunos aspectos, lamentablemente no ha sido como hubiera querido.
- Tristeza: por toda la carga emotiva que he tenido estos últimos dÃas, espero que esto se me pase en unas cuantas horas, al menos por un momento... aunque leer cosas como la siguiente te hacen sentir un poco mejor:
A veces la vida te pega en la cabeza con un ladrillo. No pierdas la fé. Estoy convencido que lo único que me mantuvo en pie era el hecho que amo hacer lo que hago. Tienes que encontrar eso que amas; esto aplica en tu trabajo como en tus relaciones amorosas. Una gran parte de tu vida estará enfocada en tu trabajo y la única manera de sentirte realmente satisfecho es creer que lo que haces es un excelente trabajo. La única manera de lograr un excelente trabajo es amando lo que haces. Si no lo encuentras todavÃa sigue buscando. No te rindas. Como todas las cosas relacionadas al corazón, sabrás exactamente cuando lo encuentres. Y, como en cualquier gran relación se va poniendo mejor y mejor a medida que el tiempo pasa. Asà que sigue buscándolo hasta que lo encuentres, no te rindas.
(…)
Tu vida tiene un lÃmite, no la malgastes viviendo la de otra persona. No atrapes a ti mismo por un dogma el cual implica vivir con los resultados de los pensamientos de terceros. No dejes que el ruido de las opiniones de otros ahoguen tu voz interna. Y lo más importante: ten el coraje de seguir tu corazón y tu intuición. Ellos de alguna manera saben lo que realmente quieres ser; el resto es secundario.
Para no cometer los mismos errores del 2006, pongo aquà algunas cosas que tengo que realizar el siguiente año (en especial el punto 1):
- Conseguir una beca para realizar un master -fuera de Perú- en Ciencias de la Computación.
- Reunir la mayor cantidad de dinero posible para solventar los gastos que impliquen la realización del punto 1. Se agradece de antemano si colaboran con lo de Adsense
- Intentar realizar mi tesis de grado. Este punto ha sido la piedra en el zapato del 2006, ya que con el trabajo se me ha hecho dificil avanzar algo.
- Mejorar en gramática y ortografÃa.
- Publicar entradas en este blog con regular frecuencia.
- Convencer a mis amigas(os) y familiares para que inicien un blog.
- Abrir un blog personal.
Finalmente, doy las gracias a cada cada uno(a) de ustedes por haber dedicado parte de su valioso tiempo a leer este pequeño blog, espero que podamos seguir intercambiando algunas ideas/opiniones en el futuro.
Que tengan un feliz y productivo año 2007.
» Leer más, comentarios, etc...
mundoxbase.info
Mysql, la integridad referencial en la práctica
Diciembre 31st, 2006 - [Enlace local]
Una vez aquÃ, vamos a introducir nuestro primer registro en una de las tablas, por ejemplo, la de artÃculos:
Query OK, 1 row affected (0.03 sec)
-
Como podemos ver, utilizamos la instrucción INSERT INTO seguido del nombre de la tabla dónde vamos a insertar los datos (VALUES) y los datos a insertar encerrados entre paréntesis y separados por comas.
En nuestro ejemplo, el primer dato (correspondiente al campo “Codigo”) que como recordaréis es un campo autoincremental, lo dejamos a “null”, de tal forma que el propio Mysql se encargará de asignarle un código correlativo.
El segundo dato, corresponde al campo “Descripcion” y el tercer dato corresponde al campo “similar”, que como esta artÃculo no tiene ningúno similar, lo dejamos a null (sin datos).
También podemos ver como Mysql nos indica que todo está OK, y que nuestra instrucción afecta a un registo (el que hemos insertado) y el tiempo empleado en terminar la operación.
Podemos ver cómo ha quedado nuestra tabla “Articulos” haciendo una selección
+——–+—————–+———+
| Codigo | Descripcion | Similar |
+——–+—————–+———+
| 1 | Primer articulo | NULL |
+——–+—————–+———+
1 row in set (0.00 sec)
A la hora de insertar un nuevo registro, también podemos indicar los campos que intervienen en la inserción. Imaginaros una tabla con, no sé, 30 campos, y que sólo queremos insertar el nombre del artÃculo, en lugar de poner
-
Podemos hacerlo mucho más sencillo con
Query OK, 1 row affected (0.02 sec)
-
Como vemos, todo consiste en indicar, además del nombre de la tabla, los campos que se ven afectados por la inserción encerrados entre paréntesis.
AsÃ, en este caso, el campo autoincremental se incrementará automáticamente y el campo similar tomará el valor Null, su valor por defecto.
+——–+——————+———+
| Codigo | Descripcion | Similar |
+——–+——————+———+
| 1 | Primer articulo | NULL |
| 2 | Segundo articulo | NULL |
+——–+——————+———+
2 rows in set (0.00 sec)
Otra opción que nos ofrece Mysql es insertar varios registros a la vez, para ello tan sólo es necesario encerrar entra paréntesis los distintos registros y separarlos por comas
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
+——–+——————+———+
| Codigo | Descripcion | Similar |
+——–+——————+———+
| 1 | Primer articulo | NULL |
| 2 | Segundo articulo | NULL |
| 3 | Tercer articulo | NULL |
| 4 | Cuarto articulo | NULL |
| 5 | Quinto articulo | NULL |
+——–+——————+———+
5 rows in set (0.00 sec)
Vamos ahora a insertar las caracterÃsticas de nuestro primer artÃculo
Query OK, 1 row affected (0.02 sec)
Query OK, 1 row affected (0.02 sec)
+——————+——-+———+
| Articulos_Codigo | Peso | Volumen |
+——————+——-+———+
| 1 | 10.25 | NULL |
| 2 | 2.20 | NULL |
+——————+——-+———+
2 row in set (0.00 sec)
Veamos ahora que pasa si intentamos pasarnos de listos y pretendemos insertar de nuevo otras caracterÃsticas para nuestro primer artÃculo
ERROR 1062 (23000): Duplicate entry ‘1′ for key 1
¡Exacto!, fijaos que el campo Articulo_Codigo de la tabla CaracterÃsticas es una clave primaria, y por lo tanto no pueden existir dos registro con el código 1 en dicho campo.
¿Y si intentamos crear las caracterÃsticas de un artÃculo que no existe?
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint
fails (`prueba/caracteristicas`, CONSTRAINT `caracteristicas_ibfk_1` FOREIGN KEY
(`Articulos_Codigo`) REFERENCES `articulos` (`Codigo`) ON DELETE CASCADE ON UPDATE NO ACTION)
¡Mysql nos ha vuelto a pillar! Al insertar unas caracterÃsticas para un artÃculo inexistente estamos rompiendo una de las reglas de integridad referencial, que dice que todo artÃculo puede tener unas caracterÃsticas, pero que las caracterÃsticas siempre corresponderán a un determinado artÃculo.
Y… si borramos nuestro primer artÃculo?
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM articulos;
+——–+——————+———+
| Codigo | Descripcion | Similar |
+——–+——————+———+
| 2 | Segundo articulo | NULL |
| 3 | Tercer articulo | NULL |
| 4 | Cuarto articulo | NULL |
| 5 | Quinto articulo | NULL |
+——–+——————+———+
4 rows in set (0.00 sec)
¡Ojo con el delete!!. Si se nos ocurre poner simplemente DELETE FROM articulos nos “pulimos” TODOS los datos de la tabla !!.
Recordar siempre que en sql trabajamos sobre la base de datos completa, no como con las dbf que estábamos posicionados en un determinado registro y nuestras acciones actuaban sólo sobre ese registro.
En clipper, al hacer un “delete” afectaba al registro sobre el que estábamos posicionados, en cambio, en sql no estamos “posicionados” en “ningún sitio”, por eso, al hacer un delete en Mysql le tenemos que decir qué tabla (FROM) y qué registro de la tabla (WHERE)
Hemos visto que nuestro “delete” ha borrado el registro indicado, pero… qué ha pasado con las caracterÃsticas asociadas al artÃculo borrado. Veamos la tabla caracterÃsticas
+——————+——+———+
| Articulos_Codigo | Peso | Volumen |
+——————+——+———+
| 2 | 2.20 | NULL |
+——————+——+———+
1 row in set (0.00 sec)
¿Os acordáis del ON DELETE CASCADE?
Mysql se ha encargado por nosotros de “propagar” el borrado de datos a las tablas indicadas.
Hoy hemos visto cómo efectivamente la integridad referencial funciona y nos ahorra el trabajo de realizar por nosotros mismos parte del mantenimiento propio de una base de datos.
El año próximo veremos con un poco más de detalle la inserción y modificación de datos dentro de una tabla, y cómo nos pueden ayudar los procedimientos almacenados.
Pero antes de terminar, hagamos una pequeña ampliación a nuestra tabla “artÃculos”. Vamos a añadir dos nuevos campos a la tabla. Veremos cómo usarlos en el próximo capÃtulo
-> ADD creado date,
-> ADD modificado date,
-> ADD cambios Tinyint;
Query OK, 4 rows affected (0.16 sec)
Records: 4 Duplicates: 0 Warnings: 0
+————-+——————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+——————+——+—–+———+—————-+
| Codigo | int(10) unsigned | NO | PRI | NULL | auto_increment |
| Descripcion | varchar(30) | YES | | NULL | |
| Similar | int(10) unsigned | YES | MUL | NULL | |
| creado | date | YES | | NULL | |
| modificado | date | YES | | NULL | |
| cambios | tinyint(4) | YES | | NULL | |
+————-+——————+——+—–+———+—————-+
6 rows in set (0.01 sec)
» Leer más, comentarios, etc...
avemundi
blog abandonado ¿ o no ?
Diciembre 30th, 2006 - [Enlace local]
Mi amigo Manuel está enfadado conmigo porque dice que tengo el blog abandonado. En parte tiene razón, pero el abandono es algo temporal. Hay momentos en la vida, y el último mes ha sido uno de ellos, en que escribir...
» Leer más, comentarios, etc...
Spejman's Blog
Completar con el tabulador y colorear irb con Wirble
Diciembre 30th, 2006 - [Enlace local]
Hoy he probado Wirble siguiendo el tutorial en ingles de Ruby Inside y lo encuentro muy útil, sobretodo porque permite autocompletar con el tabulador! Se acabó utilizar print objeto.methods.sort.join("\n") cada vez que no te acuerdas del nombre de un método.
Para utilizarlo hay que instalar la gem:
gem install -y wirble
Y si utilizas linux hay que editar el archivo ~/.irbrc y añadir:
require 'rubygems'
require 'wirble'
Wirble.init
Wirble.colorize
En Windows no se como funcionará si alguien lo sabe que me lo diga y actualizo el post. En mac os supongo que funcionará igual.
» Leer más, comentarios, etc...
Syntax Error
Sistema de backups automático con Hostgator
Diciembre 29th, 2006 - [Enlace local]
Recién me he instalado un ordenador como servidor casero (éso es, para gestionar la mula, las fotos, almacén, ...) y se me ha ocurrido crear un sistema de backup del hosting a mi servidor de casa.
El sistema es muy simple pero es rápido y efectivo. Se basa en un shell script que realiza un dump de las bases de datos y comprime el archivo. Luego lo mete en directorios para organizarlo por dÃas, meses y semanas. En torno a él, se monta todo el sistema usando el cron del hosting y el cron local de alguna forma para esquivar las limitaciones de mi plan contratado (no acceso a shell script). En éste artÃculo explico el tinglado.
Un saludo especial a Mr Nice! Lo hicimos todo desde su casa con el putty, sentados en el sofá ![]()
Lado servidor
Todo parte del script de backup. Instalado en un cron se va a ejecutar diáriamente (yo lo he puesto a las 00:00 de cada dÃa) y el script va a generar los archivos.gz diarios, semanales, y mensuales cuando toque. El script tiene su web original aquÃ, pero lo he guardado aquà para no perderle la pista. Para copiarlo, selecciónalo todo y guárdalo como mysqlbackup.sh.
Antes de subirlo, tenemos que especificar los parámetros del script. Lo abrimos y encontramos algo como ésto:
# Username to access the MySQL server e.g. dbuser
USERNAME=usuario_hosting# Username to access the MySQL server e.g. password
PASSWORD=contraseña_hosting# Host name (or IP address) of MySQL server e.g localhost
DBHOST=localhost# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3"
DBNAMES="nombre_db1 nombre_db2"# List of DBBNAMES for Monthly Backups (See docs below)
MDBNAMES="mysql $DBNAMES"# Backup directory location e.g /backups
BACKUPDIR=/ruta/absoluta/de_tu/directorio_de/destino/en_tu/hosting/# Separate backup directory and file for each DB? (yes or no)
SEPDIR=yes# Mail backup log? (yes or no)
MAILLOG=yes# Email Address to send log to? (user@domain.com)
MAILADDR=tu@email.com
Nota: El script está pensado para bajarse varias bases de datos de golpe usando un sólo usuario y contraseña, pero si hemos creado cosas con el Fantastico, cada una tendrá su usuario y contraseña, cosa que no se puede definir en el script. En Hostgator, con la contraseña de tu cuenta en Hostgator tienes acceso a todas las bases de datos, asà que en nuestro ejemplo (como es mi caso) vamos a hacer todas las bases de datos de todos los dominios en mi cuenta de golpe, usando el script una sóla vez.
Las variables que definiremos son:
- USERNAME: Usuario de la cuenta de Hostgator
- PASSWORD: Contraseña de la cuenta de Hostgator
- DBHOST: Es el nombre de la máquina al que conectarse. Casi siempre es "localhost".
- DBNAMES: Nombres de las bases de datos que se van a bajar, separados por espacios dentro del entrecomillado. Puede ser una o varias. No funciona el asterisco [*]
- BACKUPDIR: Ruta absoluta que lleva al directorio base de los backups, por ejemplo "/home/usuario/public_html/Backups/"
- MAILADDR: Dirección de correo dónde enviar el log del proceso una vez finalizado.
Guárdalo y súbelo a un directorio de tu hosting, por ejemplo, cronjobs, sétale derechos de ejecución para todos (incluso el nobody) y abre el CPanel de Hostgator. Allà hay un icono llamado Cron jobs, lo clicamos y ya lo tenemos.

Aquà le especificamos la ruta absoluta al script y la frecuencia con el que lo llamaremos. Luego guardamos y listo.
Por otro lado, tenemos que crear el directorio base para los backups, que será el que tengamos especificado en BACKUPDIR. Recuerda de darle permisos de escritura para el usuario nobody!
Ok, ya tenemos preparado el sistema en el lado servidor. Cada dÃa a las 00:00 se ejecutará y nos creará los backups que toque. Para probarlo lo único que podemos hacer (mi plan no me da servicio de ssh) es crear un archivo PHP que utilice la instrucción exec() para ejecutarlo y ver si lo crea todo bién. SerÃa algo asÃ:
Apuntamos al navegador dónde lo hayamos subido y ejecutamos.
Ahora nos queda recogerlo des de casa...
Lado local
Nota: Para hacer ésta parte supongo que se dispone de una máquina con Linux encendida siempre (o, almenos a unas horas determinadas). Supongo que con Windows podrÃa llegar a funcionar, pero ésta solución requiere un Linux. Si cuando vas a dormir apagas el ordenador, esta solución se puede adaptar fácilmente. Simplemente pasa del setado del cron y ejecuta directamente cuando quieras el backup el sh que vamos a crear.
Primero de todo necesitamos una manera para conectarnos al servidor, que sea fácilmente "scriptable", es decir, sequenciarla en un proceso automático que pondremos en un cron. Tenemos que recordar que no tenemos acceso a ssh y, por tanto, no podemos hacer un scp. PodrÃamos intentar jacer un scp inverso, es decir, en vez de conectarnos al hosting desde casa para bajarnos los archivos, podrÃamos conectarnos desde le hosting a casa y enviarlos (imaginando que el scp cliente estuviera permitido), pero lo bamos a hacer muuuucho más sencillo: por wget.
Como el wget puede funcionar con FTP, usaremos éste para conectarnos especificando el numbre de usuario y la contraseña, y la ruta al directorio base de los backups. Además, le pondremos el modificador -r para que lo baje todo a partir del directorio especificado. Yo también le pongo el parámetro -a con un nombre de archivo para que me guarde log del trabajo hecho.
Pero tenemos que recordar que wget lo guarda en el directorio desde dónde se ejecuta, asà que debemos cambiar al directorio dónde queremos que se guarde, asà que al final lo mejor es meterlo todo en un script sh (por ejemplo, backup_hostgator.sh), que tiene el siguiente contenido:
cd /directorio/destino
wget -r -a /directorio/destino/backup.log ftp://usuario:contraseña@ftp.midominio.com/public_html/Backups/
luego le damos derechos de ejecución y ya lo podemos probar. Si no tienes una máquina encendida siempre, éste es tu final. Ejecuta este archivo periódicamente para bajarte los backups generados en el hosting.
El último paso es automatizar la bajada poniendo el script en el cron. Para editar el archivo de acciones del cron tecleamos
crontab -e
y añadimos la siguiente lÃnia (consulta Using cron para saber más):
0 1 * * * * /ruta/del/script/backup_hostgator.sh
Y ya lo tenemos! Cada dÃa a las 00:00 va a generar los archivos de backup, y cada dÃa as 01:00 va a descargarse los archivos a local.
Preguntas fáciles
- El archivo de log puede llegar a crecer desmesuradamente! Pues si.
- Si los archivos de backup ya existen? Se sobreescribirán
- En el servidor se van a ir acumulando los backups! Pues si. Tendrás que ir haciendo limpieza. Puede que haga otro cron para ello
» Leer más, comentarios, etc...
Programación, literatura y otras artes menores » Programación
Consideraciones sobre los IDES
Diciembre 29th, 2006 - [Enlace local]
Resulta que ultimamente he estado probando lenguajes de programación, aunque esta práctica tan entretenida la tuve que dejar por un tiempo. En mi breve y entretenido periplo por los lenguajes de programación, tuve la oportunidad de usar diversos ides para diversos lenguajes. SÃ, soy de los que piensan que el vim es para hacer scripts [...]
» Leer más, comentarios, etc...
xailer.info (esp)
¡ Feliz año 2007 !
Diciembre 29th, 2006 - [Enlace local]
Estimados usuarios de Xailer,
Tan sólo desearos un feliz y prospero año 2007 a todos. Qué esperamos sea sin duda el año de Xailer ;-)
Un cordial saludo,
» Leer más, comentarios, etc...
Buayacorp
2da Olimpiada “CD de Oro�
Diciembre 29th, 2006 - [Enlace local]
Hace algunos minutos me acabo de enterar de la 2da Olimpiada "CD de Oro", organizado por un instituto tecnológico de Perú. Las áreas de competencia de este concurso están divididas en:
- Diseño de Páginas Web Estáticas
- Diseño de Páginas Web Dinámicas
- Desarrollo de Aplicaciones de Escritorio
- Desarrollo de Aplicaciones Cliente-Servidor
- Desarrollo de Aplicaciones para Oficina
Dado que últimamente ando algo corto de dinero
, me puse a leer las bases del concurso para poder participar en la categorÃa de Diseño de Páginas Web Dinámicas
, y miren uno de los -tantos- errores que encontré:
Diseño de Páginas Web Dinámicas
Una página es dinámica cuando se incluye cualquier efecto especial o funcionalidad y para ello será necesario utilizar otros lenguajes de programación, aparte del HTML, como el PHP, ASP y JavaScript o muchos mas como Ajax,Ruby on Rails; estos permiten responder de manera inteligente a las demandas del navegador y que permiten la automatización de determinadas tareas tediosas e irremediables como pueden ser las actualizaciones, el tratamiento de pedidos de una tienda virtual, etc.
En ese sentido, la página web dinámica es aquélla, cuyo contenido se genera a partir de lo que un usuario introduce en un web o formulario.
Me parece bien que hagan este tipo de concursos, pero los organizadores mÃnimamente deberÃan preocuparse en poner cosas coherentes en las bases, lo único que logran con este tipo de errores es desprestigiar el concurso y su institución.
¿O será que hoy 28 cambiaron intencionalmente las bases de ese concurso? Oh wait!
» Leer más, comentarios, etc...
mundoxbase.info
159 inocentes
Diciembre 28th, 2006 - [Enlace local]
Vaya, parece que ha “Colao” la inocentada de este año, al final han picado 150 inocentes (menos uno) con la noticia y eso que tenÃa algunos guiños que la hacÃan cuando menos “sospechosa”, como que los dos protagonistas se llamaran Bonnie y Clyde, o que sus apellidos fueran Starky y Hutch
Lo cierto es que ayer 28 de Diciembre batimos nuestros records de audiencia, ya que se contabilizaron 207 visitas a nuestro blog y casi 500 páginas vistas. Además la broma fue propagada a otras web como MCTekk , Meneame , sferacero o xabiorama ( y es que en Internet las noticias vuelan que se las pelan)
Bueno, sólo nos queda esperar dentro de 365 la noticia siga sonando a broma.
Por si alguien se la perdió, podéis consultar el texto Ãntegro de “la noticia” aquÃ
» Leer más, comentarios, etc...
El arte de programar
Sun Solaris 10 en mi casa
Diciembre 28th, 2006 - [Enlace local]
Después de tres semanas de haber rellenado el formulario para que me enviasen los dvd del sistema operativo Solaris 10 (uno para SPARC y otro para 32 y 64 bits) y las herramientas de desarrollo Sun Studio 11, finalmente ha llegado:

Me gusta mucho linux, pero tener un unix en mis manos (y próximamente en mi ordenador) es un placer de informático :)
» Leer más, comentarios, etc...
Buayacorp
Video sobre PostgreSQL
Diciembre 28th, 2006 - [Enlace local]
Gavin Sherry, explica sobre el funcionamiento interno de WAL y otras caracterÃsticas que pueden ser de interés para los DBA que trabajen con esta base de datos:
In computer science, write ahead logging (WAL) is a family of techniques for providing atomicity and durability (two of the ACID properties) in database systems.
In a system using WAL, all modifications are written to a log before they are applied to the database. Usually both redo and undo information is stored in the log.
The motivation for WAL is to allow updates of the database to be done in-place. The other obvious way to implement atomic update is with shadow paging, which is not in-place. The main advantage of doing updates in-place is it reduces the need to modify indexes and block lists.
Fuente: http://postgresql.fastware.com/blog/fujitsu_advanced_postgresql_talk_1
» Leer más, comentarios, etc...
programania
.Net 3.0. El primer paso
Diciembre 28th, 2006 - [Enlace local]
A finales de noviembre salió la tercera versión de la máquina virtual, y con ella trajo muchas mejoras (que me costará bastante digerirlas).
Pero claro, llega la pregunta del momento: Y hay algún IDE que sea gratuito (que perder dinero a parte de tiempo es una sensación desagradable) que me permita evaluar la nueva máquina virtual.
La respuesta es sÃ. Microsoft ha sacado unas versiones gratutitas (de funcionalidad reducida y para aprender a utilizar la tecnologÃa) de lo que puede llegar a hacer el Visual Studio 2005. Esta serie de productos son los Visual Express, y están preparados para funcionar con la máquina virtual 2.0.
Pero entonces, ¿cómo hacer para poder programar con la nueva máquina virtual?. Pues para ello, lo primero que hay que hacer es bajarse la máquina virtual. Una vez hecho esto, sólo queda decirle a la/s herramienta/s a usar que se dispone de una nueva máquina virtual. Asà que ahora hay que bajarse e instalar las extensiones.
Pero llegan las pegas. Al utilizar las series express, el diseñador gráficos de interfaces para XAML no esta soportado, y si se quiere usar el Windows Comunications Framework, es necesario olvidarse de todo lo hecho y bajarse el Windows SDK, cuya imagen ocupa aproximadamente 1 GB.
Visto todo esto, se puede concluir que hay una posibilidad para evaluar la potencia de las nuevas tecnologÃas que trae .Net 3.0 aunque sea de forma reducida (Para probar tecnologÃas como Windows Communication Foundation o Windows Workflow Foundation hay que recurrir a otras formas). No hay que olvidar que existe el Windows SDK, que no se ha tenido en cuenta a la hora de elaborar este artÃculo.
» Leer más, comentarios, etc...
Rubà Sobre Rieles
Blog suspendido hasta nuevo aviso (actualizado)
Diciembre 28th, 2006 - [Enlace local]
Los observadores deben haber detectado que últimamente no estoy respondiendo tan seguido los correos ni los comentarios en este blog. He recibido en los últimos tiempos amenazas y difamaciones de todo tipo, desde el ámbito laboral como en el personal, tanto fÃsicas como legales, por medios digitales y analógicos.Es imposible mantener un blog con opiniones personales sin estar recibiendo constantemente presiones de censura por parte de mentes mediocres pero que tienen poder. En paÃses desarrollados la "comunicación" es viable, y está en nuestros derechos poder opinar y criticar libremente, sean personas, empresas u organizaciones.
Pero Uruguay es el centro del "tercer mundo" y aquà las cosas son distintas. Es un paÃs chico pero un infierno grande. La democracia ni la libertad de expresión existen.
Es difÃcil ser transgresor en esas condiciones, pero por seguridad de mi familia he decidido suspender mis blogs hasta nuevo aviso.
No me doy por vencido, pero tengo otras prioridades antes.
Abrazos.
» Leer más, comentarios, etc...
PHP Senior
Blog suspendido hasta nuevo aviso (actualizado)
Diciembre 28th, 2006 - [Enlace local]
Los observadores deben haber detectado que últimamente no estoy respondiendo tan seguido los correos ni los comentarios en este blog. He recibido en los últimos tiempos amenazas y difamaciones de todo tipo, desde el ámbito laboral como en el personal, tanto fÃsicas como legales, por medios digitales y analógicos.Es imposible mantener un blog con opiniones personales sin estar recibiendo constantemente presiones de censura por parte de mentes mediocres pero que tienen poder. En paÃses desarrollados la "comunicación" es viable, y está en nuestros derechos poder opinar y criticar libremente, sean personas, empresas u organizaciones.
Pero Uruguay es el centro del "tercer mundo" y aquà las cosas son distintas. Es un paÃs chico pero un infierno grande. La democracia ni la libertad de expresión existen.
Es difÃcil ser transgresor en esas condiciones, pero por seguridad de mi familia he decidido suspender mis blogs hasta nuevo aviso.
No me doy por vencido, pero tengo otras prioridades antes.
Abrazos.
» Leer más, comentarios, etc...
design-nation.blog/es
Cosas que el código no hace (aunque las haga en las pelÃculas)
Diciembre 28th, 2006 - [Enlace local]
Bastante divertido. Creo. Sobre todo el punto 8.
» Leer más, comentarios, etc...
Buayacorp
Y el ganador es…
Diciembre 28th, 2006 - [Enlace local]
Bien señores, el sorteo ya tiene un feliz ganador: Karonte
El código para determinar el ganador ha sido casi el mismo que se empleó en un sorteo anterior, si tienen curiosidad, pueden descargarlo desde esta dirección.
Por favor Karonte, escrÃbeme a alex at buayacorp dot com indicandome tu nombre completo y cuenta de paypal. Esperaré hasta las 9 p.m. (GMT-5) del 28/12/2006, caso contrario me veré obligado a hacer un nuevo sorteo
Gracias a todos los que participaron!
» Leer más, comentarios, etc...
mundoxbase.info
Microsoft compra Mysql
Diciembre 27th, 2006 - [Enlace local]
Según conferencia de prensa publicada en MSDN TV a primera hora de la tarde de hoy (madrugada en España), Bonnie Hutch, Vicepresidente ejecutivo y responsable de ventas de Mysql AB, ha anunciado la adquisición por parte de Microsoft del software de gestión de bases de datos Mysql.
Clyde Starky, responsable de adquisicionesde Microsoft ha señalado que tras los últimos acercamientos de la empresa de Redmon al mundo Linux y el apoyo a la plataforma Php, la adquisición de Mysql era la evolución lógica de su nueva polÃtica respecto al software libre.
Al parecer, la intención de Microsoft es renombrar el producto, que a partir de enero pasará a denominarse Mycro$oft Sql y pasará a reeemplazar al actual Sql Server Express edition, al cual se dejerá de ofrecer soporte de manera inminente.
De este modo, Microsoft se asegura un puesto predominante en el mundo de las bases de datos, tanto en plataformas windows como linus.
Más información aquÃÂ
» Leer más, comentarios, etc...
mundoxbase.info
Mensajes predefinidos para Xailer
Diciembre 27th, 2006 - [Enlace local]
Bingen Ugaldebere nos manda su primera colaboración para Xailer, consistente en un conjunto de funciones especÃficas para mostrar distintos tipos de mensajes por pantalla, desde un sencillo MsgEdit donde pedir al usuario una fecha a un sistema de comunicación entre los distintos usuarios de una aplicación.
Cerca de una docena de funciones que destacan por su sencillez a la hora de usarlas y su excelente documentación.Veréis como desde el primer momento se convierten en una utilidad imprescindible.
Gracias por tu colaboración Bingen !!!
Descargar fichero: Mensajes.rar
» Leer más, comentarios, etc...
Spejman's Blog
Instalar ruby gems en servidores compartidos sin permisos de root
Diciembre 27th, 2006 - [Enlace local]
Para realizar esto necesitamos saber donde están alojadas actualmente las ruby gems y añadir un nuevo repositorio en un subdirectorio nuestro (por ejemplo /home/Nombre_De_Usuario/gems), cambiando las variables GEM_PATH y GEM_HOME
Este pequeño truco nos permite tener un servidor 100% funcional para trabajar con Ruby on Rails en servidores de hosting con precios muy competitivos como Site5, que perdonad por la publicidad pero me impresionó: ofrecen unos atractivos 5TB de transferencia al mes, 55 Gb de espacio, 55 dominios, etc por 5$ al mes si pagas 2 años por adelantado, osea 120$ pero tienes 60 dÃas de prueba, si no te gusta te devuelven el dinero, bueno no hago más publicidad, si os interesa aquà tenéis más información: Site5
Explicación paso a paso
Para ver dónde están las ruby gems actualmente hay que ejecutar el comando desde una consola en el servidor compartido:
gem environment
Este comando generará una salida similar a esta:
Rubygems Environment:
- VERSION: 0.8.10 (0.8.10)
- INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8
- GEM PATH:
- /usr/lib/ruby/gems/1.8
- REMOTE SOURCES:
- http://gems.rubyforge.org
Una vez hemos creado el subdirectorio /home/Nombre_De_Usuario/gems, podemos cambiar las variables GEM_PATH y GEM_HOME creando un archivo llamado .gemrc en nuestra carpeta personal /home/Nombre_De_Usuario. El formato del archivo .gemrc es YAML, por lo que tiene que ser como el siguiente cambiando Nombre_De_Usuario y /usr/lib/ruby/gems/1.8 por nuestro nombre de usuario y por el anterior GEM PATH (que hemos averiguado con el comando gem environment) respectivamente.
.gemrc:gemhome: /home/Nombre_De_Usuario/gems
gempath:
- /home/Nombre_De_Usuario/gems
- /usr/lib/ruby/gems/1.8
Si ahora ejecutamos gem environment obtenemos:
Rubygems Environment:
- VERSION: 0.8.10 (0.8.10)
- INSTALLATION DIRECTORY: /home/Nombre_De_Usuario/gems
- GEM PATH:
- /home/Nombre_De_Usuario/gems
- /usr/lib/ruby/gems/1.8
- REMOTE SOURCES:
- http://gems.rubyforge.org
Mas información:
- http://forums.site5.com/showthread.php?t=11954&highlight=ruby+gem
- http://blog.nanorails.com/articles/2006/08/12/install-your-own-ruby-on-a-shared-host
» Leer más, comentarios, etc...
BLOG - 3wstudio.com.ar
Cancelar eventos con Javascript
Diciembre 27th, 2006 - [Enlace local]
Leyendo el blog de aNieto2k encuentro esta explicación de como cancelar los eventos que van apareciendo mientras estamso en una paguina web
» Leer más, comentarios, etc...
BLOG - 3wstudio.com.ar
Cancelar eventos con Javascript
Diciembre 27th, 2006 - [Enlace local]
Leyendo el blog de aNieto2k encuentro esta explicación de como cancelar los eventos que van apareciendo mientras estamso en una paguina web
» Leer más, comentarios, etc...
Pensamientos ágiles
Cuatro años bloggeando
Diciembre 26th, 2006 - [Enlace local]
Pues parece que sÃ, llevo ya al menos cuatro años bloggeando. Leyendo el siempre interesante weblog de Aitor, me enteré de que él lleva cuatro años bloggeando. Tras eso me entró un poco la melancolÃa recordando todo lo hecho en los últimos años, los congresos, las charlas representando a javahispano por España, los proyectos iniciados en jh, los que salieron bien, los que salieron mal, y todas estas cosas.
El caso es que al final me pregunté: Y yo, ¿cuánto tiempo he estado bloggeando? Y cual fue mi sorpresa al descubrir que ¡mi cuarto aniversario fue ayer! La verdad es que no me esperaba que fuese hace tanto tiempo, pero se ve que el tiempo pasa muy rápido. Mis comienzos fueron curiosamente (no creo) los mismos que Aitor, pidiendo de prestado en freeroller.net. Mi final, sigue siendo de prestado pero ahora en blogger. Mi camino es mucho menos traceable que el de Aitor porque siempre ha sido muy irregular, de hecho he alternado blogging en inglés y español, y en diferentes servidores. Atrás queda un ya irecuperable blog en blog-city (¡no me acordaba de eso!), otro en javahispano, otro más, éste en inglés, en jroller, otro que está ahora mismo en estado de coma en blogspot (el hermano de éste, pero en inglés), y por último éste que estáis leyendo.
Que emocionante leer los posts de hace cuatro años. En cierto modo es como cuando hace años leÃas cartas que habÃas recibido o que no llegaste a enviar. En fin, ¡que recuerdos! :)
» Leer más, comentarios, etc...
Buayacorp
Problema con los filtros genéricos
Diciembre 26th, 2006 - [Enlace local]
Hoy, acabo de encontrar en un foro la siguiente porción de código, que según su autor protege de ataques SQL Injection y XSS:
# Función para evitar ataques SQL injection y XSS function limpiar_sql($value){ $value = trim(htmlentities($value)); // Evita introducción código HTML if (get_magic_quotes_gpc()) $value = stripslashes($value); $value = mysql_real_escape_string($value); return $value; }
El problema con este tipo de funciones es que dan una falsa sensación de seguridad si éstas no son aplicadas en el lugar correcto, por ejemplo si intentamos usar esa función para el siguiente ejemplo:
$url = limpiar_sql($_POST['url']); // Guardar el valor... // Mostrar la url echo '<a href="' . $url . '">enlace</a>";
Veremos que la porción de código mostrada es vulnerable a XSS si el valor de url contiene algo como javascript:alert(document.cookie).
Si recordamos una entrada anterior, el bug en asp.net que permite realizar ataques XSS tiene un problema similar (uso de HttpUtility.HtmlEncode en lugar de HttpUtility.UrlEncode).
Como reflexión final, si queremos hacer uso de este tipo de funciones para validar/filtrar todos nuestros datos, debemos saber realmente que estamos haciendo.
