Noticias Weblogs Foros Wiki Código
Sponsors:

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Anunciarse aquí

PlanetaCódigo en inglés

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

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...

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):

  1. Conseguir una beca para realizar un master -fuera de Perú- en Ciencias de la Computación.
  2. 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 :D
  3. 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.
  4. Mejorar en gramática y ortografía.
  5. Publicar entradas en este blog con regular frecuencia.
  6. Convencer a mis amigas(os) y familiares para que inicien un blog.
  7. 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]

El último día veíamos los pasos necesarios para crear una base de datos InnoDb que soportan integridad referencial y decíamos que esta característica nos permitiría ahorrarnos buena parte del trabajo “sucio” a la hora confeccionar los programas que hacen uso de ésta. Veamos si es cierto.

Recordemos brevemente los pasos necesarios para entrar en nuestra base de datos
- Primero accedemos al intérprete de comandos de Mysql
- Luego “usamos” la base de datos

Una vez aquí, vamos a introducir nuestro primer registro en una de las tablas, por ejemplo, la de artículos:

mysql> INSERT INTO articulos VALUES (null,"Primer articulo",null);
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

mysql> select * from articulos;
+——–+—————–+———+
| 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

INSERT INTO Articulos VALUES(null, null, null, null, "articulo", null, nul…..

-

Podemos hacerlo mucho más sencillo con

mysql> INSERT INTO articulos(descripcion) VALUES ("Segundo articulo")
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.

mysql> select * from articulos;
+——–+——————+———+
| 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

mysql> INSERT INTO articulos(descripcion) VALUES ("Tercer articulo"), ("Cuarto articulo"), ("Quinto articulo");
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0




mysql> select * from articulos;
+——–+——————+———+
| 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

mysql> INSERT INTO caracteristicas VALUES (1,10.25,null);
Query OK, 1 row affected (0.02 sec)


mysql> INSERT INTO caracteristicas VALUES (2,2.20 ,null);
Query OK, 1 row affected (0.02 sec)


mysql> SELECT * FROM caracteristicas;
+——————+——-+———+
| 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

mysql> INSERT INTO caracteristicas VALUES (1,20,null);
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?

mysql> INSERT INTO caracteristicas VALUES (10,20,null);
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?

mysql> DELETE FROM articulos WHERE codigo=1;
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

mysql> select * from caracteristicas;
+——————+——+———+
| 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

mysql> ALTER TABLE articulos
    ->       ADD creado date,
    ->       ADD modificado date,
    ->       ADD cambios Tinyint;
Query OK, 4 rows affected (0.16 sec)
Records: 4  Duplicates: 0  Warnings: 0


mysql> desc articulos;
+————-+——————+——+—–+———+—————-+
| 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:

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.

Hostgator CronJob

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í:

PLAIN TEXT
PHP:
exec("/home/usuario/public_html/cronjobs/mysqlbackup.sh");

?>

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

» 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:

Dado que últimamente ando algo corto de dinero :D , 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.

Series Express

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]

[¡Feliz Día de los Inocentes!]


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]

[¡Feliz Día de los Inocentes!]


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

Ganador del sorteo navideño

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 :D

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:

» 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:

php:
# 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:

php:
$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.

» Leer más, comentarios, etc...